2数据寻址2偏移寻址_第1页
2数据寻址2偏移寻址_第2页
2数据寻址2偏移寻址_第3页
2数据寻址2偏移寻址_第4页
2数据寻址2偏移寻址_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本节内容数据寻址2(偏移寻址)研/CSKAOYAN指令寻址

v.s.

数据寻址寻址方式指令寻址下一条

欲执行

指令

指令地址始终由程序计顺序寻址数器PC给出跳跃寻址数据寻址

确定

本条指令

地址码指明的真实地址以某个地址作为起点形式地址视为“偏移量”0起始100PC10011011011021022103103310410441051055106106671071071081088LDA

1000LDA

1000LDA

1000ADD

1001ADD

1001ADD

1001DEC

1200DEC

1200DEC

1200JMP

3JMP

7JMP

7LDA

2000LDA

2000LDA

2000SUB

2001SUB

2001SUB

2001INCINCINCLDA

1100LDA

1100LDA

1100………研/CSKAOYAN知识总览一地址指令操作码(OP)求出操作数的真实地址,称为有效地址(EA)。都属于“偏移寻址”0000寻址方式位000100100011100101001寻址特征

形式地址(A)0101研/CSKAOYAN偏移寻址EA=(BR)+A

区别在于偏移的“起点”不一样EA=(IX)+AEA=(PC)+A基址寻址:以程序的起始存放地址作为“起点”变址寻址:程序员自己决定从哪里作为“起点”相对寻址:以程序计数器PC所指地址作为“起点”研/CSKAOYAN基址寻址注:BR——baseaddressregisterEA——effectiveaddress基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。在指令中指明,要将哪个通用寄存器作为基址寄存器使用专门的基址寄存器EA要用几个bitTips:可对比操作系统第三章第一节学习,OS课中的“重定位寄存器”就是“基址寄存器”指明寄存器?根据通用寄存器总数判断研/CSKAOYAN基址寻址的作用基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。低地址0程序从地址0形式地址A=5变量a开始存放8PC的实际存放地址为5高地址主存主存地址指令注释操作码地址码00000010000000101取数a至ACC10001000000000110乘b得ab,存于ACC中20000110000000111加c得ab+c

,存于ACC中30000100000001000将ab+c

,存于主存单元40001100000000000停机50000000000000010原始数据a=260000000000000011原始数据b=370000000000000001原始数据c=180000000000000000原始数据y=0研/CSKAOYAN拓展:程序运行前,CPU将BR的值修改为该程序的起始地址(存在操作系统PCB中)基址寻址的作用基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。BR优点:便于程序“浮动”,方便实现多道程序并发运行形式地址A=5低地址程序从地址采用基址寻址无需100开始存放PC100108修改指令中的地址码变量a的实际存放地址为105高地址主存对应十进制100研/CSKAOYAN0000000001100100主存地址指令注释操作码地址码00000010000000101取数a至ACC10001000000000110乘b得ab,存于ACC中20000110000000111加c得ab+c

,存于ACC中30000100000001000将ab+c

,存于主存单元40001100000000000停机50000000000000010原始数据a=260000000000000011原始数据b=370000000000000001原始数据c=180000000000000000原始数据y=0基址寻址基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。EA注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)。研/CSKAOYAN变址寻址注:IX—

indexregister变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=(IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器

。EAEA注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址)

。基址寻址中,BR保持不变作为基地址,A作为偏移量研/CSKAOYAN变址寻址的作用注:此处未添加“寻址特征”位,但实际上每条指令都会指明寻址方式。此处讲解仅用口头描述立即寻址主存指令注释地址操作码地址码0取数到ACC#0(立即数)立即数

0

à

ACC1ACC加法12(a[0]地址)(ACC)+a[0]

à

ACC2ACC加法13(a[1]地址)(ACC)+a[1]

à

ACCACC直接寻址…ACC加法14(ACC)+a[2]

à

ACC9…………10ACC加法21(ACC)+a[9]

à

ACC是时候召唤11从ACC存数22(ACC)à

sum变量12随便什么值a[0]“变址寻址”13随便什么值a[1]了!………21随便什么值a[9]22初始为0sum变量for(inti=0;i<10;i++){sum+=a[i];}0研/CSKAOYAN变址寻址的作用立即寻址主存指令注释留地址操作码地址码0取数到ACC#0立即数

0

à

ACC1取数到IX#0立即数

0

à

IX变址寻址2ACC加法7(数组始址)(ACC)+(7+(IX))à

ACC3IX加法#1(IX)+1à

IXACC立即寻址个4IX比较#10比较10-(IX)坑5条件跳转2若结果>0

则PC跳转到2直接寻址6从ACC存数17(ACC)à

