汇编 十六进制

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

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

汇编 十六进制的相关文章

汇编基础:二进制和十六进制

理解二进制和十六进制的最佳方法是先透彻的领悟十进制计数系统.十进制(Decimal)系统是基于10的计数系统(词根Deci-表示10)."基于10"指的是由10个数位(Digit)0到9来表示数. 使用"位置(Place Value)",可以用不多的几个数位(如10个十进制数位)来表示很大的数.所有计数系统的位置从最右边开始,是基数的0次幂.从右往左,基数的幂依次增加1: X4X3X2X1X0 基数是10时,前5个位值是: 104103102101100 对任何基数

汇编复习(二)

ax,cx,dx不能和段地址搭配作偏移地址用于寻址,如mov mydat[bx][si],es:[ax] 错误偏移地址不能再用offset,如mov bx,offset mydat[si] 错误cmp dst,src 目的操作数不能是立即数,dst和src不能同为内存单元注意标号和变量的区别 mov lable[si] 错误jmp/jnz之类 不能加变量变量不能相加 mov ax,a1+a2 错误目的单元为内存单元时要注意是否用ptr 如 mov a1,a2-a3 错误,要显式声明word/by

0.1 汇编前需要准备的知识

一.进制问题 *)计算机内部存储都用二进制. *)我们的汇编源程序默认都用十进制.(除非你指明类型) *)我们用的调试程序debug默认的都是十六进制.(无法指明其他类型)

王爽汇编笔记

  第一章 内存地址空间的地址段分配 地址:0~7FFFH的32kb空间为主随机存储器的地址空间 地址:8000~9FFFH的8kb空间为显存地址空间 地址:A000~FFFFH的24kb空间为各个rom的地址空间   第二章 进入DOS模式 重新启动计算机,进入DOS模式,此时进入的是实模式的DOS 在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS   使用命令 -R 查看寄存器内容 -R 寄存器 可以修改寄存器的内容 -D查看内存中的内容 –D 段地址:偏移地址 输入后

一些汇编指令

AX Accumulator   用累加器进行的操作 输入输出 乘除 操作BX 基址寄存器 (Base Register) CX 计数寄存器 (Count Register)常用于 循环 计数器  在 位操作中 要用 CL来指明 位移的位数DX  数据寄存器(Data Register)  在 进行 双字节 运算时  也可以 存放 io 的端口地址MOV 数据传送指令 ADD 算数指令编程环境 Masm  调试 工具 DebugDebug  cpu 各种 寄存器 的 内容 内存的情况 在机器码中

[zhuan]arm中的汇编指令

http://blog.csdn.net/qqliyunpeng/article/details/45116615 一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是 “以下是代码段”, “以下是初始化数据段”, “以下是未初始化数据段”. 2.".global" 定义一个全局符号,通常是为ld使用.比如经常看到的 .global _start 3.".

《格蠹汇编》调试笔记

以前也就是把Windbg作为一个调试所写驱动的调试器.只进行源码级的调试,运用的比较浅显. 最近研读张银奎老师的<软件调试>获益良多,刚好与之配套的<格蠹汇编>提供了老师大量的调试经验以及实验环境.不拿来好好实践一番简直浪费. 0X01调试笔记之侦查广告插件 俗话说:工欲善其事,必先利其器.对于调试领域来说,更是如此.我们不但要在自己的计算机中安装有WinDbg,还应当使用JIT调试的方法.因为对于Windows系统中的应用程序的崩溃问题,JIT调试是非常有效的办法,而且JIT调试

汇编和反汇编的区别

在linux系统下编写如下代码: 通过指令:gcc -S main.c 将生成main.s文件即就汇编文件(在上篇博客我已提到过). 通过指令:gcc -c main.c 生成main.o(二进制文件) 再通过指令:objdump -d main.o生成反汇编 反汇编是基于机器代码的文件中的字节序列来确定汇编的代码. 左边为字节序列值,右边为反汇编代码. 通过上面的比较可以得出下面结论; 1.从代码上看汇编和反汇编的指令基本一样. 2.汇编操作的立即数是十进制,二反汇编操作的立即数是十六进制(即

linux平台学x86汇编(五):使用gdb调试汇编程序

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 正如C语言一样,编写所有语言程序一样会出现一些一些错误,发生错误时,我们可以使用调试器一步一步运行程序以监视数据是如何被处理的.本节使用GNU调试器检查上一节hello程序,监视处理过程中寄存器和内存的值的变化.要调试汇编语言程序,在编译时,需要使用-gstabs参数重新汇编源代码,使用了该参数编译出来的可执行文件要比之前稍大一些,因为添加了附加信息.上一节程序不使用-gst