Легкая задачка и PUSH - Assembler

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

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

Задание: Вычислите значение выражения 4x^4 – 3x^2 + x % 4 для x = 2, 4, 6 в цикле (LOOP). Операция %- взятие остатка от деления. В сегменте данных (секции DATA, BSS) размещены только исходное значение x. Результат вычисления для каждого x кладётся на стек командой PUSH AX (если результат размещается в AX; аналогично — для любого другого регистра). Я не пойму что именно делает PUSH,он кладет на стек значение, а POP снимает со стека вроде как . Ну как мне узнать значение в точках x,я снимаю со стека,ну а где оно отображается и хранится... Вообще как задание корректно сделать?
.SECT   TEXT
        MOV     CX, 3
L:
        ADD (x), 2
        MOV BX, 4
        MOV AX, (x)
        DIV BX
        MOV AX, DX
        PUSH    AX
        MOV AX, (x)
        MUL (x)
        MOV BX, 3
        MUL BX
        MOV BX, -1
        MUL BX
        PUSH    AX
        MOV     AX, (x)
        MUL AX
        MUL AX
        MOV BX, 4
        MUL BX
        PUSH    AX
        POP AX
        POP AX
        POP AX
LOOP L

.SECT   DATA
x:  .WORD 0 
.SECT   BSS

Решение задачи: «Легкая задачка и PUSH»

textual
Листинг программы
.SECT   TEXT
        MOV     CX, 3
L:
        ADD (x), 2
        MOV BX, 4
        MOV AX, (x)
        DIV BX
        MOV AX, DX
        PUSH    AX
        MOV AX, (x)
        MUL (x)
        MOV BX, 3
        MUL BX
        MOV BX, -1
        MUL BX
        MOV BX, AX
        POP AX
        ADD AX, BX
        PUSH    AX
        MOV     AX, (x)
        MUL AX
        MUL AX
        MOV BX, 4
        MUL BX
        MOV BX, AX
        POP AX
        ADD AX, BX
        PUSH    AX
LOOP L
        
        
.SECT   DATA
x:  .WORD 0 
.SECT   BSS

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

  1. Сначала мы определяем секцию текста с помощью команды .SECT TEXT.
  2. Затем мы устанавливаем значение регистра CX равным 3 с помощью команды MOV CX, 3.
  3. Далее мы добавляем 2 к значению переменной x с помощью команды ADD (x), 2.
  4. Затем мы устанавливаем значение регистра BX равным 4 с помощью команды MOV BX, 4.
  5. Мы перемещаем значение переменной x в регистр AX с помощью команды MOV AX, (x).
  6. Затем мы делим значение регистра AX на значение регистра BX с помощью команды DIV BX.
  7. Значение регистра AX заменяется на результат деления с помощью команды MOV AX, DX.
  8. Значение регистра AX сохраняется на стеке с помощью команды PUSH AX.
  9. Значение регистра AX снова перемещается в регистр AX с помощью команды MOV AX, (x).
  10. Значение переменной x умножается на значение регистра BX, которое равно 3, с помощью команды MUL BX.
  11. Значение регистра BX устанавливается равным -1 с помощью команды MOV BX, -1.
  12. Значение переменной x умножается на значение регистра BX с помощью команды MUL BX.
  13. Значение регистра BX заменяется на значение регистра AX с помощью команды MOV BX, AX.
  14. Значение регистра AX извлекается из стека с помощью команды POP AX.
  15. Значение регистра AX добавляется к значению регистра BX с помощью команды ADD AX, BX.
  16. Значение регистра AX сохраняется на стеке с помощью команды PUSH AX.
  17. Значение регистра AX снова перемещается в регистр AX с помощью команды MOV AX, (x).
  18. Значение переменной x умножается на значение регистра AX с помощью команды MUL AX.
  19. Значение регистра BX устанавливается равным 4 с помощью команды MOV BX, 4.
  20. Значение регистра BX заменяется на значение регистра AX с помощью команды MOV BX, AX.
  21. Значение регистра AX извлекается из стека с помощью команды POP AX.
  22. Значение регистра AX добавляется к значению регистра BX с помощью команды ADD AX, BX.
  23. Код завершается с помощью команды LOOP L. Переменная x инициализируется значением 0 в секции данных с помощью команды .WORD 0.

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


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

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

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