... Executing conditional instructions

Similar documents
ARM Assembly Language. Programming

INTRODUCTION TO BRANCHING. There are two forms of unconditional branching in the MC68000.

EE 3170 Microcontroller Applications

Condition Code Register. Microcomputer Architecture and Interfacing Colorado School of Mines Professor William Hoff

Assembly Language. Operand Size. The internal registers. Computers operate on chunks of data composed of a particular number of bits.

2) [ 2 marks] Both of the following statements cause the value $0300 to be stored in location $1000, but at different times. Explain the difference.

10-1 C D Pearson Education, Inc. M. Morris Mano & Charles R. Kime LOGIC AND COMPUTER DESIGN FUNDAMENTALS, 4e

Lecture 6 Assembly Programming: Branch & Iteration

von Neumann Architecture Basic Computer System Early Computers Microprocessor Reading Assignment An Introduction to Computer Architecture

Basic Computer System. von Neumann Architecture. Reading Assignment. An Introduction to Computer Architecture. EEL 4744C: Microprocessor Applications

CprE 288 Introduction to Embedded Systems ARM Assembly Programming: Translating C Control Statements and Function Calls

Lecture #3 Microcontroller Instruction Set Embedded System Engineering Philip Koopman Wednesday, 20-Jan-2015

Motorola 6809 and Hitachi 6309 Programmer s Reference

Introduction to Embedded Microcomputer Systems Lecture 8.1. Computers in the future may weigh no more than 1.5 tons Popular Science, 1949

Microprocessor and Assembly Language Week-5. System Programming, BCS 6th, IBMS (2017)

Computer Organization II CMSC 3833 Lecture 33

The Assembly Language of the Boz 5

Unsigned and signed integer numbers

Programming the Motorola MC68HC11 Microcontroller

TABLE 9-1. Symbolic Convention for Addressing Modes. Register indirect LDA (R1) ACC M[ R1] Refers to Figure 9-4. Addressing mode. Symbolic convention

H8/500 Series Programming Manual

OSIAC Read OSIAC 5362 posted on the course website

ARM Instruction Set Architecture. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

EE 3170 Microcontroller Applications

2.2 THE MARIE Instruction Set Architecture

Architecture. Digital Computer Design

COMPUTER ORGANIZATION AND ARCHITECTURE

H8/300L Series Programming Manual

(2) Part a) Registers (e.g., R0, R1, themselves). other Registers do not exists at any address in the memory map

Reconfigurable Computing Systems ( L) Fall 2012 Tiny Register Machine (TRM)

EECE416 :Microcomputer Fundamentals and Design Instruction Sets and Groups

Multiplies the word length <ea> times the least significant word in Dn. The result is a long word.

COMP MIPS instructions 2 Feb. 8, f = g + h i;

Outline. ARM Introduction & Instruction Set Architecture. ARM History. ARM s visible registers

LAB 1: MC68000 CPU PROGRAMMING DATA TRANSFER INSTRUCTIONS

Topic Notes: MIPS Instruction Set Architecture

REGISTER TRANSFER AND MICROOPERATIONS

Flow Control In Assembly

68000 Architecture. To review the the architecture of the microprocessor.

III. Flags of the Processor Staus Register

68000 Architecture, Data Types and Addressing Modes. 9/20/6 Lecture 2 - Prog Model 1

Programming. A. Assembly Language Programming. A.1 Machine Code. Machine Code Example: Motorola ADD

Wednesday, February 4, Chapter 4

NET3001. Advanced Assembly

Exam 1 Fun Times. EE319K Fall 2012 Exam 1A Modified Page 1. Date: October 5, Printed Name:

STEVEN R. BAGLEY ARM: PROCESSING DATA

EE319K Fall 2013 Exam 1B Modified Page 1. Exam 1. Date: October 3, 2013

Exam 1. Date: Oct 4, 2018

COMPUTER ARCHITECTURE AND ORGANIZATION Register Transfer and Micro-operations 1. Introduction A digital system is an interconnection of digital

COSC 243. Instruction Sets And Addressing Modes. Lecture 7&8 Instruction Sets and Addressing Modes. COSC 243 (Computer Architecture)

