161 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
extern printfd
 | 
						|
extern puts
 | 
						|
global ack
 | 
						|
ack:
 | 
						|
push ebp
 | 
						|
push edi
 | 
						|
push esi
 | 
						|
push ebx
 | 
						|
mov ebp, esp
 | 
						|
mov ebx, [ebp + 20]
 | 
						|
cmp ebx, 0
 | 
						|
sete bl
 | 
						|
test bl, bl
 | 
						|
jz .le0
 | 
						|
mov ebx, [ebp + 24]
 | 
						|
add ebx, 1
 | 
						|
mov eax, ebx
 | 
						|
mov esp, ebp
 | 
						|
pop ebx
 | 
						|
pop esi
 | 
						|
pop edi
 | 
						|
pop ebp
 | 
						|
ret
 | 
						|
jmp .lE0
 | 
						|
.le0:
 | 
						|
mov ebx, [ebp + 24]
 | 
						|
cmp ebx, 0
 | 
						|
sete bl
 | 
						|
test bl, bl
 | 
						|
jz .l0e0
 | 
						|
mov ebx, [ebp + 20]
 | 
						|
sub ebx, 1
 | 
						|
push 1
 | 
						|
push ebx
 | 
						|
call ack
 | 
						|
add esp, 8
 | 
						|
mov esp, ebp
 | 
						|
pop ebx
 | 
						|
pop esi
 | 
						|
pop edi
 | 
						|
pop ebp
 | 
						|
ret
 | 
						|
jmp .lE0
 | 
						|
.l0e0:
 | 
						|
mov ebx, [ebp + 20]
 | 
						|
sub ebx, 1
 | 
						|
mov eax, [ebp + 24]
 | 
						|
sub eax, 1
 | 
						|
push eax
 | 
						|
push dword [ebp + 20]
 | 
						|
call ack
 | 
						|
add esp, 8
 | 
						|
push eax
 | 
						|
push ebx
 | 
						|
call ack
 | 
						|
add esp, 8
 | 
						|
mov esp, ebp
 | 
						|
pop ebx
 | 
						|
pop esi
 | 
						|
pop edi
 | 
						|
pop ebp
 | 
						|
ret
 | 
						|
.lE0:
 | 
						|
mov esp, ebp
 | 
						|
pop ebx
 | 
						|
pop esi
 | 
						|
pop edi
 | 
						|
pop ebp
 | 
						|
ret
 | 
						|
global foo
 | 
						|
foo:
 | 
						|
push ebp
 | 
						|
push edi
 | 
						|
push esi
 | 
						|
push ebx
 | 
						|
mov ebp, esp
 | 
						|
mov ebx, dword [ebp + 20]
 | 
						|
mov eax, dword [ebp + 20]
 | 
						|
mov eax, [eax]
 | 
						|
add eax, 1
 | 
						|
mov dword [ebx], eax
 | 
						|
mov esp, ebp
 | 
						|
pop ebx
 | 
						|
pop esi
 | 
						|
pop edi
 | 
						|
pop ebp
 | 
						|
ret
 | 
						|
global main
 | 
						|
main:
 | 
						|
push ebp
 | 
						|
push edi
 | 
						|
push esi
 | 
						|
push ebx
 | 
						|
mov ebp, esp
 | 
						|
sub esp, 12
 | 
						|
mov dword [ebp - 4], 0
 | 
						|
.l0:
 | 
						|
mov ebx, [ebp - 4]
 | 
						|
cmp ebx, 4
 | 
						|
sete bl
 | 
						|
test bl, bl
 | 
						|
jnz .le0
 | 
						|
mov dword [ebp - 8], 0
 | 
						|
.l1:
 | 
						|
mov ebx, [ebp - 8]
 | 
						|
cmp ebx, 4
 | 
						|
sete bl
 | 
						|
test bl, bl
 | 
						|
jnz .le1
 | 
						|
push dword [ebp - 8]
 | 
						|
push dword [ebp - 4]
 | 
						|
call ack
 | 
						|
add esp, 8
 | 
						|
push eax
 | 
						|
call printfd
 | 
						|
add esp, 4
 | 
						|
lea ebx, dword [ebp - 8]
 | 
						|
push ebx
 | 
						|
call foo
 | 
						|
add esp, 4
 | 
						|
jmp .l1
 | 
						|
.le1:
 | 
						|
mov ebx, [ebp - 4]
 | 
						|
add ebx, 1
 | 
						|
mov dword [ebp - 4], ebx
 | 
						|
jmp .l0
 | 
						|
.le0:
 | 
						|
mov ebx, [ebp + 20]
 | 
						|
mov dword [ebp - 8], ebx
 | 
						|
mov ebx, [ebp + 24]
 | 
						|
mov dword [ebp - 12], ebx
 | 
						|
.l2:
 | 
						|
mov ebx, [ebp - 8]
 | 
						|
cmp ebx, 0
 | 
						|
sete bl
 | 
						|
mov eax, dword [ebp - 12]
 | 
						|
mov eax, [eax]
 | 
						|
cmp eax, 0
 | 
						|
sete al
 | 
						|
or bl, al
 | 
						|
test bl, bl
 | 
						|
jnz .le2
 | 
						|
mov ebx, dword [ebp - 12]
 | 
						|
push dword [ebx]
 | 
						|
call puts
 | 
						|
add esp, 4
 | 
						|
mov ebx, [ebp - 8]
 | 
						|
sub ebx, 1
 | 
						|
mov dword [ebp - 8], ebx
 | 
						|
mov ebx, [ebp - 12]
 | 
						|
add ebx, 4
 | 
						|
mov dword [ebp - 12], ebx
 | 
						|
jmp .l2
 | 
						|
.le2:
 | 
						|
mov esp, ebp
 | 
						|
pop ebx
 | 
						|
pop esi
 | 
						|
pop edi
 | 
						|
pop ebp
 | 
						|
ret
 |