参数高级用法与 Java 字节码详解
1. 参数的高级使用
1.1 栈上传递 8 位和 16 位参数
在 32 位模式下将栈参数传递给过程时,最好推送 32 位操作数。虽然可以将 16 位操作数推送到栈上,但这样做会使 ESP 无法按双字边界对齐,可能会导致页面错误并降低运行时性能。因此,在将它们推送到栈上之前,应将其扩展为 32 位。
以下是一个 Uppercase 过程的示例,它接收一个字符参数并在 AL 中返回其大写等效字符:
Uppercase PROC
push ebp
mov ebp,esp
mov al,[esp+8] ; AL = character
cmp al,'a' ; less than 'a'?
jb L1 ; yes: do nothing
cmp al,'z' ; greater than 'z'?
ja L1 ; yes: do nothing
sub al,32 ; no: convert it
L1:
pop ebp
ret 4 ; clean up the stack
Uppercase ENDP
如果传递一个字符字面量给 Uppercase , PUSH 指令会自动将字符扩展为 32 位:
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



