Вывод значения из регистра 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д