X86汇编入门资料.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
X86汇编入门资料

X86汇编快速入门 1 寄存器. 主要寄存器如下图所示: X86处理器中有8个32位的通用寄存器。由于历史的原因,EAX通常用于计算,ECX通常用于循环变量 计数。ESP和EBP有专门用途,ESP指示栈指针(用于指示栈顶位置),而EBP则是基址指针(用于指 示子程序或函数调用的基址指针)。如图中所示,EAX、EBX、ECX和EDX的前两个高位字节和后两个 低位字节可以独立使用,其中两位低字节又被独立分为H和L部分,这样做的原因主要是考虑兼容16 位的程序,具体兼容匹配细节请查阅相关文献。 应用寄存器时,其名称大小写是不敏感的,如EAX和eax没有区别。 2 内存和寻址模式 2.1 声明静态数据区 用汇编指令.DATA声明静态数据区(类似于全局变量),数据可以单字节、双字节、或双字(4字节) 的方式存放,分别用DB,DW,DD指令表示声明内存的长度。在汇编语言中,相邻定义的标签在内存中 是连续存放的。 .DATA var DB 64 ;声明一个字节,并将数值64放入此字节中. var2 DB ? ;声明一个为初始化的字节. DB 10 ;声明一个没有label的字节,其值为10. X DW ? ;声明一个双字节,未初始化. Y DD 30000 ;声明一个4字节,其值为30000. 还可以声明连续的数据和数组,声明数组时使用DUP关键字 Z DD 1, 2, 3 ;定义3个DWORD,初始值为1,2,3. bytes DB 10 DUP(?) ;定义10个未初始化的BYTE空间. arr DD 100 DUP(0) ;定义100个DWORD,初始化为0. str DB hello,0 ;定义一个以0结尾的字符串. 2.2 寻址模式 现代X86处理器具有4GB的寻址空间。在上面的例子中,我们用标签(label)表示内存区域,这些标签 在实际汇编时,均被32位的实际地址代替。X86还可以利用最多两个32位的寄存器和一个32位的有符 号常数相加计算一个内存地址,其中一个寄存器可以左移1、2或3位以表述更大的空间。 下面例子是汇编程序中常见的方式 mov eax, [ebx] ;将ebx值指示的内存地址中的4个字节传送到eax中 mov [var], ebx ;将ebx的内容传送到var的值指示的内存地址中. mov eax, [esi-4] ;将esi-4值指示的内存地址中的4个字节传送到eax中 mov [esi+eax], cl ;将cl的值传送到esi+eax的值指示的内存地址中 mov edx, [esi+4*ebx] ;将esi+4*ebx值指示的内存中的4个字节传送到edx 下面是违反规则的例子: mov eax, [ebx-ecx] ;只能用加法 mov [eax+esi+edi], ebx ;最多只能有两个寄存器参与运算 2.3 长度规定 在声明内存大小时,在汇编语言中,一般用DB,DW,DD均可声明的内存空间大小,这种现实声明能 够很好地指导汇编器分配内存空间,但是,对于 mov [ebx], 2 如果没有特殊的标识,则不确定常数2是单字节、双字节,还是双字。对于这种情况,X86提供了三个 指示规则标记,分别为BYTE PTR, WORD PTR, and DWORD PTR,如上面例子写成: mov BYTE PTR [ebx], 2 mov WORD PTR [ebx], 2 mov DWORD PTR [ebx], 2 则意思非常清晰。 3 汇编指令 汇编指令通常可以分为数据传送指令、逻辑计算指令和控制流指令。本节将讲述其中最重要的指令, 以下标记分别表示寄存器、内存和常数。 reg32 32位寄存器 (EAX, EBX, ECX, EDX, ESI, EDI, ESP, or EBP) reg16 16位寄存器 (AX, BX, CX, or DX) reg8 8位寄存器(AH, BH, CH, DH, AL, BL, CL, or DL) reg 任何寄存器 mem 内存地址 (e.g., [eax], [var + 4], or dword ptr [eax+ebx]) con32 32为常数 con16 16位常数 con8 8位常数 con 任何8位、16位或32位常数 3.1 数据传送指令 mov — Move (Opcodes: 88, 89, 8A,

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档