Week 4 notes
为了更方便的讨论机器语言,人们通常将指定的代码段与相应的含义(Mnemonic Form)对应起来。下面的例子中,ADD
就是 0100010
对应的 Mnemonic Form。可以观察到的是,这种替代不仅可以代表 operation,也可以代表地址。
需要注意的是:
ADD
这样的形式不是真正存在的
Symbols 主要应用于简化内存寻址的过程。比如维护一个 index
,将指定的内存区域分为不同的片区,当需要对指定区域进行操作时,我们可以通过对应的 index
对其进行快速访问。这种将 symbol 与实际内存地址建立映射关系的方式,会大大增强程序的易读性和可维护性。该映射关系也是由 assmbler 来翻译的。
不同的机器语言之间的实现可能并不相同,取决于其复杂度。
内存寻址是一项非常昂贵的操作。通常来说,有两个问题:
解决方案是提供内存的级联:将内存按速度进行划分,不同速度的内存区域对应不同的任务。需要注意的是,速度越快,对应的内存就越小。
寄存器是访问速度最快的内存,通常由 CPU 内置。寄存器分为几个类型:
add r1 r2
,r1
和 r2
就是该加法操作中,对应数据所在的寄存器名称。
# Register mode R2 <- R2 + R1
Add R1, R2
# Direct mode Mem[200] <- Mem[200] + R1
Add R1, M[200]
# Indirect Mem[A] <- Mem[A] + R1
Add R1, @A
# Immediate R1 <- R1 + 73
Add 73, R1
外设(键盘鼠标)通常通过寄存器链接,并通过一定的协议(驱动)来使其工作。