Computer Organization and Assembly
Languages
with slides by Kip Irvine
Prerequisites
• Programming experience with some high-level l
anguage such C, C ++,Java …
Books
Textbook
Assembly Language for Intel-Based Com
puters, 4th, 5th, 6th Edition, Kip Irvine
Reference
The Art of Assembly Language, Randy
Hyde
Grading (subject to change)
• Assignments/Quizzez (20%)
• Class participation (10%)
• Midterm exam (30%)
• Final project (40%)
Why learning assembly?
• It is required.
• It is foundation for computer architecture and c
ompilers.
• At times, you do need to write assembly code.
“I really don’t think that you can write a book for
serious computer programmers unless you are
able to discuss low-level details.”
Donald Knuth
Why programming in assembly?
• It is all about lack of smart compilers
• Faster code, compiler is not good enough
• Smaller code , compiler is not good enough, e.
g. mobile devices, embedded devices, also Smal
ler code → better cache performance → faster
code
• Unusual architecture , there isn’t even a compil
er or compiler quality is bad, eg GPU, DSP chip
s, even MMX.
Syllabus (topics we might cover)
• IA-32 Processor Architecture
• Assembly Language Fundamentals
• Data Transfers, Addressing, and Arithmetic
• Procedures
• Conditional Processing
• Integer Arithmetic
• Advanced Procedures
• Strings and Arrays
• Structures and Macros
What you will learn
• Basic principle of computer architecture
• IA-32 modes and memory management
• Assembly basics
• How high-level language is translated to assemb
ly
• How to communicate with OS
Chapter.1 Overview
• Virtual Machine Concept
• Data Representation
• Boolean Operations
Assembly programming
mov eax, Y
add eax, 4 editor
mov ebx, 3
imul ebx
mov X, eax .asm
assembler debugger
.obj
.exe
linker loader
Virtual machines
Abstractions for computers
High-Level Language Level 5
Assembly Language Level 4
Operating System
Level 3
Instruction Set
Architecture Level 2
Microarchitecture Level 1
Digital Logic Level 0
High-Level Language
• Level 5
• Application-oriented languages
• Programs compile into assembly langua
ge (Level 4)
X:=(Y+4)*3
Assembly Language
• Level 4
• Instruction mnemonics that have a one-to-one
correspondence to machine language
• Calls functions written at the operating syste
m level (Level 3)
• Programs are translated into machine languag
e (Level 2)
mov eax, Y
add eax, 4
mov ebx, 3
imul ebx
mov X, eax
Operating System
• Level 3
• Provides services
• Programs translated and run at the instruction
set architecture level (Level 2)
Instruction Set Architecture
• Level 2
• Also known as conventional machine language
• Executed by Level 1 program (microarchitectur
e, Level 1)
Microarchitecture
• Level 1
• Interprets conventional machine instructions (L
evel 2)
• Executed by digital hardware (Level 0)
Digital Logic
• Level 0
• CPU, constructed from digital logic gates
• System bus
• Memory
Data representation
• Computer is a construction of digital circuits wi
th two states: on and off
• You need to have the ability to translate betwe
en different representations to examine the con
tent of the machine
• Common number systems: binary, octal, decima
l and hexadecimal
Binary numbers
• Digits are 1 and 0
(a binary digit is called a bit)
1 = true
0 = false
• MSB –most significant bit
• LSB –least significant bit
MSB LSB
• Bit numbering:
1011001010011100
15 0
• A bit string could have different interpretations
Unsigned binary integers
• Each digit (bit) is either 1 or 0
• Each bit represents a power of 2: 1 1 1 1 1 1 1 1
27 26 25 24 23 22 21 20
Every binary
number is a
sum of powers
of 2
Translating Binary to Decimal
Weighted positional notation shows how to calcu
late the decimal value of each binary bit:
dec = (Dn-1 2n-1) + (Dn-2 2n-2) + ... + (D1 21) + (D0
20)
D = binary digit
binary 00001001 = decimal 9:
(1 23) + (1 20) = 9
Translating Unsigned Decimal to Binary
• Repeatedly divide the decimal integer by 2. Each remai
nder is a binary digit in the translated value:
37 = 100101
Binary addition
• Starting with the LSB, add each pair of digits, in
clude the carry 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
Integer storage sizes
byte 8
Standard sizes: word 16
doubleword 32
quadword 64
Practice: What is the largest unsigned integer that may be stored in 20 bits?
Large measurements
• Kilobyte (KB), 210 bytes
• Megabyte (MB), 220 bytes
• Gigabyte (GB), 230 bytes
• Terabyte (TB), 240 bytes
• Petabyte
• Exabyte
• Zettabyte
• Yottabyte
Hexadecimal integers
All values in memory are stored in binary. Because long
binary numbers are hard to read, we use hexadecimal
representation.
Translating binary to hexadecimal
• Each hexadecimal digit corresponds to 4 binary
bits.
• Example: Translate the binary integer
000101101010011110010100 to hexadecimal:
Converting hexadecimal to decimal
• Multiply each digit by its corresponding p
ower of 16:
dec = (D3 163) + (D2 162) + (D1 161) + (D0 160)
• Hex 1234 equals (1 163) + (2 162) + (3 161) + (4
160), or decimal 4,660.
• Hex 3BA4 equals (3 163) + (11 * 162) + (10 161)
+ (4 160), or decimal 15,268.
Powers of 16
Used when calculating hexadecimal values up to
8 digits long:
Converting decimal to hexadecimal
decimal 422 = 1A6 hexadecimal
Hexadecimal addition
Divide the sum of two digits by the number base
(16). The quotient becomes the carry value, and t
he remainder is the sum digit.
1 1
36 28 28 6A
42 45 58 4B
78 6D80 B5
Important skill: Programmers frequently add and subtract the
addresses of variables and instructions.
Hexadecimal subtraction
When a borrow is required from the digit to the l
eft, add 10h to the current digit's value:
-1
C675
A247
24 2E
Practice: The address of var1 is 00400020. The address of the next
variable after var1 is 0040006A. How many bytes are used by var1?
Signed integers
The highest bit indicates the sign. 1 = negative,
0 = positive
sign bit
1 1 1 1 0 1 1 0
Negative
0 0 0 0 1 0 1 0 Positive
If the highest digit of a hexadecmal integer is > 7, the value is
negative. Examples: 8A, C5, A2, 9D
Two's complement notation
Steps:
– Complement (reverse) each bit
– Add 1
Note that 00000001 + 11111111 = 00000000
Binary subtraction
• When subtracting A – B, convert B to its two's c
omplement
• Add A to (–B)
1100 1100
– 0011 1101
1001
Advantages for 2’s complement:
• No two 0’s
• Sign bit
• Remove the need for separate circuits for add
and sub
Ranges of signed integers
The highest bit is reserved for the sign. This limits
the range:
Character
• Character sets
– Standard ASCII (0 – 127)
– Extended ASCII (0 – 255)
– ANSI (0 – 255)
– Unicode (0 – 65,535)
• Null-terminated String
– Array of characters followed by a null byte
• Using the ASCII table
– back inside cover of book
Boolean algebra
• Boolean expressions created from:
– NOT, AND, OR
NOT
• Inverts (reverses) a boolean value
• Truth table for Boolean NOT operator:
Digital gate diagram for NOT:
NOT
AND
• Truth if both are true
• Truth table for Boolean AND operator:
Digital gate diagram for AND:
AND
OR
• True if either is true
• Truth table for Boolean OR operator:
Digital gate diagram for OR:
OR
Operator precedence
• NOT > AND > OR
• Examples showing the order of operations:
• Use parentheses to avoid ambiguity
Truth Tables (1 of 3)
• A Boolean function has one or more Boolean in
puts, and returns a single Boolean output.
• A truth table shows all the inputs and outputs
of a Boolean function
Example: X Y
Truth Tables (2 of 3)
• Example: X Y
S
Truth Tables (3 of 3)
X
mux Z
• Example: (Y S) (X S) Y
Two-input multiplexer