第3章_指令系统及汇 3.2.5变址寻址 基址寄存器加变址寄存器间接寻址,简称变址寻址。 它以数据指针DPTR或程序计数器PC作为基址寄存器, 累加器A作为变址寄存器,两者的内容相加形成16位程 序存储器地址,该地址就是操作数所在地址 例如: MOVC A,@A+DPTR;(A)←(A)+(DPTR) 该指令寻址及操作功能如图3-2所示,该指令为单 字节指令,机器代码为93H。这种寻址方式常用于访问 程序存储器中的常数表
第3章 指令系统及汇编 3.2.5 变址寻址 基址寄存器加变址寄存器间接寻址, 简称变址寻址。 它以数据指针DPTR或程序计数器PC作为基址寄存器, 累加器A作为变址寄存器, 两者的内容相加形成16位程 序存储器地址, 该地址就是操作数所在地址。 例如: MOVC A, @A+DPTR ; (A)←((A)+(DPTR)) 该指令寻址及操作功能如图3―2所示, 该指令为单 字节指令, 机器代码为93H。 这种寻址方式常用于访问 程序存储器中的常数表
第3章_指令系统及汇 ROMEPROM DPTR 1234H +12D8H 3FH A(执行前)匚A4H A(执行后)3F 图3-2变址寻址示意图
第3章 指令系统及汇编 图3―2 变址寻址示意图
第3章_指令系统及汇 3.26相对寻址 相对寻址是以当前程序计数器PC值加上指令规定的 偏移量rel,而构成实际操作数地址的寻址方法。它用于 访问程序存储器,常出现在相对转移指令中 在使用相对寻址时要注意以下两点 第一,当前PC值是指相对转移指令所在地址(一般 称为源地址)加上转移指令字节数。即:当前PC值=源 地址+转移指令字节数 例如: JZ rel是一条累加器A为零就转移的双字节指 令。若该指令地址(源地址)为2050H,则执行该指令 时的当前PC值即为2052H
第3章 指令系统及汇编 3.2.6 相对寻址 相对寻址是以当前程序计数器PC值加上指令规定的 偏移量rel , 而构成实际操作数地址的寻址方法。 它用于 访问程序存储器, 常出现在相对转移指令中。 在使用相对寻址时要注意以下两点: 第一, 当前PC值是指相对转移指令所在地址(一般 称为源地址)加上转移指令字节数。 即: 当前PC值 = 源 地址 + 转移指令字节数。 例如: JZ rel 是一条累加器A为零就转移的双字节指 令。 若该指令地址(源地址)为2050H, 则执行该指令 时的当前PC值即为2052H
第3章_指令系统及汇编 第二,偏移量rel是有符号的单字节数,以补码表示, 其相对值的范围是-128~+127(即00H~FFH),负数 表示从当前地址向上转移,正数表示从当前地址向下转 移。所以,相对转移指令满足条件后,转移的地址( 般称为目的地址)应为:目的地址=当前PC值+rel 源地址+转移指令字节数+rel例如:指令JZ08H和JZ 0F4H表示累加器A为零条件满足后,从源地址(2050H) 分别向下、向上转移10个单元。其相对寻址示意如图 3—-3(a)、(b)所示。这两条指令均为双字节指令, 机器代码分别为:60H08H和6OHF4H
第3章 指令系统及汇编 第二, 偏移量rel是有符号的单字节数, 以补码表示, 其相对值的范围是-128~+127(即00H~FFH), 负数 表示从当前地址向上转移, 正数表示从当前地址向下转 移。 所以, 相对转移指令满足条件后, 转移的地址(一 般称为目的地址)应为: 目的地址 = 当前PC值 + rel = 源地址 + 转移指令字节数 + rel例如: 指令JZ 08H和JZ 0F4H 表示累加器A为零条件满足后, 从源地址(2050H) 分别向下、 向上转移10个单元。 其相对寻址示意如图 3―3 (a)、 (b) 所示。 这两条指令均为双字节指令, 机器代码分别为: 60H 08H和60H F4H
第3章_指令系统及汇 PC值 ROMEPROM ROMEPROM PC值 2046H 2050H 60H 2051H 08H 转移 =205AH 2052H ● 当前PC值 2050H 60H 2051H F4H 205AH 转移 +=2046H 2052H 当前PC值 图3-3相对寻址示意图 (a)指令JZ08H寻址示意图;(b)指令JF4H寻址示意图
第3章 指令系统及汇编 图3―3 相对寻址示意图 (a)指令JZ 08H寻址示意图; (b)指令JZ F4H寻址示意图