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