CprE 288 Introduction to Embedded Systems Course Review for Exam 3. Instructors: Dr. Phillip Jones

Cortex M3 Programming

RISC-V Assembly and Binary Notation

instruction 1 Fri Oct 13 13:05:

Introduction to Computers - Chapter 4

Chapter 4. MARIE: An Introduction to a Simple Computer. Chapter 4 Objectives. 4.1 Introduction. 4.2 CPU Basics

ECE331 Handout 3- ASM Instructions, Address Modes and Directives

Table 1: Mnemonics Operations Dictionary. Add Accumulators Add B to Y. Add with carry to B. Add Memory to B. Add 16-bit to D And B with Memory

Levels of Programming. Registers

For Example: P: LOAD 5 R0. The command given here is used to load a data 5 to the register R0.

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

68000 Instruction Set (2) 9/20/6 Lecture 3 - Instruction Set - Al 1

EE 3170 Microcontroller Applications

UNIT-II. Part-2: CENTRAL PROCESSING UNIT

Module 5 - CPU Design

SCRAM Introduction. Philipp Koehn. 19 February 2018

CSC 220: Computer Organization Unit 12 CPU programming

Processor design - MIPS

Course Schedule. CS 221 Computer Architecture. Week 3: Plan. I. Hexadecimals and Character Representations. Hexadecimal Representation

Tutorial 1 Microcomputer Fundamentals

COS 140: Foundations of Computer Science

11. A Computing Machine

Overview COMP Microprocessors and Embedded Systems. Lectures 14: Making Decisions in C/Assembly Language II

CHW 261: Logic Design

This simulated machine consists of four registers that will be represented in your software with four global variables.

CS401 - Computer Architecture and Assembly Language Programming Glossary By

0b) [2] Can you name 2 people form technical support services (stockroom)?

Unsigned Binary Integers

Unsigned Binary Integers

COSC 243. Computer Architecture 1. COSC 243 (Computer Architecture) Lecture 6 - Computer Architecture 1 1

Chapter 04: Instruction Sets and the Processor organizations. Lesson 08: Processor Instructions - Part 1

INSTRUCTION SET AND EXECUTION

CHAPTER 4: Register Transfer Language and Microoperations

Microcomputer Architecture and Programming

Chapter 4. MARIE: An Introduction to a Simple Computer

EE319K Exam 1 Summer 2014 Page 1. Exam 1. Date: July 9, Printed Name:

Lecture-12 INTERNAL ARCHITECTURE OF INTEL 8085: The Functional Block Diagram Of 8085 Is Shown In Fig 16.

The MARIE Architecture

SIGNED AND UNSIGNED SYSTEMS

Writing ARM Assembly. Steven R. Bagley

VARDHAMAN COLLEGE OF ENGINEERING (AUTONOMOUS) Shamshabad, Hyderabad

Regarding the change of names mentioned in the document, such as Mitsubishi Electric and Mitsubishi XX, to Renesas Technology Corp.

SISTEMI EMBEDDED. Basic Concepts about Computers. Federico Baronti Last version:

Department of Computer and Mathematical Sciences. Lab 4: Introduction to MARIE

Wednesday, September 13, Chapter 4

Overview. Introduction to the MIPS ISA. MIPS ISA Overview. Overview (2)

CS 101, Mock Computer Architecture

STRUCTURE OF DESKTOP COMPUTERS

The CPU and Memory. How does a computer work? How does a computer interact with data? How are instructions performed? Recall schematic diagram:

Basic Von Neumann Designs

Transcription:

