首页
社区
课程
招聘
[求助]汇编中快速转换高低位的问题
发表于: 2013-8-23 12:05 6926

[求助]汇编中快速转换高低位的问题

bxc 活跃值
6
2013-8-23 12:05
6926
我弄的一个程序,要获取NtVersion的值
我是用汇编实现的,
call dword ptr [GetVersion]
mov NtVer,ax
但是我发现NtVer中的值,高低位不对(应该是0x0501,但取得是0x0105),无法直接与_WIN32_WINNT_WINXP比较,有没有什么比较快的方法,能迅速把ax的高低位转换一下

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

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 623
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
rol ax, 8  或者:  ror ax, 8
2013-8-23 12:13
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
xchg ah,al这个怎么样?
NtVer和ax的值都不正确吗,不应该会有这种可能啊
2013-8-23 12:30
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
mov ax,0x0105
ror ax,8
2013-8-23 12:37
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
5
已经搞定了,跟你的方法一样,谢谢了
2013-8-23 12:57
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
bswap ax
2013-8-23 15:17
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
bswap 指令更简单.
2013-8-23 15:46
0
雪    币: 623
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
说 bswap 指令的是错误,bswap 指令能只交换 32 位或者 64位的寄存器。

在 lz 的要求里,确实使用 xchg ah, al 是更好
2013-8-23 16:53
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
9
我来认错,楼上说的是对的。bsawp ax无法实现楼主的需求。只会把ax清零。只是奇怪为什么汇编里允许有这条指令。
2013-8-24 09:52
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
10
bswap这条指令是做什么的0.0

额,查了下百度
BSWAP是汇编指令
指令作用是:32位寄存器内的字节次序变反。
比如:(EAX)=9668 8368H,执行指令:
BSWAP EAX ,则(EAX)=6883 6896H。

为什么bswap ax
反而把ax置0了呢
2013-8-24 10:41
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
bswap是80486才出现的指令吧。
对于16位寄存器自然是无法寻址的,个人觉得是被CPU置0操作

不知道执行周期能不能取代xor ax,ax
2013-8-24 11:16
0
雪    币: 319
活跃值: (1106)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
xchg ah, al
2013-8-24 11:23
0
雪    币: 101
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
xchg ah,al 或者
bswap eax
shr eax,10h
2013-8-25 11:19
0
游客
登录 | 注册 方可回帖
返回
//