Консультация № 137925
26.05.2008, 23:20
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! :-)
Такое у меня задание: «Используя команды для работы с упакованными числами, выполнить сложение двух ВСD чисел, введённых с клавиатуры. Число десятичных разрядов равно 4».
Пока я сделала то, что смогла. Мне очень нужно, чтобы Вы проверили (правильно я делаю или нет?). И еще одна просьба к Вам – помогите, ПОЖАЛУЙСТА, организовать ввод этих самых чисел с клавиатуры.
СПАСИБО!


Приложение:
.model tiny ; Модель памяти, используемая для COM.code ; Начало сегмента кодаorg 100h ; Начальное значение счетчика - 100hbegin: mov ax,bcd1add ax,bcd2daamov bcd3,axmov ax,bcd1+1adc ax,bcd2+1daamov bcd3+1,axmov ah,0;******Перевод числа в символ и вывод его на экран*********xor cx,cxmov si,16isDiv:xor dx,dxdiv sipush dxinc cxor ax,axjnz isDivisOut:pop axor al,30hint 29hloop isOut;**********************************************************mov ah,10hint 16hint 20hbcd1 dw 1834hbcd2 dw 2789hbcd3 dw ?end begin

Обсуждение

давно
Посетитель
7438
7205
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
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа