Легкая задачка и 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
Объяснение кода листинга программы
- Сначала мы определяем секцию текста с помощью команды .SECT TEXT.
- Затем мы устанавливаем значение регистра CX равным 3 с помощью команды MOV CX, 3.
- Далее мы добавляем 2 к значению переменной x с помощью команды ADD (x), 2.
- Затем мы устанавливаем значение регистра BX равным 4 с помощью команды MOV BX, 4.
- Мы перемещаем значение переменной x в регистр AX с помощью команды MOV AX, (x).
- Затем мы делим значение регистра AX на значение регистра BX с помощью команды DIV BX.
- Значение регистра AX заменяется на результат деления с помощью команды MOV AX, DX.
- Значение регистра AX сохраняется на стеке с помощью команды PUSH AX.
- Значение регистра AX снова перемещается в регистр AX с помощью команды MOV AX, (x).
- Значение переменной x умножается на значение регистра BX, которое равно 3, с помощью команды MUL BX.
- Значение регистра BX устанавливается равным -1 с помощью команды MOV BX, -1.
- Значение переменной x умножается на значение регистра BX с помощью команды MUL BX.
- Значение регистра BX заменяется на значение регистра AX с помощью команды MOV BX, AX.
- Значение регистра AX извлекается из стека с помощью команды POP AX.
- Значение регистра AX добавляется к значению регистра BX с помощью команды ADD AX, BX.
- Значение регистра AX сохраняется на стеке с помощью команды PUSH AX.
- Значение регистра AX снова перемещается в регистр AX с помощью команды MOV AX, (x).
- Значение переменной x умножается на значение регистра AX с помощью команды MUL AX.
- Значение регистра BX устанавливается равным 4 с помощью команды MOV BX, 4.
- Значение регистра BX заменяется на значение регистра AX с помощью команды MOV BX, AX.
- Значение регистра AX извлекается из стека с помощью команды POP AX.
- Значение регистра AX добавляется к значению регистра BX с помощью команды ADD AX, BX.
- Код завершается с помощью команды LOOP L. Переменная x инициализируется значением 0 в секции данных с помощью команды .WORD 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д