《计算机系统要素学习》笔记之第4章 机器语言

《计算机系统要素学习》笔记之第4章 机器语言

  • 机器语言:可以被看作是一种约定的形式,它利用处理器和寄存器来操控内存
  • 内存(Memory):用来储存数据和指令的硬件设备,基本结构是一个连续的固定宽度的单元序列,即字(word)或内存单元。用Memory[address]、RAM[address]、M[address]表示。
  • 处理器(CPU):Central Processing
    Unit,是执行一组固定基本操作的设备,包括算术和逻辑操作,内存存取操作,控制操作(Control
    Operation),操作对象是二进制数值,它们来自寄存器和指定的内存单元。
  • 寄存器(Register):相当于处理器的一个高速本地内存,使得处理器能快速地操控数据和指令。每个寄存器只存储1位。
  • 汇编语言(assembly language):采用助记符(symbolic mnemonics)来表示机器语言中二进制的操作码。
  • 汇编编译器(Assembler):将汇编语言翻译成二进制机器语言的程序。
  • 内存访问:直接寻址(Direct Addressing),立即寻址(Immediate Addressing),间接寻址(Indirect
    Addressing)
  • Hack机器语言规范详述
    Hack是一个基于冯 诺伊曼架构的16位计算机,由一个CPU、两个独立的内存模块(instruction memory and data memory),以两个内存映射I/O设备(Screen and keyboard)组成。
  • 内存寻址空间:指令地址空间(instruction memory) 数据地址空间(data memory)
  • A-指令:@value(15位),0vvv vvvv vvvv vvvv表示
  • C-指令:dest=comp;jump,111a cccc ccdd djjj表示
  • 符号:预定义符号(Predefined symbols),虚拟寄存器(Virtual
    registers)如R0-R15代表0-15号RAM表示,预定义指针(Predefined
    pointers)如SP、LCL、ARG、THIS、THAT表示0-4号RAM地址,I/O指针如SCREEN和KBD表示RAM地址为16384和24576,标签符号(Label
    symbols),变量符号(Variable symbols)
  • 实现
  • Mult.asm
    @1
    D=M
    @EQ0
    D;JEQ
    @END
    D;JLT
    @0
    D=A
    @2
    M=D
    (COMP)
    @2
    D=M
    @0
    D=D+M
    @2
    M=D
    @1
    M=M-1
    @1
    D=M
    @END
    D;JEQ
    @COMP
    D;JMP
    (EQ0)
    @0
    D=A;
    @2
    M=D;
    (END)
    @END
    0;JMP
  • Fill.asm
    (PRG)
    @KBD //24576
    D=M
    @PRG
    D;JEQ //if M[24576]==0 goto PRG
    (BLACK)
    @30
    D=A
    @0
    M=D //loop num M[0]
    @32767
    D=A+1
    @32767
    D=D+A
    @3
    M=D // M[3]=65535
    @24576
    D=A
    @2
    M=D //store max address to M[2]
    // LOOP0:
    (LOOP0)
    @SCREEN
    D=A
    @1
    M=D //store screen address to M[1]
    // black to all
    (LOOP1)
    @3
    D=M //D=M[3]
    @1
    A=M
    M=D // become black M[M[1>=65535
    @1
    D=M
    @1
    M=D+1 // M[1]++
    @2
    D=M
    @1
    D=D-M // D=M[2]-M[1]>=0?
    @LOOP1
    D;JGE
    // condition to loop1 or white
    @0
    MD=M-1
    @LOOP0
    D;JNE
    //@KBD //24576
    //D=M
    //@BLACK
    //D;JNE //if M[24576]!=0 goto BLACK
    // white to all
    (LOOP3)
    @SCREEN
    D=A
    @1
    M=D //store screen address to M[1]
    @24576
    D=A
    @2
    M=D //store max address to M[2]
    // black to all
    (LOOP4)
    @0
    D=A
    @1
    A=M
    M=D // become white 16 bit
    @1
    D=M
    @1
    M=D+1 // M[1]++
    @2
    D=M
    @1
    D=D-M
    @LOOP4
    D;JGE
    // goto PRG
    @PRG
    0;JMP

版权声明:本文为weixin_43147737原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。