MCS—98指令系统简介

🏠 首页 《无线电》杂志 1993年 🔗 第2期 🔗 第27页 分类:无线电技术自学经验交流 🔗 陈尚品 🔗, 梁建国 🔗, 朱小华 🔗

8098的指令系统较完善,指令丰富,且运行速度快,编程效率高。用8098指令系统与8031指示系统来编制完成同一功能的程序时,8098的指令条数可能只是8031指令条数的一半。如果运行同一程序,8098的速度可能是8031的5倍左右。

1.MCS-96指令系统的特点归纳起来有如下几方面:

①多操作数,例如要完成一个加法,可以使用2个操作数

ADD AX,BX;这条指令是把BX和AX相加,结果送到AX之中,

ADD CX,BX,AX;这条指令是把BX和AX相加,结果送到CX之中。

第一条指令3字节,所花的时间为1μs。如果要用MCS-51指令来完成同一加法的话大约需6μs时间。

②操作数可以是字节、字和双倍字,8098CPU提供了16位的算术逻辑运算,也可以进行8位或32位的运算,但32位的运算只有16位乘16位,积为32位。8098的CPU还提供32位除16位(商和余数均为16位)和32位移位指令。

③算术运算十分方便。8098可以把短整数(8位带符号的数)和整数(16位带符号的数),分别扩展成整数和长整数(32位带符号的数),对于乘除运算指令,本身就提供了带符号与不带符号运算的指令。

④8098指令中提供了多种寻址方法,尤其是自动增量的间接寻址方式,对于数据的存取和传送提供了方便的途径。

⑤条件转移指令的双标志位判别,在计算机控制中,经常使用条件转移指令,常根据进位标志位“CY”的置“1”或置“0”来跳转,或根据操作结果是否为“0”的Z标志转移。8098的条件转移指令有以下几个特点:(a)标志位多,每个标志位都可以单个判断,然后决定是否转移。(b)可以利用两个标志的“与”操作,然后根据结果来决定是否转移。例如指令JGT ADR指令则是当符号标志N=0,且零标志Z=0时,才转移到ADR处,若不能同时满足,则不执行转移,而顺序执行指令。(c)还可利用两标志的“或”操作,然后根据结果决定是否转移。例如JNH ADR指令,则是当进位标志C=0或零标志=1时就转跳到ADR处,只有C和Z都不满足条件时,才不转移而顺序执行程序。

⑥移位指令的移位次数可以任意设定,在通常的单片机中,一条指令只能左移或右移一位,而8098可对任何寄存器(包括部分SFR寄存器)进行左移或右移,而且移位的次数可用立即数来决定。例如SHLL 1CH,#10H,就是将1CH之中的内容左移16次。

⑦无专门的I/O操作指令,8098有丰富的I/O口资源,特别是具有高速输入,高速输出,脉宽调制输出口,监视定时器等。8098将普通I/O口作为一个特殊功能寄存器来看待。

例如:LD 1AH,0FH;则是将P1口的内容送到寄存器1A之中,

SHLB 0FH,#02H;则是把 P1口上内容左移2位。

能对I/O口的内容进行移位是8098指令的一个特点。此外,对于高速I/O口部件在执行期间,CPU是不介入的,即CPU只需写入有关的命令后,就可以做其它的工作,而该部件自动控制执行应完成的动作。

2.8098指令的寻址方式有如下几种:

①寄存器直接寻址:寄存器直接导址是直接去访问内部RAM的寄存器,具体选中哪一个寄存器则由指令中的一个8位地址来决定,并且寄存器地址必须遵守操作数类型的定位规则。根据不同的指令,采用直接寄存器寻址时最多可有3个操作数,例如:

ADD AX,BX,CX ;AX=BX+CX

MUL AX,BX ;AX=AX*BX

INCB CL ;CL=CL+1

