⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 Casl汇编语言解释运行环境Nasl
💻
📖 第 1 页 / 共 2 页
字号:
                 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 + -