Return 来自汇编子程序的值
Return value from a subroutine in assembly
我正在编写一个简单的程序,它调用一个子例程并期望返回一个值。到目前为止我有:
%include "asm_io.inc"
SECTION .data
SECTION .bss
SECTION .text
global asm_main
asm_main:
enter 0,0
pusha
mov ebx, dword [ebp+12]
mov eax, dword [ebx+4]
push eax
call maxLyn
push eax ; contains value 4
call print_int
popa
leave
ret
maxLyn:
enter 0,0
pusha
mov ebx, dword[ebp+12]
mov eax, [ebx+4]
add eax, dword 2
push eax
ret
因此,当我 运行 代码 lynarr abc 2
时,我希望显示值 4。但它没有显示任何结果。任何想法都会很有帮助!
由于您使用 "lynarr abc 2" 调用程序以获取指向第二个命令行参数的指针,因此您需要使用 mov ebx, dword [ebp+12]
mov eax, dword [ebx+8]
您对 maxLyn 的调用只有 1 个参数。它可以在 [EBP+8] 找到。你写了 [EBP+12]。
您不能在 return 之前使用推送。使用 leave
这里不要使用pusha
。只是 push/pop EBX。
为什么print_int当AL/EAX包含字符“4”时
maxLyn 变为:
enter 0,0
push ebx
mov ebx, dword [ebp+8]
movzx eax, byte [ebx] ;Character "2"
add eax, dword 2
pop ebx
leave
ret
我正在编写一个简单的程序,它调用一个子例程并期望返回一个值。到目前为止我有:
%include "asm_io.inc"
SECTION .data
SECTION .bss
SECTION .text
global asm_main
asm_main:
enter 0,0
pusha
mov ebx, dword [ebp+12]
mov eax, dword [ebx+4]
push eax
call maxLyn
push eax ; contains value 4
call print_int
popa
leave
ret
maxLyn:
enter 0,0
pusha
mov ebx, dword[ebp+12]
mov eax, [ebx+4]
add eax, dword 2
push eax
ret
因此,当我 运行 代码 lynarr abc 2
时,我希望显示值 4。但它没有显示任何结果。任何想法都会很有帮助!
由于您使用 "lynarr abc 2" 调用程序以获取指向第二个命令行参数的指针,因此您需要使用
mov ebx, dword [ebp+12]
mov eax, dword [ebx+8]
您对 maxLyn 的调用只有 1 个参数。它可以在 [EBP+8] 找到。你写了 [EBP+12]。
您不能在 return 之前使用推送。使用
leave
这里不要使用
pusha
。只是 push/pop EBX。为什么print_int当AL/EAX包含字符“4”时
maxLyn 变为:
enter 0,0
push ebx
mov ebx, dword [ebp+8]
movzx eax, byte [ebx] ;Character "2"
add eax, dword 2
pop ebx
leave
ret