赞
踩
目录
我们在上一期介绍了LC-3的指令构成还有一些注释含义,这一期我们逐条来讲解指令,LC-34-bit的操作码字段可以定义16种指令,在LC-3的ISA中,操作码值1101没有定义,所以LC-3一共有15条指令。如果有些概念不清楚,可以先看后面的注释。
加法运算:
bit[5]是0代表寻址方式为寄存器寻址,将SR1与SR2相加的结果放在DR中;
bit[5]是1代表寻址方式为立即数寻址,将SR1与imm5字段的立即数的16位扩展值相加的结果放在DR中。
按位与运算:
bit[5]是0代表寻址方式为寄存器寻址,SR1与SR2按位与运算的结果放在DR中;
bit[5]是1代表寻址方式为立即数寻址,SR1与imm5字段的立即数的16位扩展值按位与运算的结果放在DR中。
按位取反:
将SR按位取反的结果放在DR。
读取数据:
相对寻址(PC-relative),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容存进DR。
写入数据:
相对寻址(PC-relative),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将SR的内容存进该地址所指向的内存单元。
读取数据:
间接寻址(indirect),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容作为地址,将此地址所指向的内容存进DR。
写入数据:
间接寻址(indirect),PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址所指向的内容作为地址,将SR的内容存进此地址所指向的内存单元。
读取数据:
基址偏移寻址(base+offset),offset6字段的16位扩展值和BaseR的内容相加得到一个地址,将该地址指向的内容存进DR。
写入数据:
基址偏移寻址(base+offset),offset6字段的16位扩展值和BaseR的内容相加得到一个地址,将SR的内容存进该地址指向的内存单元。
立即数寻址,PCoffset9字段的16位扩展值和增量PC相加得到一个地址,将该地址存进DR。
条件跳转:
根据NZP的值来进行指定检测条件码,如果n为1,则检测N条件码;如果z为1,则检测Z条件码;如果p为1,则检测P条件码。如果被检测的条件码为1,则程序跳转到PCoffset9字段的16位扩展值和增量PC相加得到的地址处。
注意,如果nzp均为1,则无条件跳转,因为NZP条件码必有一个为1;
如果nzp均为0,则不管怎样都不跳转,因为不去检测。
无条件跳转:
程序无条件跳转到BaseR的内容所指定的地址处。
无条件跳转:
程序无条件跳转到R7的内容所指定的地址处,而R7的内容是指向子程序调用指令后的指令地址,实际上就是从子程序跳回来。
RET可以看作是JMP的一个特例。
无条件跳转:
PCoffset11字段的16位扩展值和增量PC相加得到的地址作为子程序的入口地址,程序进入子程序,增量PC保存在R7中(参见RET指令,用于从子程序跳回来)。
无条件跳转:
BaseR的内容作为子程序的入口地址,程序进入子程序,增量PC保存在R7中(参见RET指令,用于从子程序跳回来)。
如果当前处理器运行在特权模式,那么特权模式栈顶部两个单元的内容被弹出,分别赋值给PC和PSR。
如果当前处理器运行在用户模式,那么将引发“特权模式冲突”的异常。
程序进入由trapvect8指定的系统调用的服务程序,增量PC保存在R7中,参见RET指令,用于从服务程序跳回来。
Trap服务程序
陷入矢量 | 汇编器名 | 描述 |
---|---|---|
x20 | GETC | 从键盘读入一个字符。 |
x21 | OUT | 在屏幕上显示字符。 |
x22 | PUTS | 在屏幕上显示一个字符串,每个内存单元存放一个字符。 |
x23 | IN | 在屏幕上显示提示,读入一个字符,并在屏幕上显示该字符。 |
x24 | PUTSP | 在屏幕上显示一个字符串,每个内存单元存放两个字符。 |
x25 | HALT | 停止执行,并在屏幕上输出信息。 |
目的寄存器(destination register)。
SR、SR1、SR2等等是指源寄存器(source register)。
5-bit的立即数(immediate value),它是补码的形式。
基址寄存器(Base Register),它和一个6-bit偏移相加产生Base+offset地址。
6-bit补码,用于Base+offset寻址模式。
9-bit补码,用于PC+offset寻址模式。
11-bit补码,用于JSR指令计算子程序的入口地址。
8-bit无符号整数,用于TRAP指令确定服务程序的入口地址,间接寻址模式,该地址的内存单元存放了服务程序的入口地址。
条件码,LC-3有三个位寄存器:N、Z和P,即负数(negative)、0(zero)和正数(positive),当任意寄存器被写入时,根据写入的是负数、0还是正数分别设置相应的条件码为1,其他为0。
指令的汇编语言形式右上角的+号表示该指令将改变条件码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。