l 十六进制
l 字节,字,双字
l 汇编中的内存单元长度修饰
add [ebx],0x111 //00401048 |. 8003 11 ADD BYTE PTR DS:[EBX],11 ; i=i+11
一、十六进制
十六进制同我们日常中的十进制表示法不一样。它由0-9,A-F,组成。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;
十进制元素(0,1,2,3,4,5,6,7,8,9)
十六进制元素(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
9+1=10; //十进制 A
F+1=10; //十六进制
99+1=100;//十进制 0x64
FF+1=100;//十六进制 1*16*16=256 //0xBDA=11*16*16+13*16+10
十六进制一般会加上前缀0x 汇编中也可以加上h后缀
//想一想 十六进制中
0x0F+2=0x11 0xF9+1=0xFA 0x10+1=0x11 0x18+8=0x20 8+9=0x11
二、字节,字,双字
字节 (1字节):BYTE类型 ( unsigned char) 0-255 表示成16进制0--0xFF
字 (2字节):WORD类型 (unsigned short) 0-65535, 表示成16进制0--0xFFFF
双字 (4字节):DWORD类型(unsigned long) 0-4294967295 表示成16进制0--0xFFFFFFFF
三、汇编中的内存单元长度修饰
1、自动加上修饰前缀规律
intpb=3;
mov[eax],ebx
movedx,[ecx]
mov ebx,pb
BYTE c=3;
WORD w=4;
DWORD dw=5;
mov c,0x87654321
mov w,0x87654321
mov dw,0x87654321
2、必须手动添加内存单元长度修饰的情况
//前边是存储器,后边是常量的情况,需要手动添加长度修饰
add [ebx],0x111 //特殊...因为编译器不知道具体长度,会默认为字节长度
mov byte ptr [ebx],0x87654321
mov word ptr [ebx],0x87654321
mov dword ptr [ebx],0x87654321
BYTEc=3;
WORDw=4;
DWORDdw=5;
__asm
{
add c,0x87654321 // mov[ebp-??],0x21
add w,0x87654321
add dw,0x87654321
/*自动添加的长度修饰符
00401071 |. 8045 EF 21 ADD BYTE PTRSS:[EBP-11],21 ; c=21
00401075 |. 66:8145 FC 21>ADD WORD PTRSS:[EBP-4],4321 ; w=4321
0040107B |. 8145 F0 21436>ADD DWORD PTR SS:[EBP-10],87654321 ; dw=87654321
*/
}