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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы