Machine (Assembly) Language

Similar documents
Machine (Assembly) Language Human Thought

IWKS 2300/5300 Fall John K. Bennett. Machine Language

Computer Architecture

Assembler. Building a Modern Computer From First Principles.

Assembler Human Thought

IWKS 3300: NAND to Tetris Spring John K. Bennett. Assembler

Chapter 6: Assembler

Computer Architecture

Chapter 6: The Assembler The Assembler Hack Assembly-to-Binary Translation Specification

EP1200 Introduction to Computing Systems Engineering. Computer Architecture

STEVEN R. BAGLEY THE ASSEMBLER

4. Computer Architecture 1

Virtual Machine Where we are at: Part I: Stack Arithmetic. Motivation. Compilation models. direct compilation:... 2-tier compilation:

Introduction: From Nand to Tetris

Virtual Machine. Part I: Stack Arithmetic. Building a Modern Computer From First Principles.

Introduction: Hello, World Below

Computer Architecture

Virtual Machine. Part II: Program Control. Building a Modern Computer From First Principles.

Computer Architecture

Course overview. Introduction to Computer Yung-Yu Chuang. with slides by Nisan & Schocken (

Assembler. Building a Modern Computer From First Principles.

Course overview. Introduction to Computer Yung-Yu Chuang. with slides by Nisan & Schocken (

Course overview. Introduction to Computer Yung-Yu Chuang. with slides by Nisan & Schocken (

Chapter 11: Compiler II: Code Generation

Compiler II: Code Generation Human Thought

Motivation. Compiler. Our ultimate goal: Hack code. Jack code (example) Translate high-level programs into executable code. return; } } return

Chapter 8: Virtual Machine II: Program Control

Boolean Arithmetic. Building a Modern Computer From First Principles.

Chapter 10: Compiler I: Syntax Analysis

8.7 TM: A SIMPLE TARGET MACHINE

4 Programing Paradigms in 45 Minutes

4 Programing Paradigms in 45 Minutes

Compiler I: Syntax Analysis

Boolean Arithmetic. From Nand to Tetris Building a Modern Computer from First Principles. Chapter 2

Sequential Logic. Building a Modern Computer From First Principles.

CSC 2400: Computer Systems. Towards the Hardware: Machine-Level Representation of Programs

Compiler I: Sytnax Analysis

CSC 8400: Computer Systems. Machine-Level Representation of Programs

EP1200 Introduktion till datorsystemteknik Tentamen tisdagen den 3 juni 2014, till 18.00

5. Computer Architecture: a Software Perspective 1

Virtual Machine (Part II)

Second Edition, MIT Press, forthcoming

CS311 Lecture: The Architecture of a Simple Computer

Arithmetic Logic Unit (ALU)

Second Part of the Course

Low-Level Essentials for Understanding Security Problems Aurélien Francillon

Real instruction set architectures. Part 2: a representative sample

//converts a string to a non-negative number string2int(string s){

Tutorial 1: Programming Model 1

Program Exploitation Intro

SCRAM Introduction. Philipp Koehn. 19 February 2018

Assembly Language Programming of 8085

Towards the Hardware"

Elements of Computing Systems, Nisan & Schocken, MIT Press. Boolean Arithmetic

mith College Computer Science CSC231 Assembly Week #9 Spring 2017 Dominique Thiébaut

EC-801 Advanced Computer Architecture

Building a Virtual Computer

Computer Science 324 Computer Architecture Mount Holyoke College Fall Topic Notes: MIPS Instruction Set Architecture

Introduction to Digital Logic

Programming Model 2 A. Introduction

Computer Science 104:! Y86 & Single Cycle Processor Design!

COS 140: Foundations of Computer Science

Boolean Logic. From Nand to Tetris Building a Modern Computer from First Principles. Chapter 1

COMPUTER ORGANIZATION AND ARCHITECTURE

Assembly Language: Overview!

Machine code. Nils Jansen December 12, 2017

17.1. Unit 17. Instruction Sets Picoblaze Processor

Computer Architecture 2/26/01 Lecture #

CPU: SOFTWARE ARCHITECTURE INSTRUCTION SET (PART

10/31/2016. The LC-3 ISA Has Three Kinds of Opcodes. ECE 120: Introduction to Computing. ADD and AND Have Two Addressing Modes

Introduction to Computers & Programming

Overview of the MIPS Architecture: Part I. CS 161: Lecture 0 1/24/17

MARIE: An Introduction to a Simple Computer

Lecture 4: MIPS Instruction Set

CSC 252: Computer Organization Spring 2018: Lecture 11

CC312: Computer Organization

Instruction : A command to the microprocessor to perform a given task on specified data. Each instruction has two parts

Instruction-set Design Issues: what is the ML instruction format(s) ML instruction Opcode Dest. Operand Source Operand 1...

address ALU the operation opcode ACC Acc memory address

CS3350B Computer Architecture Winter 2015

Computer Systems and Networks. ECPE 170 Jeff Shafer University of the Pacific. MIPS Assembly

Unit 17. Instruction Set Review INSTRUCTION SET OVERVIEW. Historical Instruction Format Options. Instruction Sets Picoblaze Processor

administrivia today start assembly probably won t finish all these slides Assignment 4 due tomorrow any questions?

Computational Optimization ISE 407. Lecture1. Dr. Ted Ralphs

Chapter 10 Computer Design Basics

Chapter 9: High Level Language

BASIC COMPUTER ORGANIZATION. Operating System Concepts 8 th Edition

7. The Virtual Machine II: Flow Control 1

In this lecture, we will look at how storage (or memory) works with processor in a computer system. This is in preparation for the next lecture, in

last time Assembly part 2 / C part 1 condition codes reminder: quiz

Appendix A: Hardware Description Language (HDL) 1

General Purpose Signal Processors

CS 101, Mock Computer Architecture

THE OPTIUM MICROPROCESSOR AN FPGA-BASED IMPLEMENTATION

Appendix A: Hardware Description Language (HDL) 1

Introduction to Digital Logic

CSC 220: Computer Organization Unit 12 CPU programming

CPSC 313, Summer 2013 Final Exam Date: June 24, 2013; Instructor: Mike Feeley

Instruction Set Architecture

Chapter 4. MARIE: An Introduction to a Simple Computer

Transcription:

Machine (Assembly) Language Building a Modern Computer From First Principles www.nand2tetris.org Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 1

Where we are at: Human Thought Abstract design Chapters 9, 12 abstract interface H.L. Language & Operating Sys. Compiler Chapters 10-11 abstract interface Virtual Machine Software hierarchy VM Translator Chapters 7-8 abstract interface Assembly Language Assembler Chapter 6 abstract interface Machine Language Computer Architecture Chapters 4-5 Hardware hierarchy abstract interface Hardware Platform Gate Logic Chapters 1-3 abstract interface Chips & Logic Gates Electrical Engineering Physics Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 2

Machine language Abstraction implementation duality: Machine language ( = instruction set) can be viewed as a programmeroriented abstraction of the hardware platform The hardware platform can be viewed as a physical means for realizing the machine language abstraction Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 3

Machine language Abstraction implementation duality: Machine language ( = instruction set) can be viewed as a programmeroriented abstraction of the hardware platform The hardware platform can be viewed as a physical means for realizing the machine language abstraction Another duality: Binary version: 0001 0001 0010 0011 (machine code) Symbolic version ADD R1, R2, R3 (assembly) Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 4

Machine language Abstraction implementation duality: Machine language ( = instruction set) can be viewed as a programmeroriented abstraction of the hardware platform The hardware platform can be viewed as a physical means for realizing the machine language abstraction Another duality: Binary version ALU combinational Symbolic version Loose definition: Memory state Machine language = an agreed-upon formalism for manipulating a memory using a processor and a set of registers Same spirit but different syntax across different hardware platforms. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 5

Lecture plan Machine languages at a glance The Hack machine language: Symbolic version Binary version Perspective (The assembler will be covered in chapter 6). Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 6

Typical machine language commands (3 types) ALU operations Memory access operations (addressing mode: how to specify operands) Immediate addressing, LDA R1, 67 // R1=67 Direct addressing, LD R1, 67 // R1=M[67] Indirect addressing, LDI R1, R2 // R1=M[R2] Flow control operations Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 7

Typical machine language commands (a small sample) // In what follows R1,R2,R3 are registers, PC is program counter, // and addr is some value. ADD R1,R2,R3 // R1 R2 + R3 ADDI R1,R2,addr // R1 R2 + addr AND R1,R1,R2 // R1 R1 and R2 (bit-wise) JMP addr // PC addr JEQ R1,R2,addr // IF R1 == R2 THEN PC addr ELSE PC++ LOAD R1, addr // R1 RAM[addr] STORE R1, addr // RAM[addr] R1 NOP // Do nothing // Etc. some 50-300 command variants Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 8

The Hack computer A 16-bit machine consisting of the following elements: Data memory: RAM an addressable sequence of registers Instruction memory: ROM an addressable sequence of registers Registers: D, A, M, where M stands for RAM[A] Processing: ALU, capable of computing various functions Program counter: PC, holding an address Control: The ROM is loaded with a sequence of 16-bit instructions, one per memory location, beginning at address 0. Fetch-execute cycle: later Instruction set: Two instructions: A-instruction, C-instruction. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 9

The Hack computer A 16-bit machine consisting of the following elements: reset Computer Screen Keyboard Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 10

The Hack computer A 16-bit machine consisting of the following elements: inm writem Instruction Memory (ROM32K) instruction CPU outm addressm pc Data Memory (Memory) reset Both memory chips are 16-bit wide and have 15-bit address space. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 11

The Hack computer A 16-bit machine consisting of the following elements: ALU output C C C D D decode C C outm instruction Mux A A Mux C A/M ALU C inm M C writem A addressm reset C A PC pc Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 12

The A-instruction @value // A value Where value is either a number or a symbol referring to some number. Why A-instruction? It is impossible to pack both addr and instr into 16 bits. Used for: Entering a constant value ( A = value) Coding example: @17 // A = 17 D = A // D = 17 Selecting a RAM location ( register = RAM[A]) @17 // A = 17 D = M // D = RAM[17] Selecting a ROM location ( PC = A ) @17 // A = 17 JMP // fetch the instruction // stored in ROM[17] Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 13

The C-instruction (first approximation) dest = x + y dest = x - y dest = x dest = 0 dest = 1 dest = -1 x = {A, D, M} y = {A, D, M, 1} dest = {A, D, M, MD, AM, AD, AMD, null} Exercise: Implement the following tasks using Hack commands: Set D to A-1 Set both A and D to A + 1 Set D to 19 Set both A and D to A + D Set RAM[5034] to D - 1 Set RAM[53] to 171 Add 1 to RAM[7], and store the result in D. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 14

The C-instruction (first approximation) Exercise: Implement the following tasks using Hack commands: 1. Set D to A-1 2. Set both A and D to A + 1 3. Set D to 19 4. Set both A and D to A + D 5. Set RAM[5034] to D - 1 6. Set RAM[53] to 171 7. Add 1 to RAM[7], and store the result in D. 1. D = A-1 2. AD=A+1 3. @19 D=A 4. AD=A+D 5. @5034 M=D-1 6. @171 D=A @53 M=D 7. @7 D=M+1 Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 15

The C-instruction (first approximation) dest = x + y dest = x - y dest = x dest = 0 dest = 1 dest = -1 x = {A, D, M} y = {A, D, M, 1} dest = {A, D, M, MD, AM, AD, AMD, null} Symbol table: j 3012 sum 4500 q 3812 arr 20561 (All symbols and values are arbitrary examples) Exercise: Implement the following tasks using Hack commands: sum = 0 j = j + 1 q = sum + 12 j arr[3] = -1 arr[j] = 0 arr[j] = 17 etc. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 16

The C-instruction (first approximation) Exercise: Implement the following tasks using Hack commands: 1. sum = 0 2. j = j + 1 3. q = sum + 12 j 4. arr[3] = -1 5. arr[j] = 0 6. arr[j] = 17 7. etc. 1. @sum M=0 2. @j M=M+1 3. @sum D=M @12 D=D+A @j D=D-M @q M=D 4. @arr D=A @3 A=D+A M=-1 5. @j D=M @arr A=A+D M=0 6. @j D=M @arr D=A+D @ptr M=D @17 D=A @ptr A=M M=D Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 17

Control (focus on the yellow chips only) D register D A register A a-bit ALU address input RAM (selected register) M Mux A/M In the Hack architecture: ROM = instruction memory PC address input ROM (selected register) Instruction Program = sequence of 16-bit numbers, starting at ROM[0] Current instruction = ROM[PC] To select instruction n from the ROM, we set A to n, using the instruction @n Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 18

Coding examples (practice) Exercise: Implement the following tasks using Hack commands: goto 50 if D==0 goto 112 if D<9 goto 507 if RAM[12] > 0 goto 50 if sum>0 goto END Hack commands: A-command: @value // set A to value C-command: Where: dest = comp ; jump // dest = and ;jump // are optional comp = 0, 1, 1, D, A,!D,!A, D, A, D+1, A+1, D 1, A 1, D+A, D A, A D, D&A, D A, M,!M, M,M+1, M 1, D+M, D M, M D, D&M, D M dest = M, D, A, MD, AM, AD, AMD, or null jump = JGT, JEQ, JGE, JLT, JNE, JLE, JMP, or null In the command dest = comp; jump, the jump materialzes if (comp jump 0) is true. For example, in D=D+1,JLT, we jump if D+1 < 0. if x[i]<=0 goto NEXT. Hack convention: True is represented by -1 Symbol table: sum 2200 x 4000 i 6151 END 50 (All symbols and values in are arbitrary examples) False is represented by 0 NEXT 120 Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 19

Coding examples (practice) Exercise: Implement the following tasks using Hack commands: 1. goto 50 2. if D==0 goto 112 3. if D<9 goto 507 4. if RAM[12] > 0 goto 50 5. if sum>0 goto END 6. if x[i]<=0 goto NEXT. 1. @50 0; JMP 2. @112 D; JEQ 3. @9 D=D-A @507 D; JLT 4. @12 D=M @50 D; JGT 5. @sum D=M @END D: JGT 6. @i D=M @x A=A+D D=M @NEXT D; JLE Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 20

IF logic Hack style High level: if condition { code block 1 } else { code block 2 } code block 3 Hack convention: True is represented by -1 False is represented by 0 Hack: D condition @IF_TRUE D;JEQ code block 2 @END 0;JMP (IF_TRUE) code block 1 (END) code block 3 Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 21

WHILE logic Hack style High level: while condition { code block 1 } Code block 2 Hack: (LOOP) D condition @END D;JNE code block 1 @LOOP Hack convention: True is represented by -1 (END) 0;JMP code block 2 False is represented by 0 Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 22

Side note (focus on the yellow chip parts only) D register D A register A a-bit ALU address input RAM (selected register) M Mux A/M In the Hack architecture, the A register addresses both the RAM and the ROM, simultaneously. Therefore: PC address input ROM (selected register) Instruction Command pairs like @addr followed by D=M;someJumpDirective make no sense Best practice: in well-written Hack programs, a C-instruction should contain either a reference to M, or a jump directive, but not both. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 23

Complete program example C language code: // Adds 1+...+100. int i = 1; int sum = 0; while (i <= 100){ sum += i; i++; } Hack assembly convention: Variables: lower-case Labels: upper-case Commands: upper-case Demo CPU emulator Hack assembly code: // Adds 1+...+100. @i // i refers to some RAM location M=1 // i=1 @sum // sum refers to some RAM location M=0 // sum=0 (LOOP) @i D=M // D = i @100 D=D-A // D = i - 100 @END D;JGT // If (i-100) > 0 goto END @i D=M // D = i @sum M=D+M // sum += i @i M=M+1 // i++ @LOOP 0;JMP // Got LOOP (END) @END 0;JMP // Infinite loop Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 24

Symbols in Hack assembly programs Symbols created by Hack programmers and code generators: Label symbols: Used to label destinations of goto commands. Declared by the pseudo command (XXX). This directive defines the symbol XXX to refer to the instruction memory location holding the next command in the program (within the program, XXX is called label ) Variable symbols: Any user-defined symbol xxx appearing in an assembly program that is not defined elsewhere using the (xxx) directive is treated as a variable, and is automatically assigned a unique RAM address, starting at RAM address 16 By convention, Hack programmers use lower-case and upper-case letters for variable names and labels, respectively. Predefined symbols: I/O pointers: The symbols SCREEN and KBD are automatically predefined to refer to RAM addresses 16384 and 24576, respectively (base addresses of the Hack platform s screen and keyboard memory maps) Virtual registers: covered in future lectures. VM control registers: covered in future lectures. Q: Who does all the automatic assignments of symbols to RAM addresses? A: The assembler, which is the program that translates symbolic Hack programs into binary Hack program. As part of the translation process, the symbols are resolved to RAM addresses. (more about this in future lectures) // Typical symbolic // Hack code, meaning // not important @R0 D=M @INFINITE_LOOP D;JLE @counter M=D @SCREEN D=A @addr M=D (LOOP) @addr A=M M=-1 @addr D=M @32 D=D+A @addr M=D @counter MD=M-1 @LOOP D;JGT (INFINITE_LOOP) @INFINITE_LOOP 0;JMP Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 25

Perspective Hack is a simple machine language User friendly syntax: D=D+A instead of ADD D,D,A Hack is a ½-address machine : any operation that needs to operate on the RAM must be specified using two commands: an A-command to address the RAM, and a subsequent C-command to operate on it A Macro-language can be easily developed D=D+M[XXX] => @XXX followed by D=D+M GOTO YYY => @YYY followed by 0; JMP A Hack assembler is needed and will be discusses and developed later in the course. Elements of Computing Systems, Nisan & Schocken, MIT Press, www.nand2tetris.org, Chapter 4: Machine Language slide 26