chapter2part4
Download
Report
Transcript chapter2part4
CS/COE0447
Computer Organization & Assembly
Language
Chapter 2 Part 4
1
Topics
• Creating executables
– Assembler, linker, loader
– Compilers versus interpreters
• What does the assembler do for you?
• Review of branch and jump instructions
2
“C Program” Down to “Numbers”
swap:
muli
add
lw
lw
sw
sw
jr
$2, $5, 4
$2, $4, $2
$15, 0($2)
$16, 4($2)
$16, 0($2)
$15, 4($2)
$31
void swap(int v[], int k)
{
int temp;
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
00000000101000010…
00000000000110000…
10001100011000100…
10001100111100100…
10101100111100100…
10101100011000100…
00000011111000000…
3
To Produce an Executable
source file
.asm/.s
assembler
object file
.obj/.o
source file
.asm/.s
assembler
object file
.obj/.o
source file
.asm/.s
assembler
object file
.obj/.o
linker
executable
.exe
library
.lib/.a
4
Linker
5
An Object File
• Header
– Size and position of other pieces of the file
• Text segment
– Machine codes
• Data segment
– Binary representation of the data in the source
• Relocation information
– Identifies instructions and data words that depend on absolute addresses
• Symbol table
– Keeps addresses of global labels
– Lists unresolved references
• Debugging information
– Contains a concise description of the way in which the program was compiled
6
An Assembler
•
Expands macros
–
–
•
Macro is a sequence of operations conveniently defined by a user
A single macro can expand to many instructions
Determines addresses and translates source into binary numbers
–
–
–
Record in “symbol table” addresses of labels
Resolve branch targets and complete branch instructions’ encoding
Record instructions that need be fixed after linkage
•
Packs everything in an object file
•
“Two-pass assembler”
–
–
To handle forward references
bne $t0,$t1,next_label
–
next_label:
7
Assembler Directives
• Guides the assembler to properly handle following
codes with certain considerations
• .text
– Tells assembler that codes follow
• .data
– Tells assembler that data follow
• .align
– Directs aligning the following items
• .global
– Tells to treat the following symbol as global
• .asciiz
– Tells to handle the following as a “string”
8
Macro Example
.data
int_str:
.macro
.asciiz “%d”
.text
print_int($arg)
la $a0, int_str
mov $a1, $arg
jal printf
.end_macro
…
print_int($7)
la $a0, int_str
mov $a1, $7
jal printf
9
Branch and Jump Instructions
Review
10
Instruction Format
I
• beq, bne
op
rs
rt
16-bit immediate
PC = PC + 4 + BranchAddr
• BranchAddr = {14{immediate[15]},immediate,2'b0}
• Two issues:
– Assembly machine code
– Execution of the machine code
11
0x00400024
0x00400028
0x0040002c
0x00400030
bne $t0,$s5,exitloop
addi $s3,$s3,1
j loop
exitloop: add $s6,$s3,$zero
BNE machine code in binary:
000101 01000 10101 0000000000000010
BNE machine code in hex: 15150002
BranchAddr = {14{immediate[15]},immediate,2'b0}
= {00000000000000,0000000000000010,00}
= 0000 0000 0000 00 00 0000 0000 0000 1000
= 0x00000008
When BNE instruction is executed (condition true):
Next address = PC + 4 + BranchAddr
Next address = 00400024 + 4 + 00000008
= 00400030 … address of the exitloop inst!
12
BranchAddr: Why 2’b0 at the end?
• BranchAddr might have been:
{16{immediate[15]},immediate}
• {number,00} = number * 4 (like shifting left by 2)
• Recall: the immediate field of the instruction
contains the number of instructions away the
label is
• Each instruction is 4 bytes, so multiplying by 4
gives you the number of bytes away it is. This is
the number to add to PC + 4 to jump to the
label.
13
BranchAddress: Why 2’b0 at the end?
• If immediate instead were the number of bytes
away the label is, then we would be wasting 2
bits
• Since all instruction addresses are multiples of
4, the bottom 2 bits are always 00
• By not including those bits in the immediate field
of the machine code, branch instructions can be
used to jump 4 times further away
14
Instruction Format, cont’d
Jump
op
26-bit address
• The address of next instruction is obtained by concatenating with PC
PC = {PC[31:28],address,2’b0}
15
0x00400018
0x0040001c
0x00400020
ELSE:
0x00400024
0x00400028
0x0040002c
bne $s4, $s5, ELSE
add $s3, $s2, $s5
j EXIT
sub $s3, $s2, $s5
addi $s5, $s5, 1
EXIT: addi $s4,$s4,1
j instruction machine code:
Hex: 0810000b Look at execution:
PC = {PC[31:28],address,00}
PC[31:28] = 0000
address = 00 0001 0000 0000 0000 0000 1011
{0000, address, 00} =
0000 00 0001 0000 0000 0000 0000 1011 00 BIN
0
0
4
0
0
0
2
c
HEX
The address EXIT stands for!
16