首页
社区
课程
招聘
[求助]char型的左右移问题
发表于: 2009-3-18 17:59 5222

[求助]char型的左右移问题

2009-3-18 17:59
5222
今天遇到一些代码
mov     al, byte_1EC26E[eax]
shl     al, 3
shr     al, 7
movzx   eax, al
mov     [ebp+var_20], eax
这段代码是将一个char型的变量左右移后交给整型var_20
我写了一个小程序测试一下
程序是
main()
{
        char a;
        char b;
        int c;
        c=(a<<3)>>7;
}
反汇编是
mov     al, [ebp+var_8]
shl     eax, 3
sar     eax, 7
mov     [ebp+var_C], eax
请问如何才能在左右移的时候使用al移而不是用eax移,所用编译器是watcom

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
char c;

试试看
2009-3-18 19:16
0
雪    币: 39
活跃值: (2956)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不可以让它对AL移,因为根据C语言的规范,char类型必须先提升到int类型才接下去对它
进行操作。
2009-3-18 21:24
0
雪    币: 1946
活跃值: (263)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
BYTE a;
DWORD b;
b = a >> 4;
2009-3-19 02:29
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
5
不论怎样,编译器还是会用SHL EAX,3 这样的结果,可以加个强制转换。
char b = ((char)(a<<3))>>7;
2009-3-19 09:03
0
雪    币: 268
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
a = a << 3;
a = a >> 7;
c = a;

跟编译器有关系
2009-3-19 09:48
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好像初学者版块有一个帖讲得挺清楚的,最后生成sar还是shr主要看被移位的变量是signed还是unsigned。
2009-3-19 11:20
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
多谢大家回答,现在问题的关键是右移不管是signed还是unsigned都用sar,解决了这个问题也就能解决al的问题了
2009-3-19 14:10
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
2009-3-19 17:33
0
游客
登录 | 注册 方可回帖
返回
//