首页
社区
课程
招聘
[旧帖] [求助]PUSH 指令6A与68。 0.00雪花
发表于: 2010-10-16 10:47 7052

[旧帖] [求助]PUSH 指令6A与68。 0.00雪花

2010-10-16 10:47
7052
今天在学win32汇编的push指令时,发现有时指令占2字节,有时占5字节。
对照源码与机器码发现,有时操作数被翻译成1字节,有时操作数被翻译成4字节。为什么会这样?
  
地址|             机器码|            汇编源码
00401047      6A 30               push    30
00401049      68 30010000   push    130
0040104E      68 FF000000   push    0FF
00401053      68 FE000000   push    0FE
00401058      68 9F000000   push    9F
0040105D      68 99000000   push    99
00401062      6A 10         push    10
00401064      6A 50         push    50
00401066      6A 60         push    60
00401068      6A 70         push    70
0040106A      68 80000000   push    80
0040106F      6A 79         push    79
00401071      6A 7B         push    7B
00401073      6A 7F         push    7F
00401075      68 80000000   push    80
0040107A      6A FF         push    -1
0040107C      6A 81         push    -7F
0040107E      6A 80         push    -80
00401080      68 77FFFFFF   push    -89
00401085      68 7FFFFFFF   push    -81

从上面对照可以看出一些端倪吧。
我的猜想:
1) 为了精简机器码字节数,所以将大小在一个字节的操作数单独提供一个指令 6A。这一个字节的最高位是符号位。那么实际上能表示的数范围是(-128,+127)。

2)对于超过上面提到的一个字节范围的数,则操作数被按符号位扩展成32位的操作数。

3)当执行如下指令时,-1会被按符号位扩展成32位数放入栈中。
0040107A      6A FF         push    -1
执行后,栈顶是:FFFFFFFF。

以上经验证后,似乎正确。不过还请大牛们帮忙确认一下。是不是我猜想的那样?

另外,我有个疑问:
为什么不再搞个操作数是一个字的16位的操作数呢?(在32位机下)

才学习汇编,请大家多指教。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
由于历史原因,16位机器码和32位机器码是同一个代码,所以定义在32位系统下,操作数默认为32位,以免和16位操作码混淆,一定要在32位系统下用16位操作数,可以使用操作数16位和32位转换的前缀.
2010-10-16 10:58
0
雪    币: 208
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢回复。

能说详细点吗?

我想知道,在32位下,是否存在这样子的机器码:

push 255  ------> xx FF00     这样就只要3个字节,指令一个字节+操作数两个字节。

这样的话,操作数是两个字节,能表示-32768 -- 32767。

比转成 68 FF000000 要少占两个字节机器码。

楼上说的前缀指的是什么呢?
2010-10-16 11:14
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
intel tell me

6A PUSH imm8 Push imm8
68 PUSH imm16 Push imm16
68 PUSH imm32 Push imm32
2010-10-16 12:31
0
雪    币: 208
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上能写出机器码吗?
2010-10-17 01:14
0
游客
登录 | 注册 方可回帖
返回
//