Вывод значения из регистра 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