中华学习机原理和应用(13) ——65SC02指令系统和汇编语言

🏠 首页 《无线电》杂志 1989年 🔗 第1期 🔗 第28页 分类:技术市场 🔗 黄金明 🔗, 乌振声 🔗

65SC02指令系统

65SC02微机处理器有64条指令,15种寻址方式。每条指令可对应不同的寻址方式,这样共能组合178种指令编码。指令长度为1—3字节,其中第一字节一律为操作码,操作数或操作数的地址跟随在操作码之后,根据采用的寻址方式占用一个或二个字节。为讨论方便,现将65SC02的指令系统按功能分成几类进行介绍,指令的助记符、说明及操作见表1。

图1
图1 🔍原图 (890×2180)
图2
图2 🔍原图 (946×2148)

一、传送指令:包括存储器和存储器、寄存器和寄存器之间的传送。例如,指令LDA#$00/TAX/ TAY分别将00送A累加器/A送X/A送Y,这样就实现了将累加器A,变址寄存器X和Y清零。

二、算术逻辑运算指令:包括算术运算指令和逻辑运算指令。前者加减是带进位或借位的加减法,其中借位标志C-是P寄存器中的标志位C的取反状态;后者运算各位之间没有进位借位关系。

三、置标志位指令:在P寄存器中设置了七个标志位,这些标志位可以由置标志位指令来设置。

四、比较指令:见表。执行CMP指令后,若C=1,则表示够减无借位,即A≥M;C=0,则表示不够减有借位,即A<M。

五、移位指令:包括将累加器A中的内容进行左移、右移、循环左移和循环右移等指令。

六、堆栈指令:堆栈是一个按照“后进先出”原则安排的内存区域,主要用于暂存数据。堆栈指针S始终指向栈顶的一个空单元,在数据出栈时自动加1,进栈时自动减1。堆栈设置在第一页地址010001FF上,S指示堆栈地址的低八位。

七、转移指令:程序通常是顺序执行的,但有时也需要转到某个特定地址继续执行,这就需要借助转移指令来实现。转移指令包括无条件转移指令和条件转移指令。

八、转子指令和子程序返回指令:转子指令使主程序转向子程序的入口地址,并执行子程序;子程序最后的返回指令,使程序返回到主程序被打断处。

汇编语言

计算机的CPU和存储器等功能部件只能接受“1”和“0”这样的信息,所以计算机的指令和地址等都是用二进制编码表示的,为方便常写成十六进制的形式,用这种形式的指令组成的程序称为机器语言。这种语言为计算机直接使用,不需任何翻译,因此速度最快;但它存在着不易看懂,容易出错的缺点。为克服机器语言的这些缺点,人们便想到了用与机器语言基本上一一对应的符号表示它,使所有的操作和地址都可用符号来标记,用这种符号编写的程序称为汇编语言。汇编语言必须经过翻译,变成机器语言才能为计算机接受。这个翻译过程称为“汇编”,是由计算机配置的汇编程序完成的。

汇编语言一般由标号、操作码、操作数及注释部分组成。举例说明如下:

标号 操作码 操作数 注释

STABT LDA #0 ; 和=0

TAX ; 变址计数=0

LOOP CLC ; 清进位

ADC $1000,X; 和=和+数据

INX ; 变址计数+1

CPX 5 ; 五个数据是否加完

BNE LOOP ; 未加完,继续求和

STA $06 ; 加完,送结果

这是对从1000单元开始存放着的五个数据求累加和的程序,其中START,LOOP都是标号,LOOP是程序分支所需要的地址,操作码部分都是65SC02的助记将,操作数部分是操作码所要操作的数据,在分号后面部分是注释部分(若要作为程序的一部分输入或要求与程序一起打印输出,注释部分要用英文书写)。它是用来说明语句的功能,便于阅读和交流。汇编程序对注释部分不予理会的。

伪指令

汇编语言中有一类指令,它们不产生目标程序,即不影响程序的执行,称为伪指令。例如为程序指定起始地址、给符号赋值、把给定的数据放入存储单元、留出存储数据用的存储区等操作。下面介绍6502系到汇编语言常用的伪指令。

一、初始地址伪指令ORG:

指令格式 ORG nn

nn是16位二进制数,本语句用来确定一段程序的起始地址。

二、定义字节伪指令DFB:

指令格式〈标号〉DFB 〈项或项表〉

其中“项或项表”指一个字节,或字节串,或是字特串。此语句告诉汇编程序在目标代码中留出一个或一串字节的位置,并在其中填入项或项表的数值或字符的ASGII码值。

三、定义字伪指令DW:

指令格式〈标号〉 DW〈项或项表〉

其中“项或项表”指的是一个字(包括两个字节)或字串。指令功能与上述DFB指令类似。通常DW指令用来定义地址码。

四、定义存储区伪指令DS:

指令格式〈标号〉 DS 表达式

功能:由标号所指定的单元开始,留出表达式所规定数量的内存单元。

五、等值伪指令EQU:

指令格式〈标号〉 EQU 〈项〉

上述伪指令举例说明如下:

① ORG $300

FIRST DFB $1A, $1B,$1C,,A,,B,,C

ORG规定了标号FIRST的地址为$300,伪指令把数据$1A、$1B、$1C及字母A、B、C的ASCII码值顺序放入FIRST开始的6个连续单元中。

② ADDRESS DW $C506,$FE04

DW指令在ADDRESS开始的四个单元中顺序放入06、C5、04及FE。

③ BUFFER DS 10

由BUFFER单元开始空出10个单元。

④ COUNT EQU $1000

AREA1 EQU COUNT

首先将数值$1000赋值给COUNT,然后再将已赋值的COUNT的值赋值给AREA1,即AREA1=$1000。(乌振声 黄金明)