程序计数器PC: 内容为下一条指令地址;位宽=主存地址总线位宽。
存储器地址寄存器AR:内容为CPU访问主存的单元地址,存放要存取数据的地址;位宽=主存地址总线位宽
存储器数据寄存器DR:内容为存入或将读出主存单元中的数据;用于CPU与主存之间的缓冲器,以减少CPU对主存的访问;位宽=机器字长
指令寄存器IR:内容为当前正在执行的指令,即存放从CPU中取出来的指令字;位宽=指令字
指令译码器ID:内容为指令信号,将IR中的指令字翻译成若干个信号
通用寄存器组GR:内容为地址、数据等,位宽=机器字长
操作控制器OC:将ID的译码信息与时序电路、条件、状态信息进行组合,形成有严格时间先后顺序的操作控制信号(微操作信号序列),并连接到计算机个功能部件的控制端,控制相应部件按指令功能依次执行,从而实现指令功能。
计算机程序执行详细步骤:
为什么寻址?
计算机在运行程序前,先将指令和数据(操作数)存放在主存的相应地址单元中。运行程序时,不断从主存取指令和数据,(主存是基于地址访问的存储器),只有获得指令和数据在主存中的地址(有效地址EA),CPU才能访问所需的指令和数据。
寻址目的
在主存中获取指令和数据(操作数)的有效地址。
寻址方式
寻找指令或操作数有效地址的方式
指令寻址方式(寻找指令的有效地址)
顺序寻址方式:程序中的机器指令顺序往往是按顺序存放,每执行一条指令,通过PC+1(“1“表示一条指令的字节长度,有些指令长度为4,因此+4,根据情况而定),获取下一条指令地址。以此类推获得所有指令地址。
跳跃寻址方式:如果程序出现分支或转移,就会改变程序执行的顺序,此时需要采用跳跃寻址方式。在程序执行过程中,遇到无条件转移或条件转移指令时,程序跳转至条件指令所指的地址单元去执行该地址单元内存放的指令。
操作数寻址方式(寻找操作数的有效地址)
OP:操作码;I:寻址方式;D:形式地址;S:操作数
操作数有效地址在指令译码分析或执行阶段完成
机器字长=寄存器位数
立即寻址
形式地址即操作数,S=D
操作数与指令一起存放,取指时操作数随指令一起送入CPU的指令寄存器中。
寻址范围:0~2^n-1
MOV EAX,2008H
为寄存器EAX赋初值2008H
直接寻址
形式地址即操作数地址,EA=D,S=(EA)
不用计算直接通过操作数地址找到操作数,并送入指令寄存器中
MOV EAX,[2008H]
将2008H主存单元的内容送入寄存器EAX中
寻址范围:0~2^n-1
间接寻址
形式地址即操作数的间接地址(存放操作数地址的地址)
EA=(D),S=(EA)
通过形式地址D在主存储器中找到操作数地址,再根据操作数地址在主存储器中找到操作数
MOV EAX,@2008H (@为间接寻址的标志)
先找到2008H主存单元中内容X,再找到主存单元X中的内容,即为操作数,再将操作数送入EAX寄存器中
寻址范围:0~2^n-1(n为机器字长)
寄存器直接寻址
形式地址即通用寄存器编号,操作数为该寄存器内存放的数
EA=D,S=R[D]
MOV EAX,EACX
将寄存器ECX中的内容(操作数)送入寄存器EAX
寻址范围:0~2^n-1
寄存器间接寻址
形式地址为寄存器(其中存放操作数地址)的编号,操作数存于主存的地址(寄存器内的地址)中
EA=R[D],S=(EA)
MOV AL,[EBX]
寄存器EBX中的内容X,将主存中X地址下的数据送入寄存器AL中
寻址范围:0~2^n-1
相对寻址
有效地址=PC中的地址+形式地址
EA=PC+D,S=(EA)
寻址范围:0~2^(m-1)+2^n-2
当D位数<机器字长时,将D带符号扩展为机器字长再和PC值相加
变址寻址
指定一个(变址)寄存器存放变化的地址
常用变址寄存器:BI、DI
有效地址=寄存器内容+形式地址D
EA=R[X]+D,S=(EA)
寻址范围:0~2^(m-1)+2^n-2
当D位数<机器字长时,将D带符号扩展为机器字长再和寄存器值相加
基址寻址
指定一个(变址)寄存器存放基地址,D存放变化的地址
常用基址寄存器:BX,BP
有效地址=寄存器内容+形式地址D
EA=R[B]+D,S=(EA)
寻址范围:0~2^(m-1)+2^n-2
当D位数<机器字长时,将D带符号扩展为机器字长再和寄存器值相加
堆栈寻址
入栈:SP=SP-1,M[SP]=R
出栈:R=M[SP],SP=SP+1
下面是一些相关例题,通过例题加深对理论知识的理解