1 2 Executing conditional instructions Our design to this point has been the SISD (single instruction single data) architecture This is fine if we wish to execute in a purely sequential mode We now wish to describe a CPU that can execute conditional branches or PC MAR Memory address register jumps This will allow our computer to process such familiar statements as the if conditional then statement-block else alternate statement-block We add the following to our design Incrementer IR Op-code Address Adress Memory Data MBR A Conditional Code Register (or PSR processor status register) Clock Control unit A path between the and Control Unit A path between the address field of the instruction register and the program counter Control signals Arithmetic logic unit (ALU) Our modified CPU looks like : Program Control Paths Condition Code Register Word in indicates if last operation gave zero or a negative result or if a carry was generated 3 4 Some examples of 8-bit addition and the Condition Code Register: The looks to the A LU after each instruction is executed When a conditional branch instruction is encountered the 's current state is looked at and the Control Unit forces either the next instruction in series or a branch to another instruction somewhere in the program Bits in the are updated after each arithmetic or logic operation: Operand 1 Operand 2 Result status bits 00000011 + 00000100 = 00000111 C=0, Z=0, N=0,V=0 11111111 + 00000001 = 00000000 C=1, Z=1, N=0,V=0 01100110 + 00110010 = 10011000 C=0, Z=0, N=1,V=1 11001001 + 10100000 = 01101001 C=1, Z=0, N=0,V=1 C= Carry Set if a carry was generated by the last operation This is the carry-out bit in the carry flip-flop (pg 174) Z=Zero Set if the last operation generated a zero result N=N egative Set if the last operation generated a negative result in 2's complement V=Overflow Set if the last operation resulted in an arithmetic overflow (This can be detected, for instance, in addition if the sign bit of the result is differen t from the sign bit of both operators) The carry bit can be thought of as a 1 bit extension of the data register When the ALU performs an arithmetic operation the result goes to the data register and the carry or borrow is retained in the carry -bit of the With shifts right or left by one bit, a bit falls of the edge, the bit is transferred to the carry -bit of the At times we perform operations which will update the even though the update has no physical meaning Suppose we add the ASCII code for 'A' (65 10 ) which is %01000001 and the ASCII code for 'D' (68 10 ) which is %01000100 we get %10000101 and the negative bit gets set, N=1 Clearly this information is meaningless in context of the operation The control unit is connected to the Condition Code Register and the address field of the Instruction Register has a path back to the Program Counter, allowing modification of the contents of the Program Counter The conditional branch instructions can test a bit (or several bits) to see if they are set If not the next instruction is obtained in the normal way If the bit or bits are set the next instruction can be obtained using the address in Instruction Register We call the address specified by the branch instruction the target address

5 6 Some Typical Conditional Branch Instructions: Mnemonic Branch Condition BCC Branch on carry clear C=0 BCS Branch on carry set C=1 BEQ Branch on zero result Z=1 BNE Branch on non-zero result Z=0 BMI Branch on minus result N=1 BPL Branch on positive N=0 result BVC Branch on overflow clear V=0 BVS Branch on overflow set V=1 BGE Branch on greater than N V + NV = 1 or equal to BGT Branch on greater than NV Z + NVZ = 1 BHI Branch if higher than C Z = 1 Used unsigned arithmetic BLE Branch if less than Z + NV + NV = 1 BLS Branch if lower than or the same C + Z = 1 Used unsigned arithmetic Example: BCC Branch on Carry Clear : This does a jump to the target address if the carry bit in the Condition Code Register is 0 The corresponding Register Transfer Language (RTL): BCC adrs: IF [C]=0 THEN [PC] [IR(adrs)] BEQ Branch on equal (zero result): This does a jump to the target address if the Z bit in the is 1 RTL: BEQ adrs: IF [Z]=1 THEN [PC] [IR(adrs)] This might appear in code as SUB x, D0 BEQ Last Last subtract the contents of x from D0 If result=0 branch to 'Last' otherwise continue target address of branch We need one additional modification to our CPU to allow us to deal with literal operands Indeed the modification produces a CPU capable of executing any computer program We need an additional data path between the operand field of the IR, the data register and the ALU (next slide) Until now the operands for instructions such as ADD have been addresses At times we want to have an actual value as an operand rather than an address X= Y+ 8 as opposed to X=Y+Z If we wanted to add 8 to D0 we could always store the value 8 at some memory location, say 105 and then ADD 105, D0 An alternate solution is to ADD #8, D0 where #8 stands for the actual value (literal) and ADD #<literal>, <destination> ADD <literal>, <destination> are represented by different op-codes RTL: [D0] [D0]+8 7 8 The added data path: PC Incrementer MAR Memory address register Adress Memory Data We now will describe a simple assembly language program on the computer we have been designing Suppose the one-address instruction set is as follows: Op-code Mnemonic Action 00 M MOVE M,D0 Load D0 with the contents of location M 01 M Move D0,M Store contents of D0 in M IR Op-code Operand MBR 02 M IN M,D0 Input data from devive number M into D0 03 M OUT D0,M Output the contents of D0 to device number M 04 M ADD M,D0 Add the contents of M to D0 Literal to ALU 05 M SUB M,D0 Subtract the contents of M from D0 Clock Control unit Control signals Literal to D0 Arithmetic logic unit (ALU) 06 M AND M,D0 Logical AND of contents of M with D0 07 M OR M,D0 Logical OR of contents of M with D0 08 NEG D0 Complement contents of D0 09 ASL D0 Shift D0 one place left 0A ASR Shift D0 one place right Condition Code Register 0B M CMP M,D0 Compare contents of M with contents of D0 0C M MOVE #M,D0 Put the number M into D0 Additional Data Paths 0D N BEQ N Branch i f Z-bit set to location N 0E N BNE N Branch if Z-bit clear to location N OF N BCC N Branch if C-bit clear to location N 10 N BCS N Branch if C-bit set to location N 11 N BRA N Unconditional branch to location N 12 STOP Stop Note: We have not added IN and OUT data paths to our CPU yet