sum变量IX7随便什么值a[0]8随便什么值a[1]在数组处理过程中,可设定A为数组的9随便什么值a[2]………首地址,不断改变变址寄存器IX的内容,便可很容数组中任一数据16随便什么值a[9]的地址,特别适合编制循环程序。17初始为0sum变量for(inti=0;i<10;i++){sum+=a[i];}0129100变址寻址变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=(IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器

。EA注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)。优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容数组中任一数据的地址,特别适合编制循环程序。研/CSKAOYAN基址寻址:EA=(BR)+A基址&变址复合寻址注:实际应用中往往需要多种寻址方式复合使用(可理解为复合函数)变址寻址:EA=(IX)+A先基址后变址寻址:EA=(IX)+(BR)+A主存指令注释地址操作码地址码低地址0取数到ACC#0立即数

0

à

ACC1取数到IX#0立即数

0

à

IX100基址、变址2ACC加法7(数组始址)(ACC)+(7+(IX))à

ACC3IX加法#1(IX)+1à

IX4IX比较#10比较10-(IX)寻址的复合5条件跳转2若结果>0

则PC跳转到21086从ACC存数17(ACC)à

sum变量7随便什么值a[0]8随便什么值a[1]………高地址主存16随便什么值a[9]BRIX17初始为0sum变量访问目标9随便什么值a[2]1002相对寻址相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示

。注:的小错误——“A是相对于当前指令地址的位移量”❌取出当前指令后,PC+”1”

指向下一条指令当前指令存放地址=1000若当前指令字长=2B,则PC+2若当前指令字长=4B,则PC+4因此取出当前指令后PC可能为

1002or1004研/CSKAOYAN相对寻址的作用for循环主体主存指令注释地址操作码地址码0取数到ACC#0立即数

0

à

ACC1取数到IX#0立即数

0

à

IX问题:随着代码越写越多,2ACC加法7(数组始址)(ACC)+(7+(IX))à

ACC3IX加法#1(IX)+1à

IX你想挪动for循环的位置4IX比较#10比较10-(IX)注:站在直接寻址5条件跳转2若结果>0

则PC跳转到2汇编语言6从ACC存数17(ACC)à

sum变量程序员的7随便什么值a[0]角度思考8随便什么值a[1]9随便什么值a[2]………16随便什么值a[9]17初始为0sum变量for(inti=0;i<10;i++){sum+=a[i];}相对寻址的作用主存操作码指令注释地址地址码0取数到ACC#0立即数

0

à

ACC1取数到IX#0立即数

0

à

IX问题:随着代码越写越多,2……其他代码你想挪动for循环的位置3……其他代码注:站在4……其他代码5……其他代码汇编语言其他代码………程序员的MACC加法7(数组始址)(ACC)+(7+(IX))à

ACC角度思考for循环主体M+1IX加法#1(IX)+1à

IXM+2IX比较#10比较10-(IX)采用直接寻址M+3条件跳转2若结果>0

则PC跳转到2会出现错误PCM+4……………for(inti=0;i<10;i++){sum+=a[i];}M+4研/CSKAOYAN拓展:ACC加法指令的地址码,相对寻址的作用可采用“分段”方式解决,即用相对寻址PCM+4……………注释程序段、数据段分开。主存指令地址操作码地址码0取数到ACC#0立即数

0

à

ACC1取数到IX#0立即数

0

à

IX问题:随着代码越写越多,2……其他代码你想挪动for循环的位置3……其他代码相对寻址:EA=(PC)+A,其中4……其他代码5……其他代码A是相对于PC所指地址的位移量,可正可负,补码表示………其他代码优点:这段代码在程序内浮动时不用更改跳转指令的地址码for循环主体MACC加法7(数组始址)(ACC)+(7+(IX))à

ACCM+1IX加法#1(IX)+1à

IXM+2IX比较#10比较10-(IX)M+3条件跳转-4(补码表示)若结果>0

则PC跳转到Mfor(inti=0;i<10;i++){sum+=a[i];}M+4研/CSKAOYAN相对寻址相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示

。优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序的浮动)。相对寻址广泛应用于转移指令。研/CSKAOYAN本节回顾寻址方式有效地址访

数(指令执行期间)隐含寻址程序指定0立即寻址A即是操作数0直接寻址EA=A1一次间接寻址EA=(A)2寄存器寻址EA=Ri0寄存器间接一次寻址EA=(Ri)1转移指令相对寻址EA=(PC)+A1多道程序基址寻址EA=(BR)+A1循环程序变址寻址数组问题EA=(IX)+A1偏移寻址注意:取出当前指令后,

PC会指向下一条指令,相对寻址是相对于下一条指令的偏移研/CSKAOYAN高级语言视角:硬件如何实现数的“比较”注:无条件转移指令

jmp2,就不会管PSW的各

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论