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