100 likes | 201 Views
Computer Science 101. How the Assembler Works. Assembly Language Programming. Translation and Loading. Assembler Translates a symbolic assembly language program into machine language Tasks performed Convert symbolic op codes to binary Convert symbolic addresses to binary
E N D
Computer Science 101 How the Assembler Works
Translation and Loading • Assembler • Translates a symbolic assembly language program into machine language • Tasks performed • Convert symbolic op codes to binary • Convert symbolic addresses to binary • Perform the assembler services requested by the pseudo-ops • Put the translated instructions into a file for future use
Translation and Loading (continued) • Op code table • Alphabetized list of all legal assembly language op codes and their binary equivalents • In assembly language: • A symbol is defined when it appears in the label field of an instruction or data pseudo-op • Pass • Process of examining and processing every assembly language instruction in the program, one instruction at a time
Translation and Loading (continued) • First passover source code • Assembler looks at every instruction • Binding • Process of associating a symbolic name with a physical memory address • Primary purposes of the first pass of an assembler • To bind all symbolic names to address values • To enter those bindings into a symbol table
Generating a symbol table .begin in x load zero compare x jumpgt endif subtract x store x endif: output x halt x: .data 0 zero: .data 0 .end
Translation and Loading (continued) • Location counter • Variable used to determine the address of a given instruction • Second pass • Assembler translates source program into machine language • After completion of pass 1 and pass 2 • Object file contains the translated machine language object program
Generating machine code Opcode table load 0000 store 0001 clear 0010 add 0011 increment 0100 subtract 0101 decrement 0110 compare 0111 jump 1000 jumpgt 1001 jumpeq 1010 jumplt 1011 jumpneq 1100 in 1101 out 1110 halt 1111 Source program .begin in x load zero compare x jumpgt endif subtract x store x endif: out x halt x: .data 0 zero: .data 0 .end