一、处理机COMET说明 1. COMET是一台字长为16位的定点计算机,主存储器的容量是65536字节,按编号0000-FFFF(十六进制)编址。 2. 一个字的16位二进制自左至右的次序编号,即
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:
名称 | 书写格式 | 功能 | 指令码 | 操作数 | 取数 | LD | GR,ADR[,XR] | (E) -> GR | 存数 | ST | GR,ADR[,XR] | (GR) -> E | 取地址* | LEA | GR,ADR[,XR] | E -> GR | 加法* | ADD | GR,ADR[,XR] | (GR)+(E) -> GR | 减法* | SUB | GR,ADR[,XR] | (GR)-(E) -> GR | 逻辑乘* | AND | GR,ADR[,XR] | (GR)&(E) -> GR | 逻辑加* | OR | GR,ADR[,XR] | (GR)|(E) -> GR | 按位加* | EOR | GR,ADR[,XR] | (GR)^(E) -> GR | 算术比较 | CPA | GR,ADR[,XR] | 视(GR)和(E)为用补码表示的带符号的二进制整数。 若(GR)>(E)则00 -> FR 若(GR)=(E)则01 -> FR 若(GR)<(E)则10 -> FR | 逻辑比较 | CPL | GR,ADR[,XR] | 视(GR)和(E)为无符号的二进制非负整数。 若(GR)>(E)则00 -> FR 若(GR)=(E)则01 -> FR 若(GR)<(E)则10 -> FR | 算术左移* | SLA | GR,ADR[,XR] | 把(GR)向左或向右移动E位。 在算术移位时,GR中的第0位保持不变。在右移空出的的位置被置成与第0位相同的1或0;在左移时空出的位被置成0。 在逻辑移位时,GR中的16位一起移动,而空出的位被置成0。 | 算术右移* | SRA | | 逻辑左移* | SLL | | 逻辑右移* | SRL | | 无条件转 | JMP | ADR[,XR] | 无条件向有效地址E转移,即E -> PC | 大于等于转 | JPZ | ADR[,XR] | 根据FR的值向有效地址E转移,即E -> PC; 不转移时执行下一条指令,即(PC)+2 -> PC | 小于转 | JMI | ADR[,XR] | 不等转 | JNZ | ADR[,XR] | 指令 | 转移时FR的值 | JPZ | 00或01 | JMI | 10 | 等于转 | JZE | ADR[,XR] | JNZ | 00或10 | JZE | 01 | | | 进栈 | PUSH | ADR[,XR] | (SP)-1 -> SP E -> (SP) | 退栈 | POP | GR | ((SP)) -> GR (SP)+1 -> SP | 调用 | CALL | ADR[,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。
|