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

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

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

Здравствуйте,прошу помочь с Ассемблером. Задание:Вычислить значение выражения. Выписать состояние регистров,каждый раз при выполнении очередной инструкции. Заранее спасибо за помощь.

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;cx=(-15/6)
        mov     ax,     -15
        mov     bx,     6
        cwd
        idiv    bx
        mov     cx,     ax
        ;cx=cx+(34+7*2)*2
        mov     ax,     7
        mov     bx,     2
        imul    bx
        add     ax,     34
        imul    bx
        add     cx,     ax
        ;bx=16+13/8
        mov     ax,     13
        mov     bx,     8
        cwd
        idiv    bx
        add     ax,     16
        mov     bx,     ax
        ;cx/bx
        mov     ax,     cx
        cwd
        idiv    bx
        ;ax=cx/bx-14
        sub     ax,     14
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

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

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

14   голосов , оценка 3.714 из 5
Похожие ответы