Guest User

Untitled

a guest
Jul 15th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extern printf                   ; the C function to be called
  2. SECTION .data                   ; Data section
  3.     msg:    db "Result: %d",10,0
  4.     a  :    dd 4
  5.     b  :    dd 2
  6.     d  :    dd 1
  7.  
  8. SECTION .text                   ; Code section.
  9.     global main                 ; "C" main program
  10. main:                           ; label, program entrypoint
  11.  
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. ; r = (b - (d / b) + (a / 4)) / (a * b - 1) = (2 - 1/2 + 4/4) / (4*2-1) = 3/7 = 0 :|
  14.  
  15.     mov edx, 0 ; при делении edx должен быть пустой! div делит не просто eax на аргумент, а длинное (64 бита) число,
  16.     ; находящееся в паре регистров eax:edx на аргумент
  17.  
  18.     ; числитель
  19.     mov ecx, 0
  20.     add ecx, [b]
  21.  
  22.     mov eax, [d]
  23.     mov ebx, [b]
  24.     div ebx ; d/b
  25.     sub ecx, eax
  26.  
  27.     mov eax, [a]
  28.     mov ebx, 4
  29.     mov edx, 0
  30.     div ebx ; a/4
  31.     add ecx, eax
  32.     mov esi, ecx
  33.  
  34.     ; знаменатель
  35.     mov ecx, 0
  36.     mov eax, [a]
  37.     mov ebx, [b]
  38.     mul ebx ; a*b
  39.     add ecx, eax
  40.     sub ecx, 1
  41.  
  42.     ; результат
  43.     mov eax, esi
  44.     div ecx
  45.  
  46. ;;;;;;;;
  47. ; ВЫВОД
  48.     push dword eax
  49.     push dword msg              ; format string
  50.     call printf                 ; call printf
  51.     add esp, 8                  ; clean stack 2*4 bytes
  52.     mov eax, 0                  ; exitcode
  53.     ret                         ; okay
Add Comment
Please, Sign In to add comment