31、参数高级用法与 Java 字节码详解

参数高级用法与 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 位:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值