②间接寻址:采用间接寻址方式访问操作数时,操作数的地址存放在寄存器文件里的一个WORD变量之中,通过寄存器文件中这个代表操作数地址的WORD变量去寻找该操作数,这种间接地址能够在8098地址空间的任何地方,但其地址必须符合定位规则。

③自动增量间接寻址:这种寻址方式与间接寻址方式相似,但代表间接地址的WORD变量,在用它来找到操作数之后,自动增加。如果指令是按字节或短整数操作,间接地址变量在操作后自动增1;如果指令是按字或长整数操作,则间接地址在操作后自动增2。

例如:

LD AX,[BX]+;AX=((BX+1)BX),

;执行指令后,BX=BX+2

ADDB AL, BL,[CX]+; AL=AL+BL+((CX+1)CX),

;执行指令后,CX=CX+1

PUSH [AX]+;堆栈顶的一个字=(AX),

;执行之后,SP=SP-2;AX=AX+2

④立即寻址:这种寻址方式允许一个操作数直接从一个指令字段里取得,按字节或短整数进行操作时,字段是8位;按字或整数操作时,字段是16位。一条指令中只能包含一个立即数,其余操作数必须用寄存器直接寻址。例如:

ADD AX, # 1234H;

ADDB AL, # 34H

前一条指令是字操作,所以立即数1234H是16位,后一条指令是字节操作,立即数是8位。

⑤短变址寻址:这种寻址方式的指令中,包含有两个段,一个8位段用来选择寄存器文件中的一个字型变量,这个变量包含一个地址,通常称之为基址;另一个8位段是一个带符号的数,称之为偏移地址,即变址。两者结合起来构成操作数的地址。由于第二个8位段是一个带符号的数,有效地址范围可以从WORD变量前128字节到变量后的127个字节。一条指令中只能含有一个短变址寻址的参数,其余的操作数必须用寄存器直接寻址。例如:

设 BX=1234H

指令 LD AX, 12H[BX],就是将1234H+12H=1246H单元之中的内容送AX的低位字节,而把1247H单元之中的内容送AX的高位字节。这是一条字操作指令,所以有关地址必须符合字定位规则。

又例如:设BX=1234H

指令LDB AH,03H[BX],则是将1234H+3H=1237H单元之中的内容送AH之中,由于这是一条有关字节的操作的指令,所以无定位规则。

⑥长变址寻址:这种长变址寻址与短变址不同的地方是:它的变址部分由指令中一个不带符号的16位段构成。一条指令中只能有一个操作数采用长变址寻址方式,其它的操作数必须采用寄存器直接寻址方式。

⑦零寄存器寻址,在8098内部RAM之中,有2个恒为零的寄存器,它们的地址是00H,01H,通常称这2个寄存器为零寄存器。若把零寄存器作长变址寻址方式中的字型变量,就派生出零寄存器寻址方式,这种方式可对存储空间中任何一个单元直接寻址。

例如:ADD AX,1234H[0]

这条指令是把寄存器文件中零寄存器的内容0000H加上1234H为地址,再把该地址的内容与AX相加之后送到AX之中。

例如:POP 5678H[0],则是将堆栈顶部二单元的内容送到5678H和5679H单元之中,指令执行后且SP+2。

⑧栈指针寄存器寻址,在8098系统中,堆栈指针是内部寄存器文件中的一个16位的寄存器,它的地址是18H。若将栈指针作为其它寻址方式中的字型变量,就派生出栈指针寄存器寻址方式。

例如:PUSH[SP],就是将栈顶的内容再压一次栈,即复制栈顶内容。而LD AX,02H[SP],则是把栈顶下2个单元的内容送到AX之中。

3.8098指令的定位规则:

在8098中由于存在多种操作数,对于16位和32位的操作数有定位规则。16位的操作数的低位字节必须是偶数地址,而高位地址则是下一个奇位数地址。32位操作数的地址只能定位于能被4整除的地址上。在MCS-51指令系统中,操作数无定位规则。(朱小华 陈尚品 梁建国)