9 10 We also will assume the keyboard is device number 0 and the monitor is device 1 We are also assuming these devices send and receive numbers, when reality they probably deal with ASCII-encoded data The program we wish to write is as follows: Read a series of numbers from the keyboard that are terminated by a zero, and add them together, multiply the result by 10 and print the answer on the display Flow charts used to be the norm for describing your programs before you started coding They are excellent for describing simple algorithms, however, for complex projects they often confuse the structure one is describing They also are not easily modifiable When starting an assembly language program it is a good idea to code the problem first in pseudocode or in some high level language such as C A flow chart representing this might look like: Start Note: It is the norm to describe algorithms (which are independent of language) in psuedocode form T:=T+N T:=0 Read N Is N=0? T:=T*10 Print N The C version of our program: #include <stdioh> void main(void) { int T=0, N; scanf("%i",&n); while (N!=0) { T=T+N; scanf("%i", &N); } T=T*10; printf("%i",t); return; } End 11 Pseudocode is an informal notation allowing the user to express algorithms in plain English (insert your favorite language here) using standard constructs found in structured programming A sample of someones pseudocode for the same program: Module sum_times_ten Clear Total Repeat Get number Total:=Total +number Until number =0 Total:=Total*10 Print Total End sum_times_ten We encounter a minor problem when converting to assembly language, there is no command for direct multiplication We recall from our knowledge of the representation of integers that if we shift our its left it is equivalent to multiplying by 2 To calculate 10 T we observe 10 T = 8T +2T = 2 2 2 T +2 T =2 (2 2 T+T) 12 Our Assembly Language Program: Line # Labels Instructions Comments 1 NAM EXAMPLE 2 ORG $20 Data origin $20 (32 decimal) 3 TOTAL DS 1 Reserve a word of storage for TOTAL 4 ORG 0 Origin of program 5 MOVE #0, D0 [D0] 0 6 MOVE D0,TOTAL [TOTAL] [D0] 7 REPEAT IN 0,D0 [D0] Input 8 BEQ MULT If last result 0 branch to MULT 9 ADD TOTAL,D0 [D0] [D0]+[TOTAL] 10 MOVE D0,TOTAL [TOTAL] [DO] 11 BRA REPEAT [PC] REPEAT 12 MULT MOVE TOTAL,D0 [D0] [TOTAL] 13 ASL D0 [D0] [D0]*2 14 ASL D0 [D0] [D0]*2 15 ADD TOTAL,D0 [D0] [D0]+[TOTAL] 16 ASL DO [D0] [D0]*2 17 OUT D0,1 Output [D0] 18 STOP 19 END

