Вычисление выражения по формуле. - Assembler (223261)

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

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

Доброго времени суток! Необходимо выполнить данные действия на ассемблере, заранее спасибо! Х= 6 (А - 3В + С / 3) + 10

Решение задачи: «Вычисление выражения по формуле.»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A       dw      12
  9.         B       dw      14
  10.         C       dw      15
  11.         X       dw      ?
  12. .code
  13.  
  14. main    proc
  15.         mov     ax,     @data
  16.         mov     ds,     ax
  17.  
  18.         mov     cx,     A       ;cx:=A
  19.         mov     ax,     B
  20.         mov     bl,     3
  21.         imul    bl
  22.         sub     cx,     ax      ;cx:=A-3B
  23.         mov     ax,     C
  24.         mov     dx,     0
  25.         mov     bx,     3
  26.         idiv    bx
  27.         add     cx,     ax      ;cx:=A-3B+C/3
  28.         mov     ax,     6
  29.         imul    cx              ;ax:=6(A-3B+C/3)
  30.         mov     cx,     ax      ;cx:=6(A-3B+C/3)
  31.         add     cx,     10      ;cx:=6(A-3B+C/3)+10
  32.         mov     X,      cx      ;X:=6(A-3B+C/3)+10
  33.  
  34.         mov     ax,     4C00h
  35.         int     21h
  36. main    endp
  37.  
  38. end     main

Объяснение кода листинга программы

  1. .model small - устанавливает модель сегментации данных для языка ассемблера, в данном случае small, что означает 16-битный сегментный режим.
  2. .stack 100h - устанавливает размер стека в 100 байтов.
  3. .data - сегмент данных.
  4. A dw 12 - определяет переменную A как 16-битное целочисленное значение, содержащее 12.
  5. B dw 14 - определяет переменную B как 16-битное целочисленное значение, содержащее 14.
  6. C dw 15 - определяет переменную C как 16-битное целочисленное значение, содержащее 15.
  7. X dw ? - определяет переменную X как 16-битное целочисленное значение, содержащее неопределенное значение.
  8. .code - сегмент кода.
  9. main proc - определяет процедуру main.
  10. mov ax, @data - перемещает сегмент данных в регистр ax.
  11. mov ds, ax - устанавливает сегмент данных равным сегменту, содержащемуся в регистре ax.
  12. mov cx, A - перемещает значение переменной A в регистр cx.
  13. mov ax, B - перемещает значение переменной B в регистр ax.
  14. mov bl, 3 - перемещает значение 3 в регистр bl.
  15. imul bl - выполняет умножение регистра bl на содержимое регистра ax и помещает результат в регистр ax.
  16. sub cx, ax - вычитает значение регистра ax из регистра cx.
  17. mov ax, C - перемещает значение переменной C в регистр ax.
  18. mov dx, 0 - перемещает значение 0 в регистр dx.
  19. mov bx, 3 - перемещает значение 3 в регистр bx.
  20. idiv bx - выполняет деление регистра bx на содержимое регистра ax и помещает частное в регистр ax, а остаток от деления в регистр dx.
  21. add cx, ax - прибавляет значение регистра ax к значению регистра cx.
  22. mov ax, 6 - перемещает значение 6 в регистр ax.
  23. imul cx - выполняет умножение регистра cx на содержимое регистра ax и помещает результат в регистр ax.
  24. mov cx, ax - перемещает значение регистра ax в регистр cx.
  25. add cx, 10 - прибавляет значение 10 к значению регистра cx.
  26. mov X, cx - перемещает значение регистра cx в переменную X.
  27. mov ax, 4C00h - перемещает значение 4C00h в регистр ax.
  28. int 21h - выполняет интерполяцию регистра ax с помощью функции BIOS.
  29. main endp - завершает определение процедуры main.
  30. end main - завершает программу.

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


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

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

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

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

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

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