我保留了由我的汇编例程修改的字节。
我使用pusha
/* 完成了我的工作 */ 然后popa
导致分段错误。
如果我用/* 替换pusha
and做我的工作 */它工作正常。popa
push eax
push ecx
pop ecx
pop eax
但是为什么我会得到这个段错误?它与 有什么关系pusha
?
下面是我的代码的一部分。在这里,我只使用了八个寄存器中的两个。如果我需要在例程中使用 8,我是否需要推送和弹出每个寄存器?有没有办法pusha
只popa
保留buf?
main:
pusha
mov eax,10
.AGAIN:
cmp eax,0
je .END
mov [buf + ecx],'.'
inc ecx
dec eax
jmp .AGAIN
.END:
mov [buf + ecx],0
mov ebp,buf
call puts
popa
ret
不要给出段错误:
main:
push eax
push ecx
mov eax,10
.AGAIN:
cmp eax,0
je .END
mov [buf + ecx],'#'
inc ecx
dec eax
jmp .AGAIN
.END:
mov [buf + ecx],0
mov ebp,buf
call puts
pop ecx
pop eax
ret
buf定义为:
段可读可写
buf rb 12