汇编语言 - 跳过推送指令

时间:2015-03-19 22:51:18

标签: assembly stack push masm

我正在处理一个程序集项目,出于某种原因,当我进入调试器并查看正在执行的调用语句时,它正在跳过第一个push语句。

使用call语句:

push offset strPrompt
push offset strNum
push offset iArray1
call inputArray
add esp, 12
mov iNumOfEntries, eax

电话声明:

inputArray      proc
mov al, al
push ebp
mov ebp, esp
push ebx
push ecx
entryLoop1:
mov ebx, 0
mov ecx, 0
invoke putstring, [ebp+16]
invoke getstring, [ebp+12], 10
invoke ascint32, [ebp+12]
jc entryLoop1

cmp eax, -1
je endMethod

mov [[ebp+8][ecx]], eax
add ecx, 4
inc ebx
jmp entryLoop1
endMethod:
mov eax, 0
mov eax, ebx
pop ecx
pop ebx
pop ebp
ret
inputArray endp

1 个答案:

答案 0 :(得分:0)

inputArray      proc
mov al, al
push ebp
mov ebp, esp

当您使用PROC指令时,汇编程序会自动生成序言/结尾代码。你不应该自己写。这很好地解释了您没想到的调试器输出。

  

汇编程序在遇到PROC指令后的第一条指令或标签时会自动生成序言代码   汇编程序在遇到RET或IRET指令时会生成结尾代码。