Ввести с клавиатуры в hex- виде коды, вывести на экран сумму в 10-ой системе счисления - Assembler
Формулировка задачи:
Выдает не то что нужно,а задание гласит так:
Ввести с клавиатуры в hex- виде коды для занесения в регистры ВХ и СХ. Вывести на экран сумму содержимого этих регистров в десятичном виде
.386
dseg segment use16
txt1 db 13,10,'Type HEX: $'
txt2 db 13,10,'Result..: $'
dseg ends
cseg segment use16
assume cs:cseg,ds:dseg
m1:
mov cx,dseg
mov ds,cx
;////ввод с клавы в bx
xor bx,bx
m3:
mov ah,1
int 21h
cmp al,13
je short stop
sub al,30h
cmp al,9
jbe short m5
sub al,11h
cmp al,5
jbe short m4
sub al,20h
m4:
add al,10
m5:
shl bx,4
or bl,al
jmp short m3
stop:
;////ввод с клавы в cx
xor cx,cx
m6:
mov ah,1
int 21h
cmp al,13
je short stop1
sub al,30h
cmp al,9
jbe short m8
sub al,11h
cmp al,5
jbe short m7
sub al,20h
m7:
add al,10
m8:
shl cx,4
or cl,al
jmp short m6
stop1: ;////сложение и результат в ax
ret
;pop bx cx
add bx,cx
mov ax,bx
;////вывод в котором происходит непонятное
pusha
mov bx,10
xor cx,cx
isDiv:
xor dx,dx
movsx edx, dx
div bx
push dx
inc cx
or ax,ax
jnz short isDiv
isOut:
pop ax
add al,30h
int 29h
loop isOut
popa
ret
exit:
xor ax,ax
int 16h
int 20h
cseg ends
end m1Решение задачи: «Ввести с клавиатуры в hex- виде коды, вывести на экран сумму в 10-ой системе счисления»
textual
Листинг программы
model small .data dbInp db 10,13,'Enter HEX-code:$' dbOut db 10,13,'Decimal result:$' dbErr db 10,13,'Error overflow!$' .stack 100h .code start: mov ax,@data mov ds,ax call inpNum mov bx,di call inpNum mov cx,di add bx,cx mov ax,bx call outNum mov ax,4C00h int 21h ; inpNum: mov ah,9 lea dx,dbInp int 21h xor di,di mov si,16 @@01: xor ax,ax int 16h mov ah,al cmp al,13 jz @@03 cmp al,'0' jb @@01 cmp al,'9' jbe @@02 and al,223 mov ah,al cmp al,'A' jb @@01 cmp al,'F' ja @@01 sub ah,7 @@02: sub ah,'0' push ax int 29h pop ax mov al,ah and ax,0fh xchg di,ax xor dx,dx mul si add di,ax or dx,dx jz @@01 mov ah,9 lea dx,dbErr int 21h jmp inpNum @@03: ret ; outNum: push ax mov ah,9 lea dx,dbOut int 21h pop ax xor cx,cx mov si,10 @@04: xor dx,dx div si push dx inc cx or ax,ax jnz @@04 @@05: pop ax or al,'0' int 29h loop @@05 ret end start