Вывод значения из регистра AX - Assembler
Формулировка задачи:
Всем доброго времени суток, друзья! Помогите, пожалуйста, решить такую проблему, нужно вывести число из АХ, обозначу в коде комментом, где именно:
Спасибо за внимание!
stseg segment para stack "stack" db 64 dup ( "stack" ) stseg ends dseg segment para public "data" num dw -12345 pause db 2,?,2 error db "incorrect number $" buff db 6,?,6 Dup(?) buff2 db 6,?,6 Dup(?) mrr db 13,13,"Please, enter num: $" mpp db 13,13,"Please, enter num to addition: $" qs db 0Dh,0Ah,24h dseg ends cseg segment para public "code" main proc far assume cs:cseg, ds:dseg, ss:stseg push ds xor ax,ax push ax mov ax,dseg mov ds,ax mov ax,03 int 10h ;очистка экрана call outputs ;вывод строки "enter num" call inputn ;функция ввода числа ;call digit ;вывод числа lea dx, pause ;пауза mov ah,10 int 21h mov ax,4C00h ;окончание мейна int 21h main endp inputn proc mov ah,0ah mov dx,offset buff ; аддрес буфера int 21h ; принимаем строку mov dx,offset qs mov ah,09 int 21h mov dx,offset mpp mov ah,09 int 21h mov ah,0ah mov dx,offset buff2 ; аддрес буфера int 21h ; принимаем строку mov dx,offset qs mov ah,09 int 21h mov si,offset buff+2 ; берем аддрес начала строки cmp byte ptr [si],"-" ; если первый символ минус jne ii1 ;перейти, если не равно 0 mov di,1 ; устанавливаем флаг inc si ; и пропускаем его ii1: xor ax,ax ;сравнение mov bx,10 ; заносим значение 10 в бх ii2: mov cl,[si] ; берем символ из буфера cmp cl,0dh ; проверяем не последний ли он je endin ; если символ не последний, то проверяем его на правильность cmp cl,'0' ; если введен неверный символ <0 jb er ;перейти, если меньше чем cmp cl,'9' ; если введен неверный символ >9 ja er ;перейти, если больше sub cl,'0' ; делаем из символа число mul bx ; умножаем на 10 add ax,cx ; прибавляем к остальным inc si ; указатель на следующий символ jmp ii2 ; повторяем er: ; если была ошибка, то выводим сообщение об этом и выходим mov dx, offset error mov ah,09 int 21h int 20h ; все символы из буфера обработаны число находится в ax endin: cmp di,1 ; если установлен флаг, то jnz ii3 neg ax ; делаем число отрицательным ii3: add ax,5 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;ВОТ ЗДЕСЬ НУЖНО ВЫВЕСТИ РЕЗУЛЬТАТ НА ЭКРАН ret inputn endp outputs proc mov dx,offset mrr mov ah,09 int 21h ret outputs endp new_s proc ;mov dx,0x0a ;mov ah,09 ;int 21h ;ret new_s endp digit proc mov bx, num or bx,bx jns m1 mov al,'-' int 29h neg bx m1: mov ax,bx xor cx,cx mov bx,10 m2: xor dx,dx div bx add dl,'0' push dx inc cx test ax,ax jnz m2 m3: pop ax int 29h loop m3 ret digit endp cseg ends end main
Решение задачи: «Вывод значения из регистра AX»
textual
Листинг программы
add eax,ebx; EAX:=EAX+EBX
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д