首页
社区
课程
招聘
小弟写算法遇到困难,基础不扎实,郁闷,求助
发表于: 2006-4-7 01:54 4129

小弟写算法遇到困难,基础不扎实,郁闷,求助

2006-4-7 01:54
4129
比如

eax  指向的数据 01 02 03 04 05 06.........

mov cl,byte ptr ds:[eax]    // ecx 00000001
mov dl,byte ptr ds:[eax+1]  // edx 00000002
add eax, 2
mov dh,byte ptr ds:[eax]    // edx 00000302

我不明白为什么 cl,dl取出的值都只有一位
dh取出的值是两位呢?

这些寄存器可以将低16位单独存取,也就是8086的AX,BX,CX,DX,SI,DI,SP,BP,在存取这些寄存器的低16位(AX,BX,CX,DX,SI,DI,SP,BP),它
    们的高16位不受影响,同时和8086一样对于AX,BX,CX,DX这四个寄存器来讲,可以单独存取它们的高8位和低8位(AH,AL,BH,BL,CH,CL,DH,DL)

不是很明白,那位高人讲一下把,如果要写成C语言上面的汇编怎么写呢?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
最初由 Dion_love 发布
如果要写成C语言,上面的汇编怎么写呢?


C里面加个BYTE前缀就行,如:
code=((BYTE)name[i];
2006-4-7 08:40
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
3
mov dh,byte ptr ds:[eax] 执行完毕后,edx应该是0302吧,除非应该是mov dx,word ptr ds:[eax]
2006-4-7 08:47
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵 nbw
mov dh,byte ptr ds:[eax]    // edx 00000302汗一个
应该是
mov dh,byte ptr ds:[eax]    // edx 00000300
2006-4-7 15:13
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
又遇见一个郁闷的,则么样才能简单有效的描述下面这个汇编指令

mov al,bh

已经申请了 DWORD eax, ebx;

怎么样简单有效的把ebx的高位给eax的低位呢?
2006-4-7 16:04
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
shr ebx, 16  ;右移16位,bx等于ebx高16位
mov ax, bx  ;移过去
2006-4-7 16:11
0
雪    币: 222
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
还是内嵌汇编简单呀
2006-4-7 19:18
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
内嵌汇编最简单,也容易实现

写成一句太麻烦,我分开写。。

eax &= 0xFFFFFF00;  // eax低8位置0

eax += (( ebx && 0xFF00) >> 8);   ( ebx的bh高位保留,其他置0, 然后通过移位来跟eax相加)

或者也可以这样:
*( char*( &eax))     // 强制转换来得到eax的低位
=                     // 这里直接赋值
*( char*( &ebx) + 1);  // 将&ebx转换为char*,然后移动到下一个位置
2006-4-7 23:07
0
游客
登录 | 注册 方可回帖
返回
//