相对寻址. PC(Program Counter)
以程序计数器pc所指的地址作为起点
当前指令存放地址位1000
若当前指令字长=2B,则PC+2
若当前指令字长=4B,则PC+4
相对寻址:EA=(PC)+A,其中A是相对PC所指的位移量,可正可负,补码表示
优点:这段代码在程序内浮动时不用更改跳转指令的地址码
基址寻址. BR (Base Address Register)
以程序的起始存放地址作为起点
将cpu中基址寄存器(BR)内容加上指令格式中地址形式A
而形成的有效地址EA=(BR)+A
程序员是不能操作br的值的,因为程序员不知道应用程序放在内存的什么位置
当用户决定哪个寄存器作为基址寄存器后,其内容不可由程序员擅自修改,而是由操作系统决定
优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)用户不必考虑自己的程序位于主存的那一个空间区域,故有利于多道程序设计,以及可用于编制浮动程序。
变址寻址. IX(Index Register)
程序员自己决定从哪里作为起点
除了EA=(IX)+A之外,和基址寻址一模一样
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可以由用户改变

在数组处理过程中,可设定A为数字的首地址,不断改变编制寄存器的IX内容,便可很容易形成数组中任意数据的地址,特别适合编制循环程序。
优点:在数据处理过程中,可设定A位数组的首地址,不断改变编制寄存器IX的内容,便可很容易形成数组中任意数据的地址,特别适合编制循环程序
硬件是如何将两个数进行比较的
硬件视角:通过cmp指令 比较a和b,实际上是用a-b
相减的结果会记录在程序状态字寄存器中(PSW) 标志寄存器
PSW有几个比特位记录上次的运算结果,
进位/借位标志CF,最高位有进位/错位时CF=1
零标志ZF,运算结果为0时,ZF=1
符号标志SF,运算结果为负,SF=1
溢出标志OF,运算结果有溢出,OF=1
堆栈寻址. SP(Stack Pointer)
操作数存放在堆栈中,隐含使用sp作为操作数地址,sp指向栈顶元素
将数据弹出栈的时候使用:POP ACC
寻址方式 | 有效地址 | 访存次数(执行指令期间) |
---|---|---|
隐含寻址 | 程序指定 | 0 |
立即寻址 | A即使操作数 | 0 |
直接寻址 | EA=A | 1 |
一次间接寻址 | EA=(A) | 2 |
寄存器寻址 | EA=R_i | 0 |
寄存器间接一次寻址 | EA=(R_i) | 1 |
相对寻址 | EA=(PC)+A | 1 |
基变寻址 | EA=(BR)+A | 1 |
变址寻址 | EA=(IX)+A | 1 |
堆栈寻址 | 入栈出栈时EA的确定方式不同 | 硬堆栈不访存,软堆栈访存一次 |