Last active
January 1, 2016 22:29
-
-
Save lucansky/8210218 to your computer and use it in GitHub Desktop.
Cvicenie 4 asembler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;************************************************************** | |
; | |
; Program HelloWorld - IAS | |
; FIT VUT v Brne | |
; | |
;************************************************************** | |
; Preklad programu lze provest nasledovne: | |
; nasm -fobj helloworld.asm | |
; alink -oPE -subsys console helloworld.obj | |
; nebo pomoci davky run.bat: | |
; run.bat hello | |
;************************************************************** | |
%include 'rw32.inc' ; nacteni knihovny rw32.inc | |
[segment .data use32] ; definice zacatku datoveho segmentu | |
; testovaci retezec | |
sMessage db "Cvicenie 4",10,13,0 | |
[segment .code use32] ; definice zacatku kodoveho segementu | |
Func_Stack: | |
push ebp | |
mov ebp, esp | |
; vyhradenie lokalnych | |
sub esp, 8 | |
pushf | |
pushad ; vsetky registre do zasobniku | |
mov eax, [ebp+8] ; 1. nacitanie z parametru A | |
shl eax, 1 ; 2. nasobenie priamo v registri | |
mov [ebp-4], eax ; 3. ulozenie hodnoty registra do prvej lokalnej premennej | |
mov eax, [ebp+12] ; 1. nacitannie z parametru B | |
shl eax, 1 ; 2. nasobenie v registri | |
mov [ebp-8], eax ; 3. ulozenie EAX do druhej lokalnej premennej | |
popad | |
mov eax, [ebp-4] ; nacitanie lokalnej X | |
sub eax, [ebp-8] ; odcitanie Y | |
popf | |
mov esp, ebp ; vyhodenie lokalnych premennych | |
pop ebp ; (eip) tam kde ukazuje predtym | |
ret 8 ; ESP bude ukazovat na prvotnu hodnotu | |
Soucet: | |
push ebp | |
mov ebp, esp | |
; vyhradenie lokalnych | |
sub esp,4 | |
pushad ; vsetky registre do zasobniku | |
; | |
mov eax, [ebp+8] | |
add eax, [ebp+12] | |
mov [ebp-4], eax | |
popad | |
mov eax, [ebp-4] | |
; vyhodenie lokalnych premennych | |
mov esp, ebp | |
pop ebp ; (eip) tam kde ukazuje predtym | |
ret 8 ; ESP bude ukazovat na prvotnu hodnotu | |
prologue ; makro -- inicializace programu | |
; | |
;mov esi,sMessage | |
;call WriteString | |
push dword 40 ; b | |
push dword 80 ; a | |
; 80*2 - 40*2 = 160 - 80 = 80 | |
; 5*2 - 10*2 = 10-20 = 10 | |
call Func_Stack | |
call WriteUInt32 | |
epilogue ; makro -- ukonceni programu |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment