📄 +
字号:
CASL 汇 编 语 言 文 本
一、处理机COMET说明
1. COMET是一台字长为16位的定点计算机。主存储器的容量是65536字,按编
号0000~FFFF(十六进制)编址。
2. 一个字的16位二进位采用自左至右的次序编号,即
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
3. 一个字的16可以是:
. 不带符号的二进制非负整数。此时一个字能表示的数的范围是:
0 ≤ X ≤ 65535
. 用补码表示的带符号的二进制整数,此时一个字能表示的数的范围是:
-32768 ≤ X ≤ 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。它不会因其它
指令的执行而改变。
5. COMET的控制方式为顺序控制。 指令由32位二进位构成。即双字长,其构
成没有定义。
6. 指令的符号表示:
GR 泛指通用寄存器。 可用数字0、1、2、3、4来指定,也可以用GR0、GR1、
GR2、GR3、GR4来指定。
XR 泛指变址寄存器。可用数字1、2、3、4来指定,也可以用GR1、GR2、GR3、
GR4来指定。
SP 栈指针(第4号通用寄存器)。
ADR 标号(表示与标号对应的地址),为10进制数(-32768≤ADR≤65535;ADR作
为地址,具有0~65535的值,而32768~65535的值也可以用负的10进制常数表示)。
(X) 表示地址中的内容,如果X是通用寄存器时表示通用寄存器中的内容。
E 表示有效地址。形成有效地址E的规则是:
E = ADR [+(XR)] (mod 65536)
[ ] 表示被[]包围的部分可以省略(以下同),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
─────┼───┼──────┼─────────────────
│ │ │视(GR)和(E)为用补码表示的
│ │ │带符号的二进制整数。
算术比较 │CPA │GR,ADR[,XR] │若 (GR) > (E) 则 00 => FR
│ │ │若 (GR) = (E) 则 01 => FR
│ │ │若 (GR) < (E) 则 10 => FR
─────┼───┼──────┼─────────────────
│ │ │视(GR)和(E)为无符号的二进制
│ │ │非负整数。
逻辑比较 │CPL │GR,ADR[,XR] │若 (GR) > (E) 则 00 => FR
│ │ │若 (GR) = (E) 则 01 => FR
│ │ │若 (GR) < (E) 则 10 => FR
─────┼───┼──────┼─────────────────
算术左移*│SLA │GR,ADR[,XR] │把(GR)向左或向右移动E位。在算术移
─────┼───┼──────┤位时,GR中的第0位保持不变。在右移
算术右移*│SRA │GR,ADR[,XR] │时空出的位被置成与第0位相同的 1或
─────┼───┼──────┤0;在左移时空出的位被置成0 。在逻
逻辑左移*│SLL │GR,ADR[,XR] │辑移位时,GR中的16位一起移动 ,而
─────┼───┼──────┤空出的位被置成0。
逻辑右移*│SRL │GR,ADR[,XR] │
─────┼───┼──────┼─────────────────
无条件转 │JMP │ADR[,XR] │无条件向有效地址E转移,即E=>PC
─────┼───┼──────┼─────────────────
大于等于转│JPZ │ADR[,XR] │根据FR的值向有效地址E转移,
─────┼───┼──────┤即E=>PC;不转移时执行下一条
小于转 │JMI │ADR[,XR] │指令,即(PC)+2=>PC(注)。
─────┼───┼──────┤
不等转 │JNZ │ADR[,XR] │
─────┼───┼──────┤
等于转 │JZE │ADR[,XR] │
─────┼───┼──────┼─────────────────
进栈 │PUSH │ADR[,XR] │(SP)-1=>SP, E=>(SP)
─────┼───┼──────┼─────────────────
退栈 │POP │GR │((SP))=>GR, (SP)+1=>SP
─────┼───┼──────┼─────────────────
│ │ │先形成有效地址E,再依次执行
调用 │CALL │ADR[,XR] │(SP)-1=>SP
│ │ │(PC)+2=>(SP)
│ │ │E=>PC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -