int 21h ; программное прерывание типа 21h
add si,2 ; увеличение индекса массива si на 2
cmp si,di ; сравнение вида si=20, и если false, то...
jne star0 ; ...переход на метку star0
mov ah,07h ; формирование функции ввода единичного символа (в целях ожидания)
int 21h ; программное прерывание типа 21h
ret ; возврат в основную процедуру
outnum endp ; конец процедуры outnum
main proc ; начало процедуры main
mov ax,@data ; инициализация сегментного...
mov ds,ax ; ...регистра ds
mov ah,9 ; формирование функции вывода строки на экран
mov dx,offset mess1 ; инициализация dx адресом начала символьной цепочки mess1
int 21h ; программное прерывание типа 21h
mov dx,13 ; инициализация dx символом "Carriage Return" ("Возврат Каретки")
mov ah,02h ; формирование функции вывода единичного символа на экран
int 21h ; программное прерывание типа 21h
mov dx,10 ; инициализация dx символом "Line Feed" ("Перевод Строки")
mov ah,02h ; формирование функции вывода единичного символа на экран
int 21h ; программное прерывание типа 21h
mov dx,10 ; инициализация dx символом "Line Feed" ("Перевод Строки")
mov ah,02h ; формирование функции вывода единичного символа на экран
int 21h ; программное прерывание типа 21h
mov di,0 ; инициализация индексного регистра di нулем
scan: ; пользовательская метка scan
call keyin ; вызов процедуры keyin
add di,2 ; увеличение значения регистра di на 2
cmp di,20 ; сравнение вида di=20, и если false, то...
jne scan ; переход на метку scan
mov dx,10 ; инициализация регистра dx числом 10
mov ah,02h ; формирование функции вывода единичного символа на экран
int 21h ; программное прерывание типа 21h
mov si,0 ; инициализация нулем индекса si первичного массива mass1
mov di,0 ; инициализация нулем индекса di вторичного массива mass2
mov cx,10 ; инициализация числом 10 счетчика циклов
cycle: ; пользовательская метка cycle
mov ax,mass1[si] ; запись в регистр ax si-ого элемента массива mass1
cmp ax,0 ; сравнение с нулем содержимого регистра ax
jg positive ; если ax больше нуля, то переход на метку positive
add si,2 ; в противном случае увеличиваем si на 2 (т. к. массив типа word)
loop cycle ; уменьшаем cx на 1, и если cx не равно 0, то переходим на метку cycle
jmp endpr ; в противном случае переходим на метку endpr, т. е. к концу программы
positive: ; пользовательская метка positive
mov mass2[di],ax ; в di-й элемент массива mass2 записываем ax
add di,2 ; увеличиваем di на 2
add si,2 ; увеличиваем si на 2
loop cycle ; уменьшаем cx на 1, и если cx не равно 0, то переходим на метку cycle
endpr: ; пользовательская метка endpr
call outnum ; вызов процедуры outnum
mov ax,4c00h ; формируем функцию стандартного выхода
int 21h ; формирование прерывания типа 21h и стандартный выход
main endp ; конец процедуры main
end main ; конец программы с точкой входа main
;ВАРИАНТ-17: Написать программу вычитания двух 10-байтовых чисел с учетом знака
model small ; директива модели памяти model с параметром small
.data ; упрощенная директива сегмента данных
bcd1 db 13 dup(13) ; инициализация буфера 10-байтного BCD-числа
bcd2 db 13 dup(13) ; инициализация буфера 10-байтного BCD-числа
num1 db 10 dup(0) ; инициализация нулевого BCD-числа num1
num2 db 10 dup(0) ; инициализация нулевого BCD-числа num2
res db 10 dup(0) ; инициализация нулевого BCD-разности res
sign db 0 ; инициализация переменной-знака sign
mess1 db 'Please enter first 10-byte BCD-number: $' ; символьная цепочка mess1
mess2 db 'Please enter second 10-byte BCD-number: $' ; символьная цепочка mess2
mess3 db 'Difference: $' ; символьная цепочка mess3
.stack 256h ; упрощенная директива для 256-байтного сегмента стека
.code ; упрощенная директива сегмента кода
innum proc ; начало процедуры innum
mov ah,9 ; формирование функции вывода строки на экран
mov dx,offset mess1 ; инициализация dx адресом начала символьной цепочки mess1
int 21h ; программное прерывание типа 21h
mov dx,offset bcd1 ; инициализация dx адресом начала буфера ввода bcd1
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.