11第三章Intel处理器指令系统及语言_1概论.ppt

11第三章Intel处理器指令系统及语言_1概论.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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? 3. (带位移量的)基址变址寻址 地址可以使用任意两个通用寄存器的组合 mov edi,[ebx+esi] mov edi,[ebx][esi] ; 基址变址寻址,功能:EDI=DS:[EBX+ESI] mov eax,[ebx+edx+80h] mov eax,80h[ebx+edx] mov eax,80h[ebx][edx] ;相对基址变址寻址 功能:EAX=DS:[EBX+EDX+80H] 带位移量的基址比例因子变址 寄存器乘以2,4或8 比例1、2、4和8对应8、16、32和64位数据的字节个数,便于以数组元素为单位寻址相应数据 mov eax,[ebx*4] ; 带比例的基址寻址 mov eax,[esi*2+80h] ; 带比例的相对变址寻址 mov eax,[ebx+esi*4] ; 带比例的基址变址寻址 mov eax,[ebx+esi*8-80h] ; 带比例的相对基址变址寻址 ESP寄存器不能乘以比例系数 INCLUDE Irvine32.inc .data count dword,9abcdef0h,0,0,3721h .code start: mov ebx,offset count ; EBX=count变量的有效地址(立即数寻址) mov esi,0 mov ecx,lengthof count K1: mov eax,[ebx+esi*4] inc esi loop k1 mov esi,0 mov ecx,lengthof count K2: mov eax,count[esi*4] inc esi loop k2 exit end start (五)JMP和LOOP指令 控制转移或分支是一种改变程序执行顺序的方法。 控制转移可分为两种: 无条件转移:以JMP指令为例 条件转移:以LOOP指令为例 (五)JMP和LOOP指令 1. JMP指令 例:创建一个循环 top: . . . jmp top ; 死循环 (五)JMP和LOOP指令 2. LOOP指令 格式: LOOP 目的地址/标号 执行过程: 在实地址模式下, 用做默认循环计数器的是CX而不是ECX。 在任何模式下,LOOPD指令都使用ECX作为循环计数器;LOOPW都使用CX作为循环计数器。 (五)JMP和LOOP指令 2. LOOP指令 例: mov ax,0 mov ecx,5 L1: inc ax loop L1 循环结束时,AX=? ECX=? (五)JMP和LOOP指令 2. LOOP指令 循环的目的地址与当前地址只能在相距-128到+127字节的范围之内。机器指令平均3字节左右,因此一个循环平均最多只能包含大约42条指令。 循环的嵌套 (五)JMP和LOOP指令 3. 例子:整数数组求和 数组元素的求和 (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 until ECX = 0 INVOKE ExitProcess,0 main ENDP END main (五)JMP和LOOP指令 4. 例子:拷贝字符串 TITLE Copying a String

文档评论(0)

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

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

1亿VIP精品文档

相关文档