Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SECTION .data ; /* contains initialized data */
- SECTION .bss ; /* contains uninitialized data */
- SECTION .text ; /* contains code
- GLOBAL _start ;
- _start: ; void main(void){
- nop ; /* do not remove the "nop" */
- push DWORD 11 ; return(funA(11));
- call funA ; }
- ; return 0;
- end:mov ebx, eax ; /* the exit system call
- mov eax, 1 ; no errorcode
- int 80h ; execute system call */
- ; }
- funA: ; int funA(int a) { /* a in [ebp+8] */
- push ebp ; /* Retten und Neueinstellen ebp */
- mov ebp, esp ;
- mov eax, [ebp+8] ;
- push edx ; /* Register sicher */
- push ecx ;
- cmp eax, 0 ; if (a > 0...
- jle returnA ;
- mov edx, 0 ; /* Division vorbereiten */
- mov ecx, 2 ;
- idiv ecx ;
- cmp edx, 0 ; && a % 2 == 0){
- jne elseIfA ;
- mov eax, [ebp+8] ;
- mov ecx, 3 ;
- imul ecx ; return (a + funA(3*a+1));
- add eax, 1 ;
- push eax ;
- call funA ;
- add eax, [ebp+8] ; /* Ergebnis im eax */
- pop ecx ; /* Register rueckstellen */
- pop edx ;
- pop ebp ; /* Basiszeiger rueckstellen */
- ret 4 ; /* Parameter freigeben */
- elseIfA: ; } else if (a > 0) {
- mov eax, [ebp+8] ; /* Bedingung bereits ueberprueft */
- shr eax, 1 ; return (a + funB(a / 2));
- push eax ; }
- call funB ;
- add eax, [ebp+8] ;
- pop ecx ; /* Register rueckstellen */
- pop edx ;
- pop ebp ; /* Basiszeiger rueckstellen */
- ret 4 ; /* Parameter freigeben */
- returnA: ; return (a);
- mov eax, [ebp+8] ;
- pop ecx ; /* Register rueckstellen */
- pop edx ;
- pop ebp ; /* Basiszeiger rueckstellen */
- ret 4 ; /* Parameter freigeben */
- funB: ; int funB(int a) { /* a in [ebp+8] */
- push ebp ; /* Retten und Neueinstellen ebp */
- mov ebp, esp ;
- mov eax, [ebp+8] ;
- push edx ; /* Register sicher */
- push ecx ;
- cmp eax, 0 ; if (a > 0...
- jle returnB ;
- mov edx, 0 ; /* Division vorbereiten */
- mov ecx, 2 ;
- idiv ecx ;
- cmp edx, 0 ; && a % 2 != 0){
- je elseIfB ;
- mov eax, [ebp+8] ;
- mov ecx, 3 ;
- imul ecx ; return (a + funB(3*a+1));
- add eax, 1 ;
- push eax ;
- call funB ;
- add eax, [ebp+8] ; /* Ergebnis im eax */
- pop ecx ; /* Register rueckstellen */
- pop edx ;
- pop ebp ; /* Basiszeiger rueckstellen */
- ret 4 ; /* Parameter freigeben */
- elseIfB: ; } else if (a > 0) {
- mov eax, [ebp+8] ; /* Bedingung bereits ueberprueft */
- shr eax, 1 ; return (a + funA(a / 2));
- push eax ; }
- call funA ;
- add eax, [ebp+8] ;
- pop ecx ; /* Register rueckstellen */
- pop edx ;
- pop ebp ; /* Basiszeiger rueckstellen */
- ret 4 ; /* Parameter freigeben */
- returnB: ; return (a);
- mov eax, [ebp+8] ;
- pop ecx ; /* Register rueckstellen */
- pop edx ;
- pop ebp ; /* Basiszeiger rueckstellen */
- ret 4 ; /* Parameter freigeben */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement