Главная страница

Документ 50 (2). К разработка программы на Ассемблере


Скачать 6.51 Kb.
НазваниеК разработка программы на Ассемблере
Дата19.01.2023
Размер6.51 Kb.
Формат файлаdocx
Имя файлаДокумент 50 (2).docx
ТипКонтрольная работа
#894590

Контрольная работа




КР2. Разработка программы на Ассемблере. Вариант 10. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит эти же числа на экран в порядке возрастания величины числа, причем в «троичной» системе счисления.





Выполнил: Абдушукуров Гафур

; По запросу программы пользователь вводит с
; клавиатуры целое положительное десятичное число N.
; По следующему запросу он вводит с клавиатуры N целых трехзначных
; положительных десятичных чисел, разделенных пробелами.
; Программа выводит наибольшее число из введенных,
; представленное в десятичной и шестнадцатеричной системах счисления.

; Подключение библиотеки подпрограмм
include 'emu8086.inc'

ORG 100h

start: jmp beg
number dw 0
maxim dw 0
array dw 10 dup (0)
hexbuf dw '0000h',0
symb db '0123456789ABCDEF'

; вывод AX в 16ричном виде
print_hex:add si,4
hex0: dec si
mov dx,0
mov di,16
div di ; DL = младшая 16ричная цифра
lea bx,symb ; BX = таблица символов
push ax
mov al,dl ; преобразование цифры в символ
xlat
mov [si],al ; запись символа в строку
pop ax
cmp ax,0 ; конец преобразования ?
jnz hex0 ; нет - продолжение цикла
call print_string ; печать строки результата
ret

; get char from keyboard
; into AL:
getchar:MOV AH, 00h
INT 16h
; and print it:
MOV AH, 0Eh
INT 10h
ret

; Этот символ - цифра ? Да Нет
isdigit:cmp al,'0'
jc id1
cmp al,'9'+1
jnc id1
clc
ret
id1: stc
ret

getval3:mov cx,3 ; ввод 3значного десятичного числа AX (с лидирующими 0)
mov ax,0
v1: push ax
call getchar
call isdigit
jc fmterr
sub al,'0'
mov bl,al ; bl=цифра
mov bh,0
pop ax ; ax=ax*10+bx
mov si,10
mul si
add ax,bx
loop v1
ret

; ошибка - введена не цифра
fmterr: call pthis
db 13,10,'You must enter 3 digits',0
int 20h

; ошибка - N должно быть от 001 до 010
e2: call pthis
db 13,10,'You must enter a value from 001 to 010',0
int 20h

; основная программа
beg:

call pthis
DB 'Enter 3 digits for N: ', 0
CALL getval3 ; ввести N
cmp ax,0 ; проверить N на допустимость
jz e2
cmp ax,11
jnc e2
mov number,ax ; number=N
call pthis
db 13,10,'Enter array of N 3digits',13,10,0
mov cx,number
lea di,array ; ввести массив чисел
main0: push cx
call getval3
stosw
call pthis ; печать пробела между числами
db 32,0
pop cx
loop main0

lea si,array ; maxim=первое число массива
mov ax,[si]
mov maxim,ax
mov cx,number ; цикл поиска maxim
main1: lodsw ; вводим число из массива
cmp ax,maxim ; если оно >=maxim, то запоминаем
jc skip
mov maxim,ax
skip: loop main1

mov ax,maxim ; вывод maxim на печать
CALL pthis
DB 13, 10, 'Maximal value: ', 0
CALL print_num ; print number in AX.(10ичный вид)
call pthis
db '=',0
mov ax,maxim
lea si,hexbuf
call print_hex ; (16ричный вид)
RET ; return to operating system.

; DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS ; required for print_num.


DEFINE_PTHIS

END



написать администратору сайта