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)。
查看更多
10 第三章 Intel处理器指令系统和汇编语言_1

OFFSET 操作符 PTR 操作符 TYPE 操作符 LENGTHOF 操作符 SIZEOF 操作符;返回数据标号的偏移地址(标号距数据段开始的距离,以字节为单位)。 保护模式下偏移总是32位的。 实模式下偏移只有16位。;例:假设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 ……;用来说明操作数的尺寸/类型 必须和以下标准数据类型联合使用: BYTE,SBYTE,WORD,SWORD,DWORD,SDWORD,FWORD,QWORD,TBYTE;(三)和数据相关的操作符和伪指令 2. PTR操作符;返回按字节计算的变量的单个元素的大小。 例: .data var1 BYTE ? var2 WORD ? var3 DWORD ? var4 QWORD ?;计算数组中元素的个数。 例:;SIZEOF返回值=LENGTHOF返回值×TYPE返回值 例:;用寄存器作为地址,通过改变寄存器的值来访问内存单元 可以是任何用方括号括起来的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. 间接操作数(寄存器间接寻址);汇编语言中如何寻址数组元素? 完全使用直接寻址 —— 不切实际 解决办法: 用寄存器作为指针,通过改变指针寄存器的值来访问数组中的不同元素,存放地址的寄存器称为间接操作数。;例:三个双字相加 .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];例: .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指令为例;例:创建一个循环 top: . . . jmp top ; 死循环;格式: LOOP 目的地址/标号 执行过程: 在实地址模式下, 用做默认循环计数器的是CX而不是ECX。 在任何模式下,LOOPD指令都使用ECX作为循环计数器;LOOPW都使用CX作为循环计数器。;例: mov ax,0 mov ecx,5 L1: inc ax loop L1 循环结束时,AX=? ECX=?;循环的目的地址与当前地址只能在相距-128到+127字节的范围之内。机器指令平均3字节左右,因此一个循环平均最多只能包含大约42条指令。 循环的嵌套;数组元素的求和 (SumArray.asm) ; This program sums an array of words. INCLUDE Irvine32.inc .data intarray WORD 100h,200h,300h,400h .code main PROC mov edi,OFFSET intarray ; address of intarray mov ecx,LENGTHOF intarray ; loop counter mov ax,0 ; zero the accumulator L1: add ax,[edi] ; add an integer add edi,TYPE intarray ; point to next integer loop L1 ; repeat unti

文档评论(0)

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

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

1亿VIP精品文档

相关文档