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