汇编 十六进制

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

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


    }

 

转载于:https://www.cnblogs.com/whzym111/p/6364037.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值