汇编 十六进制

知识点:
十六进制
字节,字,双字
汇编中的内存单元长度修饰

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
            */


    }

 

posted @ 2017-02-04 09:47  whzym111  阅读(1334)  评论(0编辑  收藏  举报