第三章 80C51单片微机的指令系统
第三章 80C51单片微机的指令系统
3180C51指令系统概述 80C51指令系统专用于80C51系列单片微机,是一个具有 255种操作码(00H至FFH,除A5H外)的集合。 用汇编语言表达操作代码时,只要熟记42种助记符。42种 助记符代表了33种功能,因为有的功能如数据传送,可以有几种 助记符,如MOv、MOVC、MOVX。而指令功能助记符与操作 数各种寻址方式的结合,共构造出11种指令,同一种指令所对 应的操作码可以多至8种(如指令中Rn对应寄存器R0-R7)
3.1 80C51指令系统概述 80C51指令系统专用于80C51系列单片微机,是一个具有 255种操作码 (00H至FFH,除A5H外) 的集合。 用汇编语言表达操作代码时,只要熟记42种助记符。42种 助记符代表了33种功能,因为有的功能如数据传送,可以有几种 助记符,如MOV、MOVC、MOVX。而指令功能助记符与操作 数各种寻址方式的结合,共构造出111种指令,同一种指令所对 应的操作码可以多至8种 (如指令中Rn对应寄存器R0-R7)
3.1.1寻址方式 寻址方式就是在指令中给出的寻找操作数或操作数所在地 址的方法。执行任何一条指令都需要使用操作数。 80C5指令系统中共有以下7种寻址方式。 1.立即寻址 在指令中直接给出操作数,出现在指令中的操作数称为立 即数。为了与直接寻址指令中的直接地址相区别,在立即数前面 必需加上前缀“#”。 例如:指令 MOV DPTR,#1234H 1234H是立即数,指令功能是把16位立即数1234H送入数 据指针DPTR中,如图3-1所示
寻址方式就是在指令中给出的寻找操作数或操作数所在地 址的方法。执行任何一条指令都需要使用操作数。 80C5l指令系统中共有以下7种寻址方式。 ⒈ 立即寻址 在指令中直接给出操作数,出现在指令中的操作数称为立 即数。为了与直接寻址指令中的直接地址相区别,在立即数前面 必需加上前缀“#”。 例如:指令MOV DPTR,#1234H 1234H是立即数,指令功能是把16位立即数1234H送入数 据指针DPTR中,如图3–1所示。 3.1.1 寻址方式
2.直接寻址 在指令中直接给出操作数单元的地址 例如:指令MOVA,3AH 其功能是把片内RAM中3AH单元内的数据传送给累加器A,如图 3-2所示。 直接寻址方式只能给出8位地址,因此,这种寻址方式的寻址范围 只限于片内RAM。 (1)低128单元,在指令中直接以单元地址形式给出 (2)特殊功能寄存器,这时除了可以单元地址形式给出外,还可 以寄存器符号形式给出。虽然特殊功能寄存器可以使用符号标志, 但在指令代码中还是按地址进行编码的。 应当说明的是,直接寻址是访问特殊功能寄存器的唯一方法
2.直接寻址 在指令中直接给出操作数单元的地址。 例如:指令MOV A,3AH 其功能是把片内RAM中3AH单元内的数据传送给累加器A,如图 3–2所示。 直接寻址方式只能给出8位地址,因此,这种寻址方式的寻址范围 只限于片内RAM。 ⑴ 低128单元,在指令中直接以单元地址形式给出。 ⑵ 特殊功能寄存器,这时除了可以单元地址形式给出外,还可 以寄存器符号形式给出。虽然特殊功能寄存器可以使用符号标志, 但在指令代码中还是按地址进行编码的。 应当说明的是,直接寻址是访问特殊功能寄存器的唯一方法
3.寄存器寻址 在指令中将指定寄存器的内容作为操作数。因此指定了寄 存器就能得到操作数。 寄存器寻址方式中,用符号名称来表示寄存器 例如:指令INCR0 其功能是把寄存器R0的内容加1,再送回R0中。由于操作 数在R0中,指定了R0,也就得到了操作数,如图33所示。 寄存器寻址方式的寻址范围包括: (1)四个寄存器组共32个通用寄存器。但在指令中只能使用当 前寄存器组。因此在使用前要通过指定PSW中的RS1、RS0,以 选择使用的当前寄存器组。 (2)部分特殊功能寄存器。例如累加器A、AB寄存器对以及 数据指针DPTR
3.寄存器寻址 在指令中将指定寄存器的内容作为操作数。因此指定了寄 存器就能得到操作数。 寄存器寻址方式中,用符号名称来表示寄存器。 例如:指令INC R0 其功能是把寄存器R0的内容加 1,再送回R0中。由于操作 数在R0中,指定了R0,也就得到了操作数,如图3–3所示。 寄存器寻址方式的寻址范围包括: (1)四个寄存器组共32个通用寄存器。但在指令中只能使用当 前寄存器组。因此在使用前要通过指定PSW中的RS1、RS0,以 选择使用的当前寄存器组。 (2)部分特殊功能寄存器。例如累加器A、AB寄存器对以及 数据指针DPTR
4.寄存器间接寻址 在指令中给出的寄存器内容是操作数的地址,从该地址中 取出的才是操作数。 寄存器间接寻址也需以寄存器符号名称的形式表示。为了 区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在 寄存器的名称前面加前缀@ 假定R1寄存器的内容是60H,则指令ANLA,R1的功能是 以R1寄存器的内容60H为地址,将60H地址单元的内容与累加器 A中的数相“与”,其结果仍存放在A中、其功能示意请参见图 3
4.寄存器间接寻址 在指令中给出的寄存器内容是操作数的地址,从该地址中 取出的才是操作数。 寄存器间接寻址也需以寄存器符号名称的形式表示。为了 区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在 寄存器的名称前面加前缀“@” 。 假定R1寄存器的内容是 60H,则指令ANL A,R1的功能是 以 R1寄存器的内容 60H为地址,将60H地址单元的内容与累加器 A中的数相“与” ,其结果仍存放在A中、其功能示意请参见图 3–4
寄存器间接寻址的寻址范围: (1)片内RAM的低128单元,只能采用R0或R为间址寄存器, 其形式为aRi(i=0,1)。 2)片外RAM的64KB单元,使用DPTR作为间址寄存器,其 形式为@DPTR,例如MoXA,@DPTR,其功能是把DPTR指 定的片外RAM单元的内容送累加器A (3)片外RAM低256单元,除了可使用DPTR作为间址寄存器外 也可使用R0或R1作间址寄存器。例如: MOVX A,@R0.即把 R0指定的片外RAM单元的内容送累加器A。 (4)堆栈区:堆栈操作指令(PUSH和POP)也应算作是寄存器 间接寻址,即以堆栈指针(SP)作间址寄存器的间接寻址方式
寄存器间接寻址的寻址范围: ⑴ 片内RAM的低128单元,只能采用R0或R1为间址寄存器, 其形式为@Ri(i=0,1)。 ⑵ 片外RAM 的64 KB单元,使用DPTR作为间址寄存器,其 形式为@DPTR,例如MOVX A,@DPTR,其功能是把DPTR指 定的片外RAM单元的内容送累加器A。 ⑶ 片外RAM低256单元,除了可使用DPTR作为间址寄存器外, 也可使用R0或R1作间址寄存器。例如:MOVX A,@R0.即把 R0指定的片外RAM单元的内容送累加器A。 ⑷ 堆栈区:堆栈操作指令(PUSH和POP)也应算作是寄存器 间接寻址,即以堆栈指针(SP)作间址寄存器的间接寻址方式
5相对寻址 在指令中给出的操作数为程序转移的偏移量。 在相对转移指令中,给出地址偏移量(在80C51的指令系统中, 以“reⅣ”表示),把PC的当前值加上偏移量就构成了程序转移的 目的地址。转移的目的地址可用如下公式表示: 目的地址=转移指令所在地址十转移指令字节数+rel 在8051的指令系统中,有许多条相对转移指令,这些指令 多数均为两字节指令.只有个别的是三字节的指令。偏移量rel是 个带符号的8位二进制补码数,所能表示的数的范围是 128~+127。因此以相对转移指令的所在地址为基点,向前最大 可转移(127十转移指令字节数)个单元地址,向后最大可转移 (128一转移指令字节数)个单元地址
⒌ 相对寻址 在指令中给出的操作数为程序转移的偏移量。 在相对转移指令中,给出地址偏移量(在80C51的指令系统中, 以“rel”表示),把PC的当前值加上偏移量就构成了程序转移的 目的地址。转移的目的地址可用如下公式表示: 目的地址=转移指令所在地址+转移指令字节数+rel 在8051的指令系统中,有许多条相对转移指令,这些指令 多数均为两字节指令.只有个别的是三字节的指令。偏移量rel是 一个带符号的8位二进制补码数,所能表示 的数的范围是一 128~+127。因此以相对转移指令的所在地址为基点,向前最大 可转移(127十转移指令字节数)个单元地址,向后最大可转移 (128一转移指令字节数)个单元地址
例如:指令JC80H 若进位位C为0,则程序计数器PC中的内容不变,即不转 移;若进位位C为1,则以程序计数器PC中当前值为基地址,加 上偏移量80H后所得结果作为该转移指令的目的地址,其执行示 意图如图35所示 指令的操作码存在1000H单元,偏移量存在1001H单元。 执行该指令后,程序计数器PC指向1002H(即当前值)。这里 80H即-128,故1002H与-128(80H)相加(补码运算)后得到转 移地址0F82H
例如:指令JC 80H 若进位位C为0,则程序计数器PC中的内容不变,即不转 移;若进位位C为1,则以程序计数器PC中当前值为基地址,加 上偏移量80H后所得结果作为该转移指令的目的地址,其执行示 意图如图3–5所示。 指令的操作码存在1000H单元,偏移量存在1001H单元。 执行该指令后,程序计数器PC 指向1002 H(即当前值)。这里 80H即–128,故1002H与–128(80H)相加(补码运算)后得到转 移地址 0F82H
6.变址寻址 以DPTR或PC为基址寄存器,累加器A做变址寄存器,以 两者内容相加,形成的16位程序存储器地址作为操作数地址。又 称基址寄存器+变址寄存器间接寻址。 例如:指令 MOVC A, @A+DPTR 其功能是把DPTR和A的内容相加所得到的程序存储器地址 单元的内容送A 假定指令执行前 (A)=54H,(DPTR)=1256H 则该指令的操作示意请参见图36。变址寻址形成的操作数 地址为1256H+54H=12AAH,若12AAH单元的内容为00H,则 该指令执行的结果是A的内容为00H
6.变址寻址 以DPTR或PC为基址寄存器,累加器A做变址寄存器,以 两者内容相加,形成的16位程序存储器地址作为操作数地址。又 称基址寄存器+变址寄存器间接寻址。 例如:指令 MOVC A,@A+DPTR 其功能是把DPTR和A的内容相加所得到的程序存储器地址 单元的内容送A。 假定指令执行前 (A)=54H,(DPTR)=1256H 则该指令的操作示意请参见图3–6。变址寻址形成的操作数 地址为1256H+54H=12AAH,若12AAH单元的内容为00H,则 该指令执行的结果是A的内容为00H