- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【例5】将ARM汇编语言翻译成机器语言。已知5条ARM指令格式译码如下表所示。 设r3寄存器中保存数值A的基位,h放在寄存器r2中。C语言的语句:A[30]=h+A[30]。 可以编译成如下3条汇编语言指令: LDR r5,[r3,#120] ;r5=存储单元[r3+120] ADD r5,r2,r5 ;r5=r2+r5 STR r5,[r3,#120] ;存储单元[r3+120]=r5 LDR r5,[r3,#120] ;r5=存储单元[r3+120] ADD r5,r2,r5 ; r5=r2+r5 STR r5,[r3,#120] ;存储单元[r3+120]=r5 寻址方式:形成操作数或指令地址的方式。 寻址方式分为两类:指令寻址方式和数据寻址方式。 1、顺序寻址方式 : 指令的地址码由程序计数器给出,指令按顺序逐条执行。 指令的顺序寻址方式 2、跳跃寻址方式:指令的地址码不是由程序计数器给出,而是由本条指令给出。(可实现程序转移或循环) 指令的跳跃寻址方式 操作数的寻址方式:即形成操作数的有效地址的方法。 操作码(OP) 变址(X) 间址(I) 形式地址(A) 偏移量 寻址特征位 1.隐含寻址:在这种类型的指令中,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。 如某些运算,隐含了累加器AC作为源和目的寄存器 2.立即寻址:指令的地址段给出的不是操作数的地址,而是操作数本身。 如:MOV AX,1234H 如:MOV AX,[1234H] 3.直接寻址:在指令格式的地址段中直接给出操作数在内存的地址。(形式地址A就是操作数的有效地址EA) 间接寻址是相对直接寻址而言的,指令形式如下: 操作码 I A 4. 间接寻址:指令地址段中的形式地址A不是操作数的真正地址,而是操作数地址的指示器。 5.寄存器寻址方式和寄存器间接寻址方式寄存器寻址 — 在指令中指定寄存器号,操作数就放在寄存器中。例1:MOV AX,SI 如果寄存器SI中的操作数是6789H,则执行该指令后数据寄存器AX的值为6789H。寄存器间接寻址 — 指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。例2:MOV AX,[SI] 如果寄存器SI中指定的操作数的地址为存储单元1234H,而该存储单元存放的数为6789H,则执行该指令后AX的值为6789H。注意:例1和例2的区别。 7. 偏移寻址:直接寻址和寄存器间接寻址相结合的寻址方式。 偏移寻址有效地址的计算公式为: EA=A+(R) 常用的偏移寻址方式有:相对寻址、基址寻址、变址寻址。 相对寻址:由程序计数器PC提供基准地址,而指令的地址码部分给出相对的位移量A,两者相加后作为操作数的有效地址,即:EA=(PC)+A。 指令 操作数 偏移量A 指令地址 程序计数器 操作码 … 偏移量A 指令 + 有效地址EA 主存储器 基址寻址:将CPU中基址寄存器的内容与指令格式中的形式地址相加而形成操作数的有效地址。 变址寻址:把CPU中某个变址寄存器的内容与指令格式中的形式地址相加而形成操作数的有效地址 操作数 (变址寄存器 ) 操作码 … 偏移量A 指令 + 有效地址EA 主存储器 R b R x 基址寄存器 8.段寻址方式:在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加,形成所需的内存地址。 逻辑地址 段寄存器 0000 + 存储器物理地址 0 15 19 0 0 15 9. 堆栈寻址:堆栈有寄存器栈和存储器栈两种形式,它们都以先进后出的原理存储数据,数据存取与栈顶地址打交道,为此需要一个堆栈指示器(寄存器)指示栈顶位置。 表4.6 Pentium的寻址方式 图4.4 Pentium寻址方式的计算 【例】比例变址寻址方式 在比例变址寻址方式中操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由三部分组成。 这种寻址方式与相对寄存器寻址相比,增加了比例因子,其优点在于:对于元素大小为2,4,8字节的数组,可以在变址寄存器中给出数组元素下标,而由寻址方式控制直接用比例因子把下标转换为变址值。 如:数组COUNT的每个数组元素占4个字节,且COUNT[0]的起始地址为100B,要求将COUNT【2】的内容送入EAX中(EAX为32位的累加器)。 MOV??EAX,COUNT[2] 为找到
文档评论(0)