xor dx,dx ; очистка регистра dx
mov al,bcd1[di] ; запись в регистр al di-ого разряда числа bcd1
mov dl,bcd2[di] ; запись в регистр dl di-ого разряда числа bcd2
cmp al,dl ; сравнение вида al<=dl и если равно, то...
je equal ; ...переход на метку equal
jl signum ; ...если меньше, то переход на метку signum
jmp precycle ; ...в противном случае переход на метку precycle
equal: ; пользовательская метка equal
dec si ; декремент si
loop compare ; если cx еще не равно 0, то cx:=cx-1 и переход к compare
signum: ; пользовательская метка signum
mov sign,1 ; запись в переменную-знак sign числа 1
precycle: ; пользовательская метка precycle
cmp sign,1 ; сравнение вида sign=1 и если true, то...
jne forward ; ...в противном случае переход на метку forward
bcycle: ; пользовательская метка bcycle
xor ax,ax ; очистка регистра ax
xor dx,dx ; очистка регистра dx
mov al,bcd1[si] ; запись в младший байт регистра ax si-ого разряда числа bcd1
mov dl,bcd2[si] ; запись в младший байт регистра dx si-ого разряда числа bcd2
mov num1[si-2],dl ; запись в [si-2]-й разряд числа num1 содержимого регистра dl
mov num2[si-2],al ; запись в [si-2]-й разряд числа num2 содержимого регистра al
inc si ; инкремент si
loop bcycle ; если cx еще не равно 0, то cx:=cx-1 и переход к bcycle,...
mov si,0 ; запись в индексный регистр si нуля
mov cx,10 ; инициализация счетчика циклов cx десятью
jmp cycle ; безусловный переход к основному циклу cycle
forward: ; пользовательская метка forward
fcycle: ; пользовательская метка fcycle
xor ax,ax ; очистка регистра ax
xor dx,dx ; очистка регистра dx
mov al,bcd1[si] ; запись в младший байт регистра ax si-ого разряда числа bcd1
mov dl,bcd2[si] ; запись в младший байт регистра dx si-ого разряда числа bcd2
mov num1[si-2],al ; запись в [si-2]-й разряд числа num1 содержимого регистра al
mov num2[si-2],dl ; запись в [si-2]-й разряд числа num2 содержимого регистра dl
inc si ; инкремент si
loop fcycle ; если cx еще не равно 0, то cx:=cx-1 и переход к fcycle,...
mov si,0 ; запись в индексный регистр si нуля
mov cx,10 ; инициализация счетчика циклов cx десятью
cycle: ; пользовательская метка cycle
xor ax,ax ; очистка регистра ax
xor dx,dx ; очистка регистра dx
mov al,num1[si] ; запись в регистр al si-ого разряда числа num1
mov dl,num2[si] ; запись в регистр dl si-ого разряда числа num2
cmp al,dl ; сравнение вида al<dl и если true, то...
jl less ; ...переход на метку less
sub al,dl ; ...в противном случае разность вида al:=al-dl
mov res[si],al ; запись в si-й разряд результата res полученной разности al
inc si ; инкремент si
loop cycle ; если cx еще не равно 0, то cx:=cx-1 и переход к cycle
jmp endprog ; ...в противном случае переход к концу программы endprog
less: ; пользовательская метка less
add al,10 ; сумма вида al:=al+10
sub al,dl ; разность вида al:=al-dl
mov res[si],al ; запись в si-й разряд результата res полученной разности al
inc si ; инкремент si (т. е. переход к следующему разряду)
mov di,si ; запись в индексный регистр di содержимого регистра si
cmp num1[si],0 ; сравнение следующего разряда числа num1 с нулем...
je zero ; ...и если true, то переход на метку zero
sub num1[si],1 ; ...в противном случае вычитаем 1 из si-ого разряда числа
loop cycle ; если cx еще не равно 0, то cx:=cx-1 и переход к cycle
jmp endprog ; ...в противном случае переход к концу программы endprog
zero: ; пользовательская метка zero
mov num1[di],9 ; запись в di-й разряд числа num1 девятки
inc di ; инкремент di (т. е. переход к следующему разряду)
cmp num1[di],0 ; сравнение следующего разряда числа num1 с нулем...
je zero ; ...и если true, то переход на метку zero
sub num1[di],1 ; ...в противном случае вычитаем 1 из di-ого разряда числа
loop cycle ; если cx еще не равно 0, то cx:=cx-1 и переход к cycle
endprog: ; пользовательская метка конца программы endprog
call output ; вызов процедуры output
mov ax,4c00h ; формирование функции стандартного выхода
int 21h ; формирование прерывания типа 21h и стандартный выход
;Результат работы в массиве res:=(num1=bcd1)-(num2=bcd2) (знак минус определяется через sign=1 или sign=0)
main endp ; конец процедуры main
end main ; конец программы с точкой входа main
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.