不确定长度编码
0x88 mov eb,gb
0x89 mov ev,gv
0x8a mov gb,eb
0x8b mov gv,ev
最短是2个字节,GB代表通用单字节寄存器(al到bh)
gv代表通用双/四字节寄存器
eb/ev代表内存地址或寄存器
8800
0000 0000
00(mod) 000(opcode/reg) 000(r/m)
00 (00 01 11 10)
000(硬编码或寄存器:8个寄存器 000~111)
000(r/m 寄存器或内存单元)
0X88
00 000 000 0x00 MOV BYTE PTR DS:[EAX],AL
00 000 001 0x01 MOV BYTE PTR DS:[ECX],AL
00 000 010 0x02 MOV BYTE PTR DS:[EDX],AL
00 000 011 0x03 MOV BYTE PTR DS:[EBX],AL
-------没按要求给出 下
00 000 100 0x04 MOV BYTE PTR DS:[ESP],AL
00 000 101 0x05 MOV BYTE PTR DS:[EBP],AL
100
101 这两个数要做特殊处理
--------没按要求给出 上
00 000 110 0x06 MOV BYTE PTR DS:[ESI],AL
00 000 111 0x07 MOV BYTE PTR DS:[EDI],AL
00 001 000 0x08 MOV BYTE PTR DS:[EAX],CL
00 010 000 0x10 MOV BYTE PTR DS:[EAX],DL
例题:
0x88 0x23
23= 0010 0011
00 100 011
mov byte ptr ds:[EBX],AH
0 000 al
1 001 cl
2 010 dl
3 011 bl
4 100 ah
5 101 ch
6 110 dh
7 111 bh
01 100 011 0x63 MOV BYTE PTR DS:[EBX+3C],AH 加一个字节
10 100 011 0xa3 MOV BYTE PTR DS:[EBX+12345678],AH 加四个字节
11 100 011 0xe3 MOV bl,AH 两个寄存器