30.05.2008, 15:10
общий
это ответ
Здравствуйте, Alena De Lon!
Исправленная и дополненная программа в приложении
Удачи!
Приложение:
.model tiny ; Модель памяти, используемая для COM.code ; Начало сегмента кода.386 ; нужно для команды shld dx,ax,4org 100h ; Начальное значение счетчика - 100hbegin: lea dx,input1mov ah,9int 21hlea si,bcd1 ;адрес, куда запишем числоcall InputBCDlea dx,input2mov ah,9int 21hlea si,bcd2call InputBCDmov al,bcd1add al,bcd2daamov bcd3,almov al,bcd1+1adc al,bcd2+1daamov bcd3+1,al; Было бы неплохо проверить на перенос...lea dx,resultmov ah,9int 21h;******Перевод числа в символ и вывод его на экран*********;немного переделал с использованием сдвига (а не деления)xor cx,cxmov ax,word ptr bcd3next:mov dx,axand dx,0fh ;в младшей тетраде dl очередной разрядpush dx ;сохраним в стекеinc cx ;считаем значащие цифрыshr ax,4 ;выкидаем младший разрядtest ax,ax ;пока не пройдем все значащие разрядыjnz nextisOut: ;выводимpop ax ;очередной разрядor al,30h ;сделаем символ цифрыint 29hloop isOut;**********************************************************mov ah,10hint 16hint 20hInputBCD proc ;Ввод 4-знакового BCDxor dx,dx ;Здесь будем формироватьmov cx,4 ;4 цифрыGetLoop: ;цикл ввода цифрmov ah,0 ;ждем с клавиатурыint 16hcmp al,0dh ;по Enter-у выходим (если < 4 цифр)je InputBCD_retcmp al,‘1‘ ;проверим на допустимые кодыjb GetLoopcmp al,‘9‘ja GetLoopint 29h ;выведем на экранror ax,4 ;вдвинем младшую тетраду AL (очередную цифру) в старшую тетраду AHshld dx,ax,4 ;вдвинем очередную тетраду (из старших бит AH) в младшую тетраду DXloop GetLoop ;ждем 4 цифрыInputBCD_ret:mov [si],dx ;сохраняем результат!retInputBCD endpinput1 db ‘First number : $‘input2 db 0dh,0ah,‘Second number : $‘result db 0dh,0ah,‘Result : $‘bcd1 db 34h,18h ;Пусть лучше будут байтами...bcd2 db 89h,27hbcd3 db ?,?end begin
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен