首页
社区
课程
招聘
[求助]汇编编写pusha指令,实际编译成pushaw,请问pushaw跟pusha有什么关系和区别?
发表于: 2019-4-3 10:32 5068

[求助]汇编编写pusha指令,实际编译成pushaw,请问pushaw跟pusha有什么关系和区别?

2019-4-3 10:32
5068
采用VS2017 X86,手写汇编其代码如下,编译成EXE之后pusha指令变成pushaw指令,其中pusha指令opcode为0x60,pushaw的opcode为0x66 0x60,请问这两个指令之间有什么区别?
void main_impl()
{

}

__declspec(naked) void main_function()
{
	_asm
	{
		pusha;
		pushf;
		call main_impl;
		popf;
		popa;
		push 0x123456;
		retn;
	}
}



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
https://c9x.me/x86/html/file_module_x86_id_270.html
google/baidu is your friend
2019-4-3 10:37
0
雪    币: 1411
活跃值: (737)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
hzqst https://c9x.me/x86/html/file_module_x86_id_270.html google/baidu is your friend
这篇我搜到了,没看到pushaw部分
2019-4-3 10:45
0
雪    币: 1411
活跃值: (737)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
看来是pushaw应该是pusha word,不知道编译器为什么会在x86 32位模式下,采用pushaw指令
2019-4-3 10:57
0
雪    币: 2359
活跃值: (528)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
可以用pushad
2019-4-3 11:04
0
雪    币: 1411
活跃值: (737)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
老刘NoOne 可以用pushad
直接使用pushad指令是可以的,pusha就变成pushaw
2019-4-3 11:06
0
雪    币: 68
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
0x66是指令前缀。
2019-4-3 16:34
1
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
8
你需要手册。
原因是,虽然OpCode是一样的,但是不同的【助记符】的对ML来讲,含义是不一样的。
你用了pusha,ML会以为你要push word寄存器,然而32位默认的 OperandSize 是32位,所以会给你加上OperandSize切换前缀。

2019-4-10 12:06
0
游客
登录 | 注册 方可回帖
返回
//