Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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