Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern printf ; the C function to be called
- SECTION .data ; Data section
- msg: db "Result: %d",10,0
- a : dd 4
- b : dd 2
- d : dd 1
- SECTION .text ; Code section.
- global main ; "C" main program
- main: ; label, program entrypoint
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; r = (b - (d / b) + (a / 4)) / (a * b - 1) = (2 - 1/2 + 4/4) / (4*2-1) = 3/7 = 0 :|
- mov edx, 0 ; при делении edx должен быть пустой! div делит не просто eax на аргумент, а длинное (64 бита) число,
- ; находящееся в паре регистров eax:edx на аргумент
- ; числитель
- mov ecx, 0
- add ecx, [b]
- mov eax, [d]
- mov ebx, [b]
- div ebx ; d/b
- sub ecx, eax
- mov eax, [a]
- mov ebx, 4
- mov edx, 0
- div ebx ; a/4
- add ecx, eax
- mov esi, ecx
- ; знаменатель
- mov ecx, 0
- mov eax, [a]
- mov ebx, [b]
- mul ebx ; a*b
- add ecx, eax
- sub ecx, 1
- ; результат
- mov eax, esi
- div ecx
- ;;;;;;;;
- ; ВЫВОД
- push dword eax
- push dword msg ; format string
- call printf ; call printf
- add esp, 8 ; clean stack 2*4 bytes
- mov eax, 0 ; exitcode
- ret ; okay
Add Comment
Please, Sign In to add comment