13 The first column is not part of the assembly language program, it is only for our reference The second column represents the label field Labels are markers that may be referred to by other assembly language statements When the assembler translates the code into machine language references to these labels are replaced by addresses of the lines they reference The third column holds assembler directives an assembly instruction code The fourth column is where our comments go They will be ignored by the assembler The instruction ASL D0 shifts the word in the D0 one unit left The most significant bit gets copied to the C bit of the Condition Code Register The least significant bit is occupied by zero Now that the program has been assembled and is in memory it is ready for execution MSB C A memory Map of our program might take the form: D0 LSB 0 14 In the third column we see some mnemonics that are not part of our instruction set NAM, ORG,DS these are the assembler directives They do not get translated into executable code NAM names the program ORG sets the beginning or origin to $20 (decimal 32) It was a guesstimate that our code would fit in addresses 1-19 and data could be put from location $20 onward DS, define storage, reserves 1 word for TOTAL and binds it to the symbolic name The C equivalent: int x ; x DS 1 Address 0 1 2 3 4 5 6 7 8 9 A 0C00 0120 0200 0D07 0420 0120 1102 0020 09XX 09XX 0420 Start of program BEQ MULT 0D07 Address of MULT is 07 No operand field needed END tells the assembler the end of the code has been reached 20 Recall from our instruction set table 0D N BEQ N Branch if Z-bit set to location N 15 16 The architecture of a typical high-performance CPU 1970's - the 8 bit microprocessor with few internal registers 1980's - the 16/32 bit microprocessor multiple internal registers 1990's - Concern was with speed Memory address register We wish to look at a model for a modern microprocessor The model we look at will have multiple d ata registers, multiple address registers It will still have the same basic registers as the more primitive CPU previously discussed It will also contain three internal buses to enable output from two registers to be fed to the ALU The output from the ALU can be fed to any of the data or address registers The set up will allow for operations of the form R 3 = f(r 1,R 2) where R1,R2 and R3 are any three registers and f ( ) is an operation performed by the ALU Eight address registers Address register A0 Address register A1 Address register A7 Eight data registers Data register D1 Data register D7 Arithmetic Logic Unit ALU Structure of CPU with multiple address and data registers

17 18 Now that we have added 16 user-accessible registers, we will require a more complex instruction format We need a two-address instruction format requiring three fields: op-code, operand address, and register address Sampling of Mototola's 68000 microprocessor instructions Mnemonic Opreartion ADD address,di [Di] [Di] +[M(address)] ASL #number,di Shift [Di] left by <number >bits ASR #number,di Shift [Di] right by <number >bits DIVU address,di [Di] [Di]/[M(address)] MULU address,di [Di] [Di]*[M(address)] NEG address [M(address)] -[M(address)] AND address,di [Di] [Di] [M(address)] OR address,di [Di] [Di]+[M(address)] NOT address [M(address )] [M(address )] SUB address,di [Di] [Di]-[M(address)] TST address [M(address)]- 0 CMP address,di [Di]-[M(address)] EXG Ri,Rj [Ri] [Rj], [Rj] [Ri] MOVE address,di [Di] [M(address)] MOVE Di,address [M(address)] [Di] MOVE #data,di [Di] data MOVE #data,address [M(address)] data LEA address,ai [Ai] address BRA address [PC] address BCC address IF C=0 [PC] address Data Registers of the 68000 8 data registers each 32 bits wide You can operate on the whole register, 32 bits : a longword or on the low-order 16 bits : a word or on the low-order 8 bits: a byte 32 bits Longword d 15 Word d 7 Byte Structure of 68000's data registers To indicate you wish to operate with bytes you append a B to the mnemonic : ADDB D0,D1 To indicate you wish to operate with words you append a W to the mnemonic : ADDW D0,D1 To indicate you wish to operate with longwords you append a L to the mnemonic : ADDL D0,D1 If you don't specify W is the default 19 One of the advantages of having multiple data registers is that frequently used data can be stored on-chip making access extremely efficient (and fast) Another major difference between the original simple CPU and this new version is the addition of the eight address registers These registers contain the addresses of operands to be accessed in main memory These registers are convenient for working with data structures such as arrays, lists, tales and vectors Typical usage: MOVEB (A0),D0 RTL: [D0] [D0]+[M([A0])] How we view it: 0FFE A0 1000 D0 32 32 0FFF 1000 1001 1002 1003 1004 The location pointed to by A0 Notice we use parentheses to indicate this is the address of the operand This addressing mode is called address register indirect addressing