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