知识点: ?十六进制 ?字节,字,双字 ?汇编中的内存单元长度修饰 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、自动加上修饰前缀规律 int pb=3; mov [eax],ebx mov edx,[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 BYTE c=3; WORD w=4; DWORD dw=5; __asm { add c,0x87654321 // mov [ebp-??],0x21 add w,0x87654321 add dw,0x87654321 /* 自动添加的长度修饰符 00401071 |. 8045 EF 21 ADD BYTE PTR SS:[EBP-11],21 ; c=21 00401075 |. 66:8145 FC 21>ADD WORD PTR SS:[EBP-4],4321 ; w=4321 0040107B |. 8145 F0 21436>ADD DWORD PTR SS:[EBP-10],87654321 ; dw=87654321 */ }
时间: 2024-10-20 02:16:05