[NASM] Найти значение выражения - Assembler
Формулировка задачи:
Найти значение выражения:
Решение задачи: «[NASM] Найти значение выражения»
textual
Листинг программы
Global _main Extern _printf Extern _scanf Section .data F_pf: db “result: %d”, 10, 0 ; формат вывода Welcome: db “enter your number: “, 0 ; приглашение F_sf: db “%d”, 0 ; формат ввода b: dd 0 ; переменная для хранения числа Section .text _main: Push b Push f_sf Call _scanf Add esp, 8 Finit Mov eax, [b] Add eax, 2 Mov [b], eax Fild dword [b] Fsqrt Fist dword [b] Mov eax, 1 Mov ebx, [b] Mov edx, 0 Div ebx Push edx Push sc Call _printf Add esp, 8 Mov eax, 0 Push f_pf ret
Объяснение кода листинга программы
- Объявлены три строки:
F_pf
,Welcome
иF_sf
. - В строке
F_pf
указан формат вывода с использованием символа%d
- выводит целое число. - В строке
Welcome
указано приглашение для ввода числа. - В строке
F_sf
указан формат ввода с использованием символа%d
- вводит целое число. - Объявлена переменная
b
, которая будет использоваться для хранения введенного числа. - В разделе
.text
объявлена функция_main
, которая является точкой входа в программу. - В функции
_main
на стек помещаются два указателя: на строку формата и на переменнуюb
. - Выполняется функция
_scanf
, которая считывает введенные данные в соответствии с указанным форматом. - Из стека удаляются два указателя, которые были помещены туда на предыдущем шаге.
- Переменная
b
инициализируется значением 0. - В разделе
.text
объявлена функцияFinit
, которая завершает выполнение программы. - В функции
_main
на стек помещается указатель на переменнуюb
. - Переменная
b
увеличивается на 2. - В разделе
.data
объявлена переменнаяb
, которая используется для хранения числа. - В функцию
_printf
передаются три аргумента:1
,b
и0
. - Из стека удаляются три указателя, которые были помещены туда на 13-м шаге.
- Переменная
b
вычисляется как квадратный корень от значения переменнойb
. - В разделе
.data
объявлена переменнаяb
, которая используется для хранения числа. - Переменная
b
вычисляется как целочисленное деление1
на значение переменнойb
. - В функцию
_printf
передаются три аргумента:1
,b
и0
.