10 第三章 Intel处理器指令系统与汇编语言_1.ppt

10 第三章 Intel处理器指令系统与汇编语言_1.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(三)和数据相关的操作符和伪指令 OFFSET 操作符 PTR 操作符 TYPE 操作符 LENGTHOF 操作符 SIZEOF 操作符 (三)和数据相关的操作符和伪指令 1. OFFSET操作符 返回数据标号的偏移地址(标号距数据段开始的距离,以字节为单位)。 保护模式下偏移总是32位的。 实模式下偏移只有16位。 (三)和数据相关的操作符和伪指令 1. OFFSET操作符 例:假设bVal位处。 .data bVal BYTE ? wVal WORD ? dVal1 DWORD ? dVal2 DWORD ? .code …… mov esi,OFFSET bVal ; ESI = mov esi,OFFSET wVal ; ESI = mov esi,OFFSET dVal1 ; ESI = mov esi,OFFSET dVal2 ; ESI = mov esi,OFFSET bVal + 1 …… (三)和数据相关的操作符和伪指令 2. PTR操作符 用来说明操作数的尺寸/类型 必须和以下标准数据类型联合使用: BYTE,SBYTE,WORD,SWORD,DWORD,SDWORD,FWORD,QWORD,TBYTE (三)和数据相关的操作符和伪指令 2. PTR操作符 (三)和数据相关的操作符和伪指令 3. TYPE操作符 返回按字节计算的变量的单个元素的大小。 例: .data var1 BYTE ? var2 WORD ? var3 DWORD ? var4 QWORD ? (三)和数据相关的操作符和伪指令 4. LENGTHOF操作符 计算数组中元素的个数。 例: (三)和数据相关的操作符和伪指令 5. SIZEOF操作符 SIZEOF返回值=LENGTHOF返回值×TYPE返回值 例: (四)间接寻址 1. 间接操作数(寄存器间接寻址) 用寄存器作为地址,通过改变寄存器的值来访问内存单元 可以是任何用方括号括起来的32位通用寄存器(EAX,EBX,ECX,EDX,ESI,EDI,EBP、ESP) .data val1 BYTE 10h .code mov esi,OFFSET val1 mov AL,[esi] mov [esi],BL 实地址模式下只能用SI,DI,BX,BP。通常尽量避免使用BP(BP常用来寻址堆栈而不是数据段)。 (四)间接寻址 1. 间接操作数(寄存器间接寻址) 注意声明操作数的类型 inc [esi] ; error: operand must have size inc BYTE PTR [esi] √ inc WORD PTR [esi] √ inc DWORD PTR [esi] √ (四)间接寻址 1. 间接操作数(寄存器间接寻址) 汇编语言中如何寻址数组元素? 完全使用直接寻址 —— 不切实际 解决办法: 用寄存器作为指针,通过改变指针寄存器的值来访问数组中的不同元素,存放地址的寄存器称为间接操作数。 (四)间接寻址 2. 数组 例:三个双字相加 .data arrayD DWORD 10000h,20000h,30000h .code mov esi,OFFSET arrayD mov eax,[esi] add esi,4 add eax,[esi] add esi,4 add eax,[esi] (四)间接寻址 3. 变址操作数(寄存器相对寻址) 例: .data arrayB BYTE 10h,20h,30h .code mov esi,0 mov al,[arrayB + esi] ; ? mov al,arrayB[esi] ; ? mov esi,OFFSET arrayB mov al,[esi] ; ? mov al,[esi+1] ; ? mov al,[esi+2] ; ? Array 定义为 word? (五)JMP和LOOP指令 控制转移或分支是一种改变程序执行顺序的方法。 控制转移可分为两种: 无条件转移:以JMP指令为例 条件转移:以LOOP指令为例 (五)JMP和LOOP指令 1. JMP指令 例:创建一个循环 top: . . . jmp top ; 死循环 (五)JMP和LOOP指令 2. LOOP指令 格式: LOOP 目的地址/标号 执行过程: 在实地址模式下, 用做默认循环计数器的是CX而不是ECX。 在任何模式下,LOOPD指令都使用ECX作为循环计数器;LOOPW都使用

文档评论(0)

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

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

1亿VIP精品文档

相关文档