Умножение чисел в ASCI-формате - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно было написать программу вычисление произведение 1723893618 * 6, используя для обеих множителей и результата представление десятичных чисел в ASCII- формате. Мне помогли ее сделать, но числа вроде бы представляются в десятичном формате, а не ASCII. Считает все правильно, но вот с форматами то ли я не разобрался, то ли программа использует обычный формат. Объясните, пожалуйста, что и как Скриншоты выполнения программы и дамп дебагера: Код:
Листинг программы
  1. .model small
  2. .stack 256
  3. .data
  4. mes0 db 13,10,'Chislo(1): $'
  5. mes1 db 13,10,'Chislo(2): $'
  6. mes2 db 13,10,' Rezult: $'
  7. buff db 12 dup('0')
  8. dig2 db 0
  9. .code
  10. start:
  11. mov ax,@data
  12. mov ds,ax
  13. mov es,ax
  14. lea dx,mes0
  15. call message
  16. xor bx,bx
  17. mov cx,10
  18. @@1: xor ax,ax
  19. int 16h
  20. cmp al,13
  21. je @@2
  22. cmp al,'0'
  23. jb @@1
  24. cmp al,'9'
  25. ja @@1
  26. int 29h
  27. push ax
  28. inc bx
  29. loop @@1
  30. @@2: mov cx,bx
  31. lea di,buff+11
  32. std
  33. save: pop ax
  34. stosb
  35. loop save
  36. ;-------------------------------------------------------------
  37. lea dx,mes1
  38. call message
  39. @@3: mov ah,8
  40. int 21h
  41. cmp al,'0'
  42. jb @@3
  43. cmp al,'9'
  44. ja @@3
  45. int 29h
  46. and al,0fh
  47. mov [dig2],al
  48. ;-------------------------------------------------------------
  49. lea dx,mes2
  50. call message
  51. std
  52. mov cx,12
  53. lea si,buff+11
  54. xor bx,bx
  55. mov bl,[dig2]
  56. mix: lodsb
  57. and ax,0fh
  58. xor dx,dx
  59. mul bl
  60. aam
  61. add al,bh
  62. cmp al,9
  63. jbe @@4
  64. sub al,0Ah
  65. inc ah
  66. @@4: push ax
  67. mov bh,ah
  68. loop mix
  69. ;-------------------------------------------------------------
  70. mov cx,12
  71. prn: pop ax
  72. or al,30h
  73. int 29h
  74. loop prn
  75. ;-------------------------------------------------------------
  76. exit:
  77. xor ax,ax
  78. int 16h
  79. int 20h
  80. ;-------------------------------------------------------------
  81. message:
  82. mov ah,9
  83. int 21h
  84. ret
  85. mov ax, 4ch
  86. int 21h
  87. end start

Решение задачи: «Умножение чисел в ASCI-формате»

textual
Листинг программы
  1. .model small                   
  2. .386                               
  3.  
  4. .data                          
  5. mes0 db 0Dh,0Ah,'Chislo(1): $'
  6. mes1 db 0Dh,0Ah,'Chislo(2): $'
  7. mes2 db 0Dh,0Ah,'   Result: $'
  8. buff db 12 dup(0)
  9. dig2 db 0
  10.  
  11. .stack                                             
  12.     db  256 dup(?)     
  13.  
  14. .code                                          
  15. start:                                                                     
  16.     mov ax,@data       
  17.     mov ds,ax
  18.     mov es,ax
  19.    
  20.     mov ah,09h
  21.     lea dx,mes0
  22.     int 21h
  23.    
  24.     xor bx,bx
  25.     mov cx,10
  26.     one:
  27.         xor ax,ax
  28.         int 16h
  29.        
  30.         cmp al,0Dh
  31.         je three
  32.        
  33.         cmp al,'0'
  34.         jb one
  35.        
  36.         cmp al,'9'
  37.         jna two
  38.        
  39.         cmp al,'A'
  40.         jb one
  41.        
  42.         cmp al,'F'
  43.         ja one     
  44.        
  45.         two:
  46.         int 29h
  47.        
  48.         push ax
  49.        
  50.         inc bx
  51.     loop one
  52.    
  53.     three:
  54.     std
  55.     lea di,buff+11
  56.     mov cx,bx
  57.     save:
  58.         pop ax
  59.        
  60.         cmp al,'9'
  61.         jbe four
  62.        
  63.         sub al,37h
  64.        
  65.         jmp five
  66.  
  67.         four:
  68.         sub al,30h
  69.        
  70.         five:
  71.         stosb
  72.     loop save
  73.    
  74.     mov ah,09h
  75.     lea dx,mes1
  76.     int 21h
  77.    
  78.     six:
  79.     mov ah,08h
  80.     int 21h
  81.    
  82.     cmp al,'0'
  83.     jb six
  84.        
  85.     cmp al,'9'
  86.     jna seven
  87.        
  88.     cmp al,'A'
  89.     jb six
  90.        
  91.     cmp al,'F'
  92.     ja six
  93.    
  94.     seven:
  95.     int 29h
  96.    
  97.     cmp al,'9'
  98.     jbe eight
  99.    
  100.     sub al,37h
  101.    
  102.     jmp nine
  103.    
  104.     eight:
  105.     and al,0Fh
  106.    
  107.     nine:
  108.     mov [dig2],al
  109.    
  110. ;++++++++++++++++++++++++++++++;
  111.  
  112.     mov ah,09h
  113.     lea dx,mes2
  114.     int 21h
  115.    
  116.     std
  117.     lea si,buff+11
  118.     xor bh,bh
  119.     mov bl,[dig2]
  120.     mov cx,12
  121.     mix:
  122.         lodsb
  123.        
  124.         mul bl
  125.        
  126.         add al,bh
  127.        
  128.         shl ax,4
  129.         shr al,4
  130.        
  131.         push ax
  132.         mov bh,ah
  133.     loop mix
  134.    
  135.     shr bx,8
  136.     push bx
  137.  
  138.     mov cx,13
  139.     prn:
  140.         pop ax
  141.        
  142.         cmp al,9
  143.         jbe ten
  144.        
  145.         add al,37h
  146.        
  147.         jmp eleven
  148.        
  149.         ten:
  150.         or al,30h
  151.        
  152.         eleven:
  153.         int 29h
  154.     loop prn
  155.    
  156.     xor ax,ax
  157.     int 16h
  158.    
  159.     mov ah,4Ch                             
  160.     mov al,00h         
  161.     int 21h
  162. end start

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


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

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

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы