Skip to content

WalterSumbon/LC-3-simulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LC-3 Simulator

(大二上学期的模拟与数字电路实验课大作业)

现在只希望助教别在Github上搜到这些代码然后认定我抄袭 (我抄我自己???)

LC-3介绍

LC-3出自《计算机系统概论(第二版)》一书,是一个图灵完备的16位计算机,内置了210*16 bit的内存和8个16位的寄存器。
指令集如下图:
ISA

操作说明:

为了为下文的介绍做铺垫,先介绍一些理解交互操作所需的程序变量:

变量名 含义
内存地址 数据在内存中的地址,范围 0~210-1
内存内容 内存中存储的内容,在LC-3的实现中不严格区分指令和数据
PC program counter,指向当前执行的指令在内存中的地址
cur 光标(cursor),表示当前被数码管显示的内存地址
cnt counter,用来计数执行的指令条数
mod 交互模式状态代码
state 内核状态机状态代码

注:其实整个LC-3中只有一个有限状态机,但为了方便理解和编写代码,将状态机的状态代码分为了modstate两部分,这种表述与只用一个状态变量是等价的。

下面进行详细介绍。

为了方便与用户的交互,LC-3 Simulator总共设计了4种模式:

状态 功能 状态代码
Write 写入 00
Jump 跳转 10
Run 运行 01
(Undefined) (未定义) 11

LC-3 的内核,也就是执行程序的核心部分,使用有限状态自动机进行描述。共有32种状态,下面介绍一些关键的状态:

state 描述
0 停机状态
1 将内存的写使能信号置为0
2 取指令,PC加一,同时检查PC是否为非法值,如果是,跳转到状态0(停机)

显示部分使用的是板载的数码管和LED灯:

  • 数码管

    • 始终显示的是当前光标所在行的地址和内容,二者均使用16进制表示。
  • LED灯

    • 在Write状态下

      • 显示的是PC值(这样设置主要是为了方便调试);
    • 在其他状态下

      • 左侧9位显示的是指令执行总条数的数值(cur)
      • 中间5位显示的是当前的LC-3内核自动机的状态代码(state)
      • 右边两位显示的是当前的交互模式代码(mod)

可供操作的有五个按钮和16个开关。
可以使用上下左右中5个按钮进行操控:

按钮 作用
WriteJump模式下用来使cur减一
WriteJump模式下用来使cur加一
用来在WriteJump模式间相互切换,或强制终止运行(Run-->Write)
SW赋值给PC,并开始执行,切换到Run模式
确定键,Write模式下将SW赋值给cur指向的内存空间,Jump模式下将SW赋值给cur

About

LC-3 在FPGA上的实现

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published