380 likes | 424 Views
Assembly Language. Chapter 3. Computer Languages. High-level languages Java, Python, C, ASP, HTML, … Low-level languages Assembly language: symbolic representation of machine instructions. Assembler: a compiler which translates from an assembly language to a machine language.
E N D
Assembly Language Chapter 3
Computer Languages • High-level languages • Java, Python, C, ASP, HTML, … • Low-level languages • Assembly language: symbolic representation of machine instructions. • Assembler: a compiler which translates from an assembly languageto a machine language. • Machine languages
Components of a computer: More detail processor memory registers ALU data program Instruction register Program counter data address Control units
Applications Operating systems Instruction set Functional units Finite state machine Logic gates Electronics Levels of descriptions of computer systems • computer architecture begins at the instruction set. • An instruction set is what a programmer at the lowest level sees of a processor • one instruction set with different level of performance for many models, based on the implementation of a control unit via “microprogram”. • Present day processor designs converge, their instruction sets become more similar than different.
Registers NameReg. No. Usage $zero 0 hardwired 0 $v0-$v1 2-3 return value and expression evaluation $a0-$a3 4-7 arguments $t0-$t7 8-15 temporary values $s0-$s7 16-23 saved values $t8-$t9 24-25 more temporary values $gp 28 global pointer $sp 29 stack pointer $fp 30 frame pointer $ra 31 return address C
MIPS Assembly Instructions: Conditionals Chapter 3 Assembly Languages
x = y+z+5; w = z-y; lw $t0, 18($zero) # load y lw $t1, 22($zero) # load z add $t2, $t0, $t1 # y+z addi $t2, $t2, 5 # (y+z)+5 sw $t2, 14($zero) # store x sub $t3, $t1, $t2 # z-y sw $t3, 10($zero) # store w if (a<b) a++; else b++; lw $t0, 50($zero) # load a lw $t1, 54($zero) # load b slt $t2, $t0, $t1 # a<b beq $t2, $zero, else # if addi $t0, $t0, 1 # a++ sw $t0, 50($zero) # store a else: addi $t1, $t1, 1 # b++ sw $t1, 54($zero) # store b Example 10 14 18 22 50 54 Chapter 3 Assembly Languages
Basic instruction formats R- format I- format J- format Chapter 3 Assembly Languages
Instruction Representation: Examples Chapter 3 Assembly Languages
Instruction Representation: Examples add $t0, $t1, $t2 Chapter 3 Assembly Languages
Instruction Representation: Examples sub $s0, $s1, $s2 Chapter 3 Assembly Languages
Instruction Representation: Examples addi $s0, $s1, 100 Chapter 3 Assembly Languages
Instruction Representation: Examples j 10000 Chapter 3 Assembly Languages
Instruction Representation: Examples beq $s0, $s1, 100 Chapter 3 Assembly Languages
MIPS Simulator http://pages.cs.wisc.edu/~larus/spim.html Chapter 3 Assembly Languages
Case/ Switch statement switch (i) { case 0: i++; break; case 1: j++; break; case 4: k++; } • Jump (address) table • Table storing addresses of different cases Chapter 3 Assembly Languages
switch (i) { case 0: i++; break; case 1: j++; break; case 4: k++; } # variable i is in $t1, const 5 is in $t0 # start addr of jump table (e.g. 3010) is in $s0 blt $t1, $zero, out bge$t1, $t0, out # multiply i by 4 for word size sll $t1, $t1, 2 # find entry in the jump table add $t1, $t1, $s0 # load addr in jump table to $t2 lw $t2, 0($t1) jr $t2 L2010: … j out L20485: … out: Case statement and jrinstruction Chapter 3 Assembly Languages
Procedure calls • Steps to Execute procedure • place parameters in a place where procedure can access them • transfer control to the procedure • acquire the storage needed for the procedure • perform the desired task • place the result value in a place where the calling program can access it • return to the control point of origin Chapter 3 Assembly Languages
Memory allocation for programs $sp Stack Heap (dynamic data) Static data Code (text segment) Reserved $fp $gp pc Chapter 3 Assembly Languages
Registers • $a0-$a3 • four argument registers in which to pass parameters • $v0-$v1 • two value registers in which to return values • $ra • one return address register to return to the point of origin Chapter 3 Assembly Languages
jal jump and link • jumps to an address and simultaneously saves the address of the following instruction in register $ra • jal ProcedureAddress • jal puts PC + 4 in $ra • to return, after completion of the procedure: • jr $ra • calling program (caller) puts parameter values in $a0-$a3 • callee performs calculations and places result in $v0-$v1 Chapter 3 Assembly Languages
Call sequence • Put arguments in $a0-$a3 • The rest of the arguments (if exist) are placed in the frame or activation record • Allocate a frame in stack (update $sp) • Save values of $s0-$s7, $fp, $rain the frame • Update $fp • Execute jal instruction Chapter 3 Assembly Languages
Return sequence • Put the return value in $v0 • Restore registers $s0-$s7 • Restore $fp • Pop the frame from stack • Execute jr $ra Chapter 3 Assembly Languages
int leaf_example (int g, int h, int i, int j) { int f; f = (g + h) - (i + j); return f; } leaf example: addi $sp, $sp, -12 #adjust stack to make room for 3 items sw $t1, 8($sp) #save register $t1 for use afterwards sw $t0, 4($sp) #save register $t0 for use afterwards sw $s0, 0($sp) #save register $s0 for use afterwards add $t0, $a0, $a1 #register $t0 contains g + h add $t1, $a2, $a3 #register $t1 contains i + j sub $s0, $t0, $t1 #f = $t0 - $t1, which is (g+h)-(i+j) add $v0, $s0, $zero #returns f ($v0 = $s0 + 0) lw $s0, 0($sp) #restore register $s0 for caller lw $t0, 4($sp) #restore register $t0 for caller lw $t1, 8($sp) #restore register $t1 for caller addi $sp, $sp, 12 #adjust stack to delete 3 items jr $ra #jump back to calling routing Example 1 Chapter 3 Assembly Languages
int fact (int n) { if (n<2) return(1); else return(n*fact(n-1); } fact: addi $sp, $sp, -8 #adjust stack to make room for 2 items sw $ra, 4($sp) #save the return address sw $a0, 0($sp) #save the argument n slti $t0, $a0, 2 #test for n<2 beq $t0, $zero, L1 #if n>=2 goto L1 addi $sp, $sp, 8 #adjust stack to delete 2 items addi $v0, $zero, 1 #else return 1 jr $ra #jump back to calling routing L1: addi $a0, $a0, -1 #if n>=1 calculate n-1 jal fact #call fact with n-1 lw $a0, 0($sp) #return from jal, restore argument lw $ra, 4($sp) #restore return address addi $sp, $sp, 8 #adjust stack to delete 2 items mul $v0, $a0, $v0 # return n* fact(n-1) jr $ra #jump back to calling routing Example 2 Chapter 3 Assembly Languages
fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $a0, 0($sp) slti $t0, $a0, 2 beq $t0, $zero, L1 addi $sp, $sp, 8 addi $v0, $zero, 1 jr $ra L1: addi $a0, $a0, -1 jal fact lw $a0, 0($sp) lw $ra, 4($sp) addi $sp, $sp, 8 mul $v0, $a0, $v0 jr $ra int fact (int n) { if (n<2) return(1); else return(n*fact(n-1); } … fact(2); Execution example Push frame Call fact (2)addi $a0, $zero, 2 (03A0)jal fact $a0 2 n<2 ret 1 1 stack 03A4 ($ra) 2($a0) $ra 03A4 0344 (0340) 0344 ($ra) 1($a0) restore $v0 1 2 n>=2 ret n*(n-1)! Chapter 3 Assembly Languages
32-bit constants • A register can contain an integer between -2147483648 (-231) and 2147483647 • Immediate data can be between -32768 (-215) and 32767 • addi $t0, $zero, 32767 • How can we use 32-bit constant? • lui (load upper immediate) instruction Chapter 3 Assembly Languages
load upper immediate instruction: lui • Store 16-bit immediate data in the upper half of the register lui $t0, 16384# put 0100 0000 0000 0000 in the upper half of $t0 • To store a 32-bit constant in a register add $t0, $zero, $zero lui $t0, 16384 addi $t0, $t0, 5435 0100 0000 0000 0000 Chapter 3 Assembly Languages
Jumping to far-away instruction • In beq or bne instructions, only 215 distance can be specified. • To jump to further instructions beq $t0, $t1, L1 ... L1: j L2 ... L2: Chapter 3 Assembly Languages
Memory Addressing Modes • direct • mem[address] • register indirect • mem[content[reg]] • mem[content[address]] • register indirect displacement • mem[content[reg]+displacement] • mem[content[address]+displacement] • register indirect index and displacement Chapter 3 Assembly Languages
MIPS Addressing Modes • Register addressing (R-format) • add $t0,$t1,$t2 • Base (Displacement) addressing (I-format) • lw $t1, 12($t2) • Immediate addressing (J-format) • addi $t0, $t1, 34 register memory + register Chapter 3 Assembly Languages
MIPS Addressing Modes • PC-relative addressing (I-format) • beq $t0, $t1, label • Pseudo-direct addressing • j label memory + PC : PC Chapter 3 Assembly Languages