Вычислить выражение - Assembler (223244)

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

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

Написать программу, которая вычисляет арифметическое выражение и результат записывает в память Операнды А, В, С, D, E, F беззнаковые, длиной в байтах, согласно индекса X=K+B3-D2/C1+E1*F2 K=25630

Решение задачи: «Вычислить выражение»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A       db      0
  9.         B       db      3 dup(1)
  10.         C       db      8
  11.         D       dw      12
  12.         E       db      48
  13.         F       dw      84
  14.         K       dw      25630
  15.  
  16.         Res     db      4 dup(0)
  17. .code
  18.  
  19. main    proc
  20.         mov     ax,     @data
  21.         mov     ds,     ax
  22.  
  23.         mov     dx,     0               ;(dx:ax):=K
  24.         mov     ax,     K
  25.         add     ax,     word ptr B      ;(dx:ax):=K+B3
  26.         adc     dl,     byte ptr B+2
  27.         adc     dh,     0
  28.  
  29.         mov     word ptr Res,   ax      ;сохранение промежуточных результатов
  30.         mov     word ptr Res+2, dx
  31.  
  32.         mov     ax,     D               ;(dx:ax):=D2
  33.         mov     dx,     0
  34.         mov     bh,     0               ;bx:=C1
  35.         mov     bl,     C
  36.         div     bx                      ;ax:=D2/C1
  37.         mov     bx,     ax              ;bx:=D2/C1
  38.  
  39.         mov     ax,     word ptr Res    ;восстановление промежуточных результатов
  40.         mov     dx,     word ptr Res+2
  41.  
  42.         sub     ax,     bx              ;(dx:ax):=(dx:ax)-bx=K+B3-D2/C1
  43.         sbb     dx,     0
  44.  
  45.         push    ax                      ;сохранение промежуточных результатов
  46.         push    dx
  47.  
  48.         mov     ah,     0               ;(dx:ax):=E1*F2
  49.         mov     al,     E
  50.         mul     word ptr F
  51.  
  52.         pop     bx                      ;восстановление промежуточных результатов
  53.         pop     cx
  54.  
  55.         add     ax,     cx              ;(dx:ax):=K+B3-D2/C1+E1*F2
  56.         adc     dx,     bx
  57.  
  58.         mov     word ptr Res,   ax      ;запись результата в память
  59.         mov     word ptr Res+2, dx
  60.  
  61.         mov     ax,     4C00h
  62.         int     21h
  63. main    endp
  64.  
  65. end     main

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


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

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

11   голосов , оценка 4.091 из 5

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

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

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