看流星社区

 找回密码
 注册账号
查看: 3227|回复: 2

[Delphi] 求助!Asm里面PUSH的参数大于Integer类型的最大值,怎么办?

[复制链接]

该用户从未签到

发表于 2011-4-4 09:52:40 | 显示全部楼层 |阅读模式
某个CALL,例如:

Var
    tmpI:Integer;
    call1:Pointer;
begin
    tmpI:=$B4448C20;
    call1:=Pointer($ffffffff);
    Asm
        pushad
        push tmpi
        call call1
        popad
    end;
end;

需要PUSH的参数 tmpI 比如是 $B4448C20,那么这样的情况数值下大于Integer最大值,怎么办?
如果 tmpI 不用Integer而用Int64来定义的话,在ASM里就会报错,[Error] U_Call.pas(556): Invalid combination of opcode and operands 即:操作码与操作对象的无效组合....

求助!谢谢!

该用户从未签到

发表于 2011-4-4 09:53:01 | 显示全部楼层
啊,Integer类型的数值范围不是-2147483648 .. 2147483647吗?$B4448C20=3024391200,不是已经超出了Integer的范围了吗。况且这个参数还不一定小于$B4448C20...

该用户从未签到

发表于 2011-4-4 09:53:22 | 显示全部楼层
int 类型是 有符号的   你用无符号就可以了 例如 4楼说的 DWORD
所谓的符号就是有没负数
int 里的 FFFFFFFF 代表10进制   -1      因为他是有符号的整形
在DWORD   FFFFFFFF 就代表10进制  4294967295
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-19 11:33

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表