LC-3 汇编语言 指令集

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC-3 汇编语言 指令集相关的知识,希望对你有一定的参考价值。

LC-3汇编语言指令集

LC-3汇编语言

运算类指令

ADD (addition)

寄存器寻址:

ADD DR,SR1,SR2

将SR1与SR2相加的结果放在DR中;

立即数寻址:

ADD DR,SR1,imm

将SR1与立即数imm相加的结果放在DR中。

AND (Bit-wise logical AND)

按位相与:

寄存器寻址:

AND DR,SR1,SR2

将SR1与SR2按位相与的结果放在DR中;

立即数寻址:

AND DR,SR1,imm

将SR1与立即数imm按位相与的结果放在DR中。

NOT (Bit-wise complement)

按位取反:

NOT DR,SR

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

数据搬移类指令

LD (load)

读取数据:

相对寻址(PC-relative):

LD DR,LABEL

将标号LABEL所指向的内容存进DR。

ST (store)

写入数据:

相对寻址(PC-relative):

ST SR,LABEL

将SR的内容存进标号LABEL所指向内存单元。

LDI (load indirect)

读取数据:

间接寻址(indirect):

LDI DR,LABEL

将标号LABEL所指向的内容作为地址,将此地址所指向的内容存进DR。

STI (store indirect)

写入数据:

间接寻址(indirect):

STI SR,LABEL

将标号LABEL所指向的内容作为地址,将SR的内容存进此地址所指向的内存单元。

LDR (load base+offset)

读取数据:

基址偏移寻址(base+offset):

LDR DR,BaseR,imm

立即数imm和BaseR的内容相加得到一个地址,将该地址指向的内容存进DR。

STR (store base+offset)

写入数据:

基址偏移寻址(base+offset):

STR SR,BaseR,imm

立即数imm和BaseR的内容相加得到一个地址,将SR的内容存进该地址指向的内存单元。

LEA (load effective address)

立即数寻址:

LEA DR,LABEL

将标号LABEL所指向的值作为地址存进DR。

控制类指令

BR (conditional branch)

条件跳转:

BRN LABEL

如果寄存器的值为负数, 则程序跳转到标号所指向处。

BRZ LABEL

如果寄存器的值为0, 则程序跳转到标号所指向处。

BRP LABEL

如果寄存器的值为正数, 则程序跳转到标号所指向处。

BRNZ LABEL

如果寄存器的值是负数或者是0,即不是正数, 则程序跳转到标号所指向处。

BRNP LABEL

如果寄存器的值为负数或正数,即不是0, 则程序跳转到标号所指向处。

BRZP LABEL

如果寄存器的值为0或者是正数,即不是负数, 则程序跳转到标号所指向处。

BRNZP LABEL

程序无条件跳转到标号所指向处。

BR LABEL

程序无条件跳转到标号所指向处。

JMP (jump)

无条件跳转:

JMP BaseR

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

RET (return)

无条件跳转:

RET

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

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

JSR (jump to subroutine)

无条件跳转:

JSR LABEL

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

JSRR

无条件跳转:

JSRR BaseR

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

RTI (return from interrupt)

RTI

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

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

TRAP (system call)

TRAP trapvector8

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

Trap服务程序

伪操作

.ORIG

.ORIG

告诉汇编器将程序放在内存的哪个位置。

.FILL

.FILL

占用一个地址,并往地址所指向的内存单元填充初始值

.BLKW

.BLKW

占用连续的地址空间。

.STRINGZ

.STRINGZ

连续占用地址空间,并对其初始化,内存最后一个单元被置为x0000,类似C语言的/0。

.END

.END 

源程序结束。

注释

DR

目的寄存器(destination register)。

SR

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

BaseR

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

imm

立即数,# 表示十进制,X 表示十六进制,B 表示八进制。

LABEL

标号,指向内存单元的一个符号名,可以在程序中直接引用。

trapvect8

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

n z p

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

以上是关于LC-3 汇编语言 指令集的主要内容,如果未能解决你的问题,请参考以下文章

ARM汇编求正数负数个数

汇编学习笔记-80x86指令集

x86指令集总结

计算机系统实验三 汇编语言试验

汇编语言 王爽著第三章

汇编语言 1