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

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

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

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

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       dw      12
        B       dw      14
        C       dw      15
        X       dw      ?
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     cx,     A       ;cx:=A
        mov     ax,     B
        mov     bl,     3
        imul    bl
        sub     cx,     ax      ;cx:=A-3B
        mov     ax,     C
        mov     dx,     0
        mov     bx,     3
        idiv    bx
        add     cx,     ax      ;cx:=A-3B+C/3
        mov     ax,     6
        imul    cx              ;ax:=6(A-3B+C/3)
        mov     cx,     ax      ;cx:=6(A-3B+C/3)
        add     cx,     10      ;cx:=6(A-3B+C/3)+10
        mov     X,      cx      ;X:=6(A-3B+C/3)+10
 
        mov     ax,     4C00h
        int     21h
main    endp
 
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