Умножение чисел в ASCI-формате - Assembler
Формулировка задачи:
Нужно было написать программу вычисление произведение 1723893618 * 6, используя для обеих множителей и результата представление десятичных чисел в ASCII- формате.
Мне помогли ее сделать, но числа вроде бы представляются в десятичном формате, а не ASCII. Считает все правильно, но вот с форматами то ли я не разобрался, то ли программа использует обычный формат. Объясните, пожалуйста, что и как
Скриншоты выполнения программы и дамп дебагера:
Код:
.model small
.stack 256
.data
mes0 db 13,10,'Chislo(1): $'
mes1 db 13,10,'Chislo(2): $'
mes2 db 13,10,' Rezult: $'
buff db 12 dup('0')
dig2 db 0
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
lea dx,mes0
call message
xor bx,bx
mov cx,10
@@1: xor ax,ax
int 16h
cmp al,13
je @@2
cmp al,'0'
jb @@1
cmp al,'9'
ja @@1
int 29h
push ax
inc bx
loop @@1
@@2: mov cx,bx
lea di,buff+11
std
save: pop ax
stosb
loop save
;-------------------------------------------------------------
lea dx,mes1
call message
@@3: mov ah,8
int 21h
cmp al,'0'
jb @@3
cmp al,'9'
ja @@3
int 29h
and al,0fh
mov [dig2],al
;-------------------------------------------------------------
lea dx,mes2
call message
std
mov cx,12
lea si,buff+11
xor bx,bx
mov bl,[dig2]
mix: lodsb
and ax,0fh
xor dx,dx
mul bl
aam
add al,bh
cmp al,9
jbe @@4
sub al,0Ah
inc ah
@@4: push ax
mov bh,ah
loop mix
;-------------------------------------------------------------
mov cx,12
prn: pop ax
or al,30h
int 29h
loop prn
;-------------------------------------------------------------
exit:
xor ax,ax
int 16h
int 20h
;-------------------------------------------------------------
message:
mov ah,9
int 21h
ret
mov ax, 4ch
int 21h
end startРешение задачи: «Умножение чисел в ASCI-формате»
textual
Листинг программы
.model small .386 .data mes0 db 0Dh,0Ah,'Chislo(1): $' mes1 db 0Dh,0Ah,'Chislo(2): $' mes2 db 0Dh,0Ah,' Result: $' buff db 12 dup(0) dig2 db 0 .stack db 256 dup(?) .code start: mov ax,@data mov ds,ax mov es,ax mov ah,09h lea dx,mes0 int 21h xor bx,bx mov cx,10 one: xor ax,ax int 16h cmp al,0Dh je three cmp al,'0' jb one cmp al,'9' jna two cmp al,'A' jb one cmp al,'F' ja one two: int 29h push ax inc bx loop one three: std lea di,buff+11 mov cx,bx save: pop ax cmp al,'9' jbe four sub al,37h jmp five four: sub al,30h five: stosb loop save mov ah,09h lea dx,mes1 int 21h six: mov ah,08h int 21h cmp al,'0' jb six cmp al,'9' jna seven cmp al,'A' jb six cmp al,'F' ja six seven: int 29h cmp al,'9' jbe eight sub al,37h jmp nine eight: and al,0Fh nine: mov [dig2],al ;++++++++++++++++++++++++++++++; mov ah,09h lea dx,mes2 int 21h std lea si,buff+11 xor bh,bh mov bl,[dig2] mov cx,12 mix: lodsb mul bl add al,bh shl ax,4 shr al,4 push ax mov bh,ah loop mix shr bx,8 push bx mov cx,13 prn: pop ax cmp al,9 jbe ten add al,37h jmp eleven ten: or al,30h eleven: int 29h loop prn xor ax,ax int 16h mov ah,4Ch mov al,00h int 21h end start