Разработать программу, вычисляющую заданное выражение. Просмотреть в отладчике. - Assembler
Формулировка задачи:
Разработать программу, вычисляющую заданное выражение. Просмотреть в отладчике и зафиксировать в отчете ход выполнения вычислений (покомандно). Убедиться в правильности программы.
не могу разобраться с делением вот здесь:
вот что нужно получить:
; Template for console appliaction .586 .MODEL flat, stdcall OPTION CASEMAP:NONE Include kernel32.inc Include masm32.inc IncludeLib kernel32.lib IncludeLib masm32.lib .CONST MsgExit DB 13,10,"Press Enter to Exit",0AH,0DH,0 .DATA d SWORD ? fd SWORD 0 ; старшее слово результата Zapros DB 13,10,'Input k',13,10,0 Result DB 'Result=' ResStr DB 16 DUP (' '),0 .DATA? k SWORD ? fk SWORD ? ; старшее слово переменной А Buffer DB 10 DUP (?) inbuf DB 100 DUP (?) .CODE Start: Invoke StdOut,ADDR Zapros Invoke StdIn,ADDR Buffer,LengthOf Buffer Invoke StripLF,ADDR Buffer ; Преобразование в SDWORD Invoke atol,ADDR Buffer ;результат в EAX mov DWORD PTR k,EAX ; Вычисления mov CX,k imul CX,2; CX:=2*k mov BX,k sub BX,5; BX:=k-5 mov AX,BX imul AX,BX; AX = (k-5)(k-5) mov DX,AX idiv DX,4; DX = (k-5)(k-5)/4 add DX,CX; ; Преобразование Invoke dwtoa,d,ADDR ResStr ; Вывод Invoke StdOut,ADDR Result XOR EAX,EAX Invoke StdOut,ADDR MsgExit Invoke StdIn,ADDR inbuf,LengthOf inbuf Invoke ExitProcess,0 End Start
mov CX,k imul CX,2; CX:=2*k mov BX,k sub BX,5; BX:=k-5 mov AX,BX imul AX,BX; AX = (k-5)(k-5) mov DX,AX idiv DX,4; DX = (k-5)(k-5)/4 add DX,CX;
Решение задачи: «Разработать программу, вычисляющую заданное выражение. Просмотреть в отладчике.»
textual
Листинг программы
movsx eax,k mov ebx,eax shl ebx,1 ; ebx = 2k sub eax,5 ; eax = k-5 imul eax ; eax = (k-5)^2 sar eax,2 ; eax = [(k-5)^2]/4 add eax,ebx ; eax = [(k-5)^2]/4+2k mov d,eax
Объяснение кода листинга программы
- movsx eax,k — загрузка переменной k в регистр eax с использованием операции расширения (sx)
- mov ebx,eax — копирование содержимого регистра eax в регистр ebx
- shl ebx,1 - сдвиг содержимого регистра ebx вправо на 1 позицию (на 1 в двоичной системе равно удвоению)
- sub eax,5 - вычитание из содержимого регистра eax числа 5
- imul eax — умножение содержимого регистра eax на самого себя
- sar eax,2 - сдвиг содержимого регистра eax вправо на 2 позиции (на 2 в двоичной системе равно делению на 4)
- add eax,ebx — сложение содержимого регистра eax и ebx
- mov d,eax — копирование содержимого регистра eax в переменную d
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д