LC-3 机器语言 指令集

目录

碎碎念念

LC-3指令

运算类指令

ADD (addition)

AND (Bit-wise logical AND)

NOT (Bit-wise complement)

数据搬移类指令

LD (load)

ST (store)

LDI (load indirect)

STI (store indirect)

LDR (load base+offset)

STR (store base+offset)

LEA (load effective address)

控制类指令

BR (conditional branch)

JMP (jump)

RET (return)

JSR (jump to subroutine)

JSRR

RTI (return from interrupt)

TRAP (system call)

注释

DR

SR

imm5

BaseR

offset6

PCoffset9

PCoffset11

trapvect8

n z p

+


碎碎念念

我们在上一期介绍了LC-3的指令构成还有一些注释含义,这一期我们逐条来讲解指令,LC-34-bit的操作码字段可以定义16种指令,在LC-3的ISA中,操作码值1101没有定义,所以LC-3一共有15条指令。如果有些概念不清楚,可以先看后面的注释。

LC-3指令

运算类指令

ADD (addition)

LC-3 机器语言 指令集_第1张图片

加法运算:

bit[5]是0代表寻址方式为寄存器寻址,将SR1与SR2相加的结果放在DR中;

bit[5]是1代表寻址方式为立即数寻址,将SR1与imm5字段的立即数的16位扩展值相加的结果放在DR中。

AND (Bit-wise logical AND)

LC-3 机器语言 指令集_第2张图片

按位与运算:

bit[5]是0代表寻址方式为寄存器寻址,SR1与SR2按位与运算的结果放在DR中;

bit[5]是1代表寻址方式为立即数寻址,SR1与imm5字段的立即数的16位扩展值按位与运算的结果放在DR中。

NOT (Bit-wise complement)

405b56e90f8144ffbe9eb362321bfe4b.png

按位取反:

将SR按位取反的结果放在DR。

数据搬移类指令

LD (load)

682e43efe47c41d0994a38aa026e6cb0.png

读取数据:

相对寻址(PC-relative),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容存进DR。

ST (store)

18cc669fd4d349ecad79084f67b43a6b.png

写入数据:

相对寻址(PC-relative),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将SR的内容存进该地址所指向的内存单元。

LDI (load indirect)

61c9471707b743ab884587e935d82cc8.png

读取数据:

间接寻址(indirect),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容作为地址,将此地址所指向的内容存进DR。

STI (store indirect)

209f3f344c704ae196111bd1e6da6035.png

写入数据:

间接寻址(indirect),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容作为地址,将SR的内容存进此地址所指向的内存单元。

LDR (load base+offset)

f4140a90bdae4afba504598882173c31.png

读取数据:

基址偏移寻址(base+offset),offset6字段的16位扩展值和BaseR的内容相加得到一个地址,将该地址指向的内容存进DR。

STR (store base+offset)

a6a19b526506435ea663b4a6f344393b.png

写入数据:

基址偏移寻址(base+offset),offset6字段的16位扩展值和BaseR的内容相加得到一个地址,将SR的内容存进该地址指向的内存单元。

LEA (load effective address)

f313d8ee84ad495d96b95f1d1a1cb29d.png

立即数寻址,PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址存进DR。

控制类指令

BR (conditional branch)

2c3d0848080347b4abae1bcefecb2038.png

条件跳转:

根据NZP的值来进行指定检测条件码,如果n为1,则检测N条件码;如果z为1,则检测Z条件码;如果p为1,则检测P条件码。如果被检测的条件码为1,则程序跳转到PCoffset9字段的16位扩展值和增量PC相加得到的地址处。

注意,如果nzp均为1,则无条件跳转,因为NZP条件码必有一个为1;

如果nzp均为0,则不管怎样都不跳转,因为不去检测。

JMP (jump)

522893471b034d58bca5b3c12e7656f7.png

无条件跳转:

程序无条件跳转到BaseR的内容所指定的地址处。

RET (return)

0c78c97644c04be8ad2f613c671096ce.png

无条件跳转:

程序无条件跳转到R7的内容所指定的地址处,而R7的内容是指向子程序调用指令后的指令地址,实际上就是从子程序跳回来。

RET可以看作是JMP的一个特例。

JSR (jump to subroutine)

7dc7c7dd83f5420788c3084eed21c152.png

无条件跳转:

PCoffset11字段的16位扩展值和增量PC相加得到的地址作为子程序的入口地址,程序进入子程序,增量PC保存在R7中(参见RET指令,用于从子程序跳回来)。

JSRR

78fbe546e81544d59017ee6f483f88f4.png

无条件跳转:

BaseR的内容作为子程序的入口地址,程序进入子程序,增量PC保存在R7中(参见RET指令,用于从子程序跳回来)。

RTI (return from interrupt)

5bd389eb725d413986a374741930438b.png

如果当前处理器运行在特权模式,那么特权模式栈顶部两个单元的内容被弹出,分别赋值给PC和PSR。

如果当前处理器运行在用户模式,那么将引发“特权模式冲突”的异常。

TRAP (system call)

ecb8f6fe8ada4382b4df96bb1e67b43a.png

程序进入由trapvect8指定的系统调用的服务程序,增量PC保存在R7中,参见RET指令,用于从服务程序跳回来。

Trap服务程序

陷入矢量 汇编器名 描述
x20 GETC 从键盘读入一个字符。
x21 OUT 在屏幕上显示字符。
x22 PUTS 在屏幕上显示一个字符串,每个内存单元存放一个字符。
x23 IN 在屏幕上显示提示,读入一个字符,并在屏幕上显示该字符。
x24 PUTSP 在屏幕上显示一个字符串,每个内存单元存放两个字符。
x25 HALT 停止执行,并在屏幕上输出信息。

注释

DR

目的寄存器(destination register)。

SR

SR、SR1、SR2等等是指源寄存器(source register)。

imm5

5-bit的立即数(immediate value),它是补码的形式。

BaseR

基址寄存器(Base Register),它和一个6-bit偏移相加产生Base+offset地址。

offset6

6-bit补码,用于Base+offset寻址模式。

PCoffset9

9-bit补码,用于PC+offset寻址模式。

PCoffset11

11-bit补码,用于JSR指令计算子程序的入口地址。

trapvect8

8-bit无符号整数,用于TRAP指令确定服务程序的入口地址,间接寻址模式,该地址的内存单元存放了服务程序的入口地址。

n z p

条件码,LC-3有三个位寄存器:N、Z和P,即负数(negative)、0(zero)和正数(positive),当任意寄存器被写入时,根据写入的是负数、0还是正数分别设置相应的条件码为1,其他为0。

+

指令的汇编语言形式右上角的+号表示该指令将改变条件码。

你可能感兴趣的:(计算机系统1,机器语言,LC-3,青少年编程,系统架构,语言模型)