详解LC

您所在的位置:网站首页 python3指令 详解LC

详解LC

#详解LC| 来源: 网络整理| 查看: 265

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。

目录

碎碎念念

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)

加法运算:

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

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

AND (Bit-wise logical AND)

按位与运算:

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

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

NOT (Bit-wise complement)

按位取反:

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

数据搬移类指令 LD (load)

读取数据:

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

ST (store)

写入数据:

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

LDI (load indirect)

读取数据:

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

STI (store indirect)

写入数据:

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

LDR (load base+offset)

读取数据:

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

STR (store base+offset)

写入数据:

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

LEA (load effective address)

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

控制类指令 BR (conditional branch)

条件跳转:

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

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

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

JMP (jump)

无条件跳转:

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

RET (return)

无条件跳转:

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

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

JSR (jump to subroutine)

无条件跳转:

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

JSRR

无条件跳转:

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

RTI (return from interrupt)

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

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

TRAP (system call) ​

程序进入由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。

+

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3