Умножение чисел в 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы