CASL汇编语言学习

来源:互联网 发布:windows vista安装 编辑:程序博客网 时间:2024/04/30 15:43

CASL汇编语言

一、处理机COMET说明

1. COMET是一台字长为16位的定点计算机,主存储器的容量是65536字节,按编号0000-FFFF(十六进制)编址。

2. 一个字的16位二进制自左至右的次序编号,即

0123456789101112131415
................

3. 一个字中的16位可以是:

不带符号的二进制非负整数。此时一个字能表示的数的范围是:0-65535

用补码表示的带符号的二进制整数。此时一个字能表示的数范围是:-32768-32767

地址常数。此时一个字能表示的地址写成十六进制时是:0000-FFFF

字符数据。此时一个字的高8位皆应为零,低8位为字符的ASCII编码,即

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

0

0

0

0

0

0

0

字符的ASCII编码

4. COMET机有5个通用寄存器GR(16位),一个指令计数器PC(16位)和一个标志寄存器FR(2位)。它们的作用分别是:

GR(通用寄存器) 5个通用寄存器的编号为0,1,2,3,4,分别记为GR0,GR1,GR2,GR3,GR4。这些通用寄存器用于算术、逻辑、移位等运算,其中GR1,GR2,GR3,GR4通用寄存器兼作变址寄存器。另外,GR4还兼作栈指针(SP)用,栈指针是存放栈顶地址用的寄存器。

PC(指令寄存器) 在执行指令的过程中,PC中存放着正在执行的指令的第一个字的地址(一条指令占两个字)。当指令执行结束时,一般是把PC的内容加2,只有在执行转移指令且条件成立时,才将转移指令地址置入PC中。

FR(标志寄存器) 在ADD,SUB,AND,OR,EOR,CPA,CPL,SLA,SRA,SLL,SRL,LEA等指令执行结束时,根据执行的结果,将FR置成00,01或10。它不会因其它指令的执行而改变(参阅7)。

5. COMET控制方式为顺序控制。指令由32位二进制构成,即双字长,其构成没有定义。

6. 指令的符号表示

GR泛指寄存器 可用数字0,1,2,3,4来指定,也可以用GR0,GR1,GR2,GR3,GR4来指定。

XR泛指变址寄存器 可用数字1,2,3,4来指定。

SP栈指针 (第4号寄存器)。

ADR 标号(表示与标号对应的地址),为10进制整数(-32768 <= ADR 65536;ADR作为地址,具有0-65536的值,而32768-65536也可以用负的10进制常数表示)。

(X)表示X地址中的内容,如果X是通用寄存器时表示通用寄存器中的内容。

E表示有效地址。形成有效地址E的规则是:

E=ADR[+(XR)] (mod 2的16次方)

[]表示被[]包围的部分可以省略(以下同),XR省略时表示不使用变址寄存器。

 

7. COMET有23种指令。指令的名称、书写格式及其功能见附表1。指令格式用汇编语句形式给出。

附表1:

名称

书写格式

功能

指令码

操作数

取数LDGR,ADR[,XR](E) -> GR
存数STGR,ADR[,XR](GR) -> E
取地址*LEAGR,ADR[,XR]E -> GR
加法*ADDGR,ADR[,XR](GR)+(E) -> GR
减法*SUBGR,ADR[,XR](GR)-(E) -> GR
逻辑乘*ANDGR,ADR[,XR](GR)&(E) -> GR
逻辑加*ORGR,ADR[,XR](GR)|(E) -> GR
按位加*EORGR,ADR[,XR](GR)^(E) -> GR
算术比较CPAGR,ADR[,XR]视(GR)和(E)为用补码表示的带符号的二进制整数。

若(GR)>(E)则00 -> FR

若(GR)=(E)则01 -> FR

若(GR)<(E)则10 -> FR

逻辑比较CPLGR,ADR[,XR]视(GR)和(E)为无符号的二进制非负整数。

若(GR)>(E)则00 -> FR

若(GR)=(E)则01 -> FR

若(GR)<(E)则10 -> FR

算术左移*SLAGR,ADR[,XR]把(GR)向左或向右移动E位。

在算术移位时,GR中的第0位保持不变。在右移空出的的位置被置成与第0位相同的1或0;在左移时空出的位被置成0。

在逻辑移位时,GR中的16位一起移动,而空出的位被置成0。

算术右移*SRA 
逻辑左移*SLL 
逻辑右移*SRL 
无条件转JMPADR[,XR]无条件向有效地址E转移,即E -> PC
大于等于转JPZADR[,XR]根据FR的值向有效地址E转移,即E -> PC;

不转移时执行下一条指令,即(PC)+2 -> PC

小于转JMIADR[,XR]
不等转JNZADR[,XR]指令转移时FR的值
JPZ00或01
JMI10
等于转JZEADR[,XR]JNZ00或10
JZE01
  
进栈PUSHADR[,XR](SP)-1 -> SP

E -> (SP)

退栈POPGR((SP)) -> GR

(SP)+1 -> SP

调用CALLADR[,XR]先形成有效地址,再依次执行

(SP)-1 -> SP

(PC)+2 -> (SP)

E -> PC

返回RET ((SP)) -> PC

(SP)+1 -> SP

*这些指令还根据执行结果(GR中的值),形成FR的值 ,其规则是:

  • 若GR中的第0位为0且其余各不全为0,则FR被置成00;
  • 若GR中的16位全为0,则FR被置成01;
  • 若GR中的第0位为1,则FR被置成10。
二、汇编语言CASL说明

COMET的汇编语言是CASL,其语法规则说明如下。

1. 指令的种类和书写格式

CASL由4种伪指令(START,END,DS,DC),3种宏指令(IN,OUT,EXIT)和23种符号指令(COMET的指令)组成。

CASL的每一条指令书写在一行内(最多不超过72个字符),它的书写格式如附表2所示。

附表2:

标号指令码操作数注释
[LABEL]START[LABEL] 
空白END空白 
[LABEL]DC常数 
[LABEL]DS区域的字数 
[LABEL]INALABEL,NLABEL 
[LABEL]OUTALABEL,NLABEL 
[LABEL]EXIT空白 
[LABEL]符号指令参照上节7

附表2可知,CASL每条指令由标号(可缺省)、指令码、操作数(可缺省)4栏构成,每一栏的书写规则如下:

标号栏 从第一个字符开始,最多不超过6个字符位置。

指令栏 在无标号时,从第二个字符位置以后的任意字符位置开始°有标号时,标号后面至少有一个空白从其后的任意位置开始。

操作数栏 指令码后至少有一个空白,其后到72个字符位置。不能继续到下一行。

注释栏 行里有分号(;),其后直到终了作为注释处理(但DC指令里的字符串中的分号除外)。此外在第一字符位置为分号或在分号前只有空白的情况下,该行全部作为注释处理,在注释栏里,可以书写任何字符。

LABEL泛指标号,标号最多不超过6个字符,开头必须是英文大写字母,以后可为英文字母或数字。

用空白表示的栏目里不得写入字符。

2. 伪指令

(1) [LABEL] START [LABEL]

表示程序的开头,即在程序的开始必须书写。

操作数栏中的标号是这个程序中定义的标号,它指出该程序的启动地址。在省略的情况下,程序从关开始执行。

标号栏中的标号可以作为其它程序进入该程序的入口。

(2) END

表示程序的终止,在程序的未尾必须书写。

(3) [LABEL] DC 常数

用来指定和存储常数。常数分十进制常数,十六进制常数,地址常数和字符串常数四种。

标号栏中的标号是代表被指定的十进制常数、十六进制常数、地址常数的存储地址或代表被指定的字符串常数的存储区域的第一字的地址。

十进制常数:DC n

用n指定一个十进制(-32768 < n < 65536),并将n转换成二进制数存储在一个字中。如果n超出规定的范围,则将其16位存储起来。

对32768-65535的十进制数也可以用负的十进制常数表示。

十六进制常数:DC #h

用h指定一个4位十六进制数(0000 - FFFF),并将h对应的二进制数存储在一个字中(在h的前面必须写上#)。

地址常数:DC LABEL

将标号LABEL所对应的地址作为一个字的二进制存储。若LABEL在程序中没有定义,汇编将保留地址的定义,并由操作系统处理。

字符串常数:DC '字符串'

将字符串中从左开始的每个字符转换成字符数据(参阅上节3),并依次把字符数据存储在连续的各字中。

在字符串中,不允许字符‘,字符串的长度不能是零(即空字符串)。

 

(4) [LABEL] DS 区域的字数

用来保留指定的字数的存储区域的第一个字的地址。

区域的字数为零时,存储区域不存在,但是标号栏中的标号仍有效,即代表下一字的地址。

3. 宏指令

宏指令是根据事先定义的指令串和操作的信息,生成指定功能的指令串。

CASL中有进行输入、输出及结束程序等宏指令,而没有定义输入,输出符号指令,这类处理由操作系统完成。

程序中出现宏指令时,CASL生成调 用操作系统的指令串,但是,生成的指令串的字数不定。

执行宏指令时,GR的内容保持不变而FR的内容不确定。

(1)[LABEL] IN ALABEL NLABEL

宏指令IN,从输入装置上输入一个记录,记录中的信息(字符)依次按字符数据的形式被顺序存放在标号为ALABEL开始的区域内,已输入的字符个数以二进制的形式存放在标号为NLABEL的字中。记录之间的分隔符号不输入。

(2)[LABEL] OUT ALABEL NLABEL

宏指令OUT,将存放在从标号ALABEL开始的区域中的字符数据,作为一个记录向输出装置输出,输出的字符个数由标号为NLABEL的字中的内容确定。输出时,若要记录间的间隔符号,由操作系统自动插入输出。

(3)[LABEL]EXIT

宏指令EXIT,表示程序执行的终止,控制返回操作系统。

(4)符号指令,参阅上节7

(5)指令字、区域的相对位置

由汇编生成的指令字和区域的相对位置按汇编程序的收发室确定,并且生成的指令字、区域占有主存的连续区域。

 

原创粉丝点击