Basic Concepts: Computer Organization and Assembly Language
Basic Concepts: Computer Organization and Assembly Language
CS4063
Computer Organization and Assembly Language
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 2
Welcome to CS4063
Software Tools
Microsoft Macro Assembler (MASM) version 6.15
Link Libraries provided by Author ([Link] and [Link])
Microsoft Windows debugger
ConTEXT Editor
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 3
Textbook
Kip Irvine: Assembly Language for Intel-Based Computers
4th edition (2003) is now available in the bookstore
5th edition (2007) is coming soon but not available this semester
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 4
Goals and Required Background
Goals: broaden student’s interest and knowledge in …
Basic organization of a computer system
Intel IA-32 processor architecture
How to write assembly language programs
How high-level languages translate into assembly language
Interaction between the assembly language programs, libraries,
the operating system, and the hardware
How interrupts, system calls, and handlers work
How to debug a program at the machine level
Required Background
The student should already be able to program confidently in at
least one high-level programming language, such as Java or C.
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 5
Next …
Assembly-, Machine-, and High-Level Languages
Assembly Language Programming Tools
Programmer’s View of a Computer System
Data Representation
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 6
Some Important Questions to Ask
What is Assembly Language?
Why Learn Assembly Language?
What is Machine Language?
How is Assembly related to Machine Language?
What is an Assembler?
How is Assembly related to High-Level Language?
Is Assembly Language portable?
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 7
A Hierarchy of Languages
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 8
Assembly and Machine Language
Machine language
Native to a processor: executed directly by hardware
Instructions consist of binary code: 1s and 0s
Assembly language
Slightly higher-level language
Readability of instructions is better than machine language
One-to-one correspondence with machine language instructions
Assemblers translate assembly to machine code
Compilers translate high-level programs to machine code
Either directly, or
Indirectly via an assembler
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 9
Compiler and Assembler
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 10
Translating Languages
English: D is assigned the sum of A times B plus 10.
High-Level Language: D = A * B + 10
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 11
Advantages of High-Level Languages
Program development is faster
High-level statements: fewer instructions to code
Program maintenance is easier
For the same above reasons
Programs are portable
Contain few machine-dependent details
Can be used with little or no modifications on different machines
Compiler translates to the target machine language
However, Assembly language programs are not portable
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 12
Why Learn Assembly Language?
Two main reasons:
Accessibility to system hardware
Space and time efficiency
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 13
Assembly vs High-Level Languages
Some representative types of applications:
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 14
Next …
Assembly-, Machine-, and High-Level Languages
Assembly Language Programming Tools
Programmer’s View of a Computer System
Data Representation
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 15
Assembler
Software tools are needed for editing, assembling,
linking, and debugging assembly language programs
An assembler is a program that converts source-code
programs written in assembly language into object files
in machine language
Popular assemblers have emerged over the years for the
Intel family of processors. These include …
TASM (Turbo Assembler from Borland)
NASM (Netwide Assembler for both Windows and Linux), and
GNU assembler distributed by the free software foundation
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 17
Debugger
Allows you to trace the execution of a program
Allows you to view code, memory, registers, etc.
You will use the 32-bit Windows debugger
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 18
Editor
Allows you to create assembly language source files
Some editors provide syntax highlighting features and
can be customized as a programming environment
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 19
Next …
Assembly-, Machine-, and High-Level Languages
Assembly Language Programming Tools
Programmer’s View of a Computer System
Data Representation
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 20
Programmer’s View of a Computer System
Operating System
Level 3
Instruction Set
Architecture Level 2
Microarchitecture Level 1
Each level
Digital Logic hides the
Level 0 details of the
level below it
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 21
Programmer's View – 2
Application Programs (Level 5)
Written in high-level programming languages
Such as Java, C++, Pascal, Visual Basic . . .
Programs compile into assembly language level (Level 4)
Assembly Language (Level 4)
Instruction mnemonics are used
Have one-to-one correspondence to machine language
Calls functions written at the operating system level (Level 3)
Programs are translated into machine language (Level 2)
Operating System (Level 3)
Provides services to level 4 and 5 programs
Translated to run at the machine instruction level (Level 2)
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 22
Programmer's View – 3
Instruction Set Architecture (Level 2)
Specifies how a processor functions
Machine instructions, registers, and memory are exposed
Machine language is executed by Level 1 (microarchitecture)
Microarchitecture (Level 1)
Controls the execution of machine instructions (Level 2)
Implemented by digital logic (Level 0)
Digital Logic (Level 0)
Implements the microarchitecture
Uses digital logic gates
Logic gates are implemented using transistors
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 23
Next …
Assembly-, Machine-, and High-Level Languages
Assembly Language Programming Tools
Programmer’s View of a Computer System
Data Representation
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 24
Data Representation
Binary Numbers
Hexadecimal Numbers
Base Conversions
Integer Storage Sizes
Binary and Hexadecimal Addition
Signed Integers and 2's Complement Notation
Binary and Hexadecimal subtraction
Carry and Overflow
Character Storage
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 25
Binary Numbers
MSB LSB
1011001010011100
15 0
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 26
Binary Numbers
Each digit (bit) is either 1 or 0
Each bit represents a power of 2:
Every binary
number is a
sum of powers
of 2
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 27
Converting Binary to Decimal
Weighted positional notation shows how to calculate the
decimal value of each binary bit:
Decimal = (dn-1 2n-1) (dn-2 2n-2) ... (d1 21) (d0 20)
d = binary digit
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 28
Convert Unsigned Decimal to Binary
Repeatedly divide the decimal integer by 2. Each
remainder is a binary digit in the translated value:
stop when
37 = 100101 quotient is zero
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 29
Hexadecimal Integers
Binary values are represented in hexadecimal.
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 30
Converting Binary to Hexadecimal
• Each hexadecimal digit corresponds to 4 binary bits.
• Example: Translate the binary integer
000101101010011110010100 to hexadecimal:
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 31
Converting Hexadecimal to Decimal
Multiply each digit by its corresponding power of 16:
Examples:
Hex 1234 = (1 163) + (2 162) + (3 161) + (4 160) =
Decimal 4,660
Decimal 15,268
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 32
Converting Decimal to Hexadecimal
Repeatedly divide the decimal integer by 16. Each
remainder is a hex digit in the translated value:
stop when
quotient is zero
Standard sizes:
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 34
Binary Addition
Start with the least significant bit (rightmost bit)
Add each pair of bits
Include the carry in the addition, if present
carry: 1
0 0 0 0 0 1 0 0 (4)
+ 0 0 0 0 0 1 1 1 (7)
0 0 0 0 1 0 1 1 (11)
bit position: 7 6 5 4 3 2 1 0
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 35
Hexadecimal Addition
Divide the sum of two digits by the number base (16). The quotient becomes
the carry value, and the remainder is the sum digit.
1 1
36 28 28 6A
42 45 58 4B
78 6D 80 B5
21 / 16 = 1, remainder 5
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 36
Signed Integers
Several ways to represent a signed number
Sign-Magnitude
Biased
1's complement
2's complement
Divide the range of values into 2 equal parts
First part corresponds to the positive numbers (≥ 0)
Second part correspond to the negative numbers (< 0)
Focus will be on the 2's complement representation
Has many advantages over other representations
Used widely in processors to represent signed integers
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 37
Two's Complement Representation
Positive numbers 8-bit Binary Unsigned Signed
value value value
Signed value = Unsigned value
00000000 0 0
Negative numbers 00000001 1 +1
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 39
Sign Bit
Highest bit indicates the sign. 1 = negative, 0 = positive
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 41
Two's Complement of a Hexadecimal
To form the two's complement of a hexadecimal
Subtract each hexadecimal digit from 15
Add 1
Examples:
2's complement of 6A3D = 95C2 + 1 = 95C3
2's complement of 92F0 = 6D0F + 1 = 6D10
2's complement of FFFF = 0000 + 1 = 0001
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 42
Binary Subtraction
When subtracting A – B, convert B to its 2's complement
Add A to (–B)
00001100 00001100
– +
00000010 11111110 (2's complement)
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 43
Hexadecimal Subtraction
When a borrow is required from the digit to the left,
add 16 (decimal) to the current digit's value
16 + 5 = 21
-1 11
C675 C675
- +
A247 5DB9 (2's complement)
242E 242E (same result)
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 44
Ranges of Signed Integers
The unsigned range is divided into two signed ranges for positive
and negative numbers
Practice: What is the range of signed values that may be stored in 20 bits?
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 45
Carry and Overflow
Carry is important when …
Adding or subtracting unsigned integers
Indicates that the unsigned sum is out of range
Either < 0 or >maximum unsigned n-bit value
Overflow is important when …
Adding or subtracting signed integers
Indicates that the signed sum is out of range
Overflow occurs when
Adding two positive numbers and the sum is negative
Adding two negative numbers and the sum is positive
Can happen because of the fixed number of sum bits
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 46
Carry and Overflow Examples
We can have carry without overflow and vice-versa
Four cases are possible
1 1 1 1 1 1
0 0 0 0 1 1 1 1 15 0 0 0 0 1 1 1 1 15
+ +
0 0 0 0 1 0 0 0 8 1 1 1 1 1 0 0 0 245 (-8)
0 0 0 1 0 1 1 1 23 0 0 0 0 0 1 1 1 7
1 1 1 1
0 1 0 0 1 1 1 1 79 1 1 0 1 1 0 1 0 218 (-38)
+ +
0 1 0 0 0 0 0 0 64 1 0 0 1 1 1 0 1 157 (-99)
1 0 0 0 1 1 1 1 143 0 1 1 1 0 1 1 1 119
(-113)
Carry = 0 Overflow = 1 Carry = 1 Overflow = 1
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 47
Character Storage
Character sets
Standard ASCII: 7-bit character codes (0 – 127)
Extended ASCII: 8-bit character codes (0 – 255)
Unicode: 16-bit character codes (0 – 65,535)
Unicode standard represents a universal character set
Defines codes for characters used in all major languages
Used in Windows-XP: each character is encoded as 16 bits
UTF-8: variable-length encoding used in HTML
Encodes all Unicode characters
Uses 1 byte for ASCII, but multiple bytes for other characters
Null-terminated String
Array of characters followed by a NULL character
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 48
Printable ASCII Codes
0 1 2 3 4 5 6 7 8 9 A B C D E F
2 space ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ DEL
Examples:
ASCII code for space character = 20 (hex) = 32 (decimal)
ASCII code for 'L' = 4C (hex) = 76 (decimal)
ASCII code for 'a' = 61 (hex) = 97 (decimal)
Basic Concepts COE 205 – Computer Organization and Assembly Language – KFUPM
© Muhamed Mudawar – slide 49
Control Characters
The first 32 characters of ASCII table are used for control
Control character codes = 00 to 1F (hex)
Not shown in previous slide
Examples of Control Characters
Character 0 is the NULL character used to terminate a string
Character 9 is the Horizontal Tab (HT) character
Character 0A (hex) = 10 (decimal) is the Line Feed (LF)
Character 0D (hex) = 13 (decimal) is the Carriage Return (CR)
The LF and CR characters are used together
They advance the cursor to the beginning of next line