Вычитание 20-значных чисел - Assembler

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

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

Помогите,пожалуйста. Задача: ввести два 20-значных числа,вычесть,используя AAA,DAS,AAS или DAA,и вывести на экран. (в программе использовать процедуру). Буду ооочень благодарна.

Решение задачи: «Вычитание 20-значных чисел»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         MaxLen  equ     20
  9.         First   db      MaxLen dup(0)
  10.         Second  db      MaxLen dup(0)
  11.         Third   db      MaxLen dup(0)
  12.  
  13.         Asciiz1 db      '9876543210', 0
  14.         Asciiz2 db      '1234567890', 0
  15.  
  16. .code
  17.  
  18. ;переводит ASCIIZ строку в длинное число формата BCD
  19. ;вход
  20. ; ds:si - ASCIIZ строка
  21. ;выход
  22. ; ds:di - длинное число формата BCD little-endian
  23. AsciizToBcd     proc
  24.         push    ax
  25.         push    bx
  26.         push    cx
  27.         push    dx
  28.         push    si
  29.         push    di
  30.  
  31.         mov     cx,     0
  32. @@ScanEndOfStr:
  33.         mov     al,     [si]
  34.         test    al,     al
  35.         jz      @@Break
  36.         inc     si
  37.         inc     cx
  38.         jmp     @@ScanEndOfStr
  39. @@Break:
  40.  
  41.         jcxz    @@Zero
  42.  
  43.         dec     si
  44. @@Convert:
  45.         mov     al,     [si]
  46.         sub     al,     '0'
  47.         mov     [di],   al
  48.         inc     di
  49.         dec     si
  50.         loop    @@Convert
  51.  
  52. @@Zero:
  53.         pop     di
  54.         pop     si
  55.         pop     dx
  56.         pop     cx
  57.         pop     bx
  58.         pop     ax
  59.         ret
  60. AsciizToBcd     endp
  61.  
  62. ;Показать длинное BCD на экран
  63. ;вход
  64. ; ds:si - начало числа
  65. ShowBcd         proc
  66.         push    ax
  67.         push    bx
  68.         push    cx
  69.         push    dx
  70.         push    si
  71.         push    di
  72.  
  73.         mov     cx,     MaxLen
  74.         add     si,     cx
  75.         dec     si
  76. @@SkipLeadingZero:
  77.         mov     al,     [si]
  78.         test    al,     al
  79.         jnz     @@Write
  80.         dec     si
  81.         loop    @@SkipLeadingZero
  82. @@Write:
  83.         mov     al,     [si]
  84.         add     al,     '0'
  85.         int     29h
  86.         dec     si
  87.         loop    @@Write
  88.  
  89.         pop     di
  90.         pop     si
  91.         pop     dx
  92.         pop     cx
  93.         pop     bx
  94.         pop     ax
  95.         ret
  96. ShowBcd         endp
  97.  
  98. ;Вычитанеи длинных BCD
  99. ;вход
  100. ; si - уменьшаемое
  101. ; di - вычитаемое
  102. ;выход
  103. ; bx - разность
  104. SubBcd          proc
  105.         push    ax
  106.         push    bx
  107.         push    cx
  108.         push    dx
  109.         push    si
  110.         push    di
  111.  
  112.         mov     cx,     MaxLen
  113.         mov     ah,     [si]
  114. @@SubLoop:
  115.         mov     al,     ah
  116.         mov     ah,     [si+1]
  117.         sub     al,     [di]
  118.         aas
  119.         mov     [bx],   al
  120.         inc     si
  121.         inc     di
  122.         inc     bx
  123.         loop    @@SubLoop
  124.  
  125.         pop     di
  126.         pop     si
  127.         pop     dx
  128.         pop     cx
  129.         pop     bx
  130.         pop     ax
  131.         ret
  132. SubBcd          endp
  133.  
  134. main    proc
  135.         mov     ax,     @data
  136.         mov     ds,     ax
  137.  
  138.         lea     si,     Asciiz1
  139.         lea     di,     First
  140.         call    AsciizToBcd
  141.  
  142.         lea     si,     First
  143.         call    ShowBcd
  144.  
  145.         mov     al,     13
  146.         int     29h
  147.         mov     al,     10
  148.         int     29h
  149.  
  150.         lea     si,     Asciiz2
  151.         lea     di,     Second
  152.         call    AsciizToBcd
  153.  
  154.         lea     si,     Second
  155.         call    ShowBcd
  156.  
  157.         mov     al,     13
  158.         int     29h
  159.         mov     al,     10
  160.         int     29h
  161.  
  162.         lea     si,     First
  163.         lea     di,     Second
  164.         lea     bx,     Third
  165.         call    SubBcd
  166.         lea     si,     Third
  167.         call    ShowBcd
  168.  
  169.         mov     ax,     4C00h
  170.         int     21h
  171. main    endp
  172.  
  173. end     main

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


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

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

14   голосов , оценка 3.929 из 5

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

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

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