Chapter 5 Assembly Language Programming

advertisement
Chapter 5 Assembly Language Programming
Purpose:
Introduction:
1. Memory address: byte-addressable vs. word-addressable
2. Instructions: fixed length vs. variable length
3. Data and instruction share the main memory
4. Questions: Word size? Main memory size? How to determine the size of an
instruction in variable length instruction set? How data and instructions are
fetched from the main memory?
1. Instruction sequencing: sequential execution, branch and jump, procedure call
and return
2. Four classes of instructions: Data transfer between main memory and registers;
arithmetic and logic operations; Sequencing instructions; and data transfer
between main memory and I/O devices.
3. Instruction cycle: IF, ID, increment PC, fetch data, do operation, store result, go
back.
4. Questions: After a word is fetched, how can you tell whether it is an instruction
or a data word?
1. Register transfer notation: general-purpose registers (R0 – R31), dedicated
registers (PC, MAR, MDR) , Memory (M); Square brackets denote the content of
a register; arrows denote transfers
2. Assembly language notation: Opcode Destination, Source1, Source2
Instruction Format:
1. Each instruction contains three parts: Opcode, modifiers, operand addresses
2. Operand addresses can be registers or memory locations
3. Example basic instructions: add, load, store, and move
 Addition: register-register (load-store computer), memory-memory, registermemory
 Load from main memory to register
 Store from register to main memory
 Move data
4. Instruction format:
 Four-address format:
SEAC, 1945, first computer with a stored program capability. Wordaddressable with a word length of 46bits. Manipulate with octal numbers.
How many memory words in SEAC? What does stored program mean?
Example: Write a program to find out when the artillery shell hits the ground.
y (t )  voy t  1 gt 2 , initially voy  1600 ; g  32 .
2

Three-address format – modified SEAC
No D address, need PC
12 bits per address
Questions: How many words the computer can address? Which instructions
need to be modified? And how?
General-purpose register (register-register, load-store) computer falls
this category.

Two-address format – modify SEAC again to reduces its addresses to two
6bytes per instruction, 18 bits per address, much larger memory
Question: how to avoid the overwritten of A in A [A]+[B]?
Many transistorized computers used a two-address format with the assistance
of ACC as the register for the operation result, thus eliminating the data
transfer to retain the value in A.

One-address format: only one address A remains. The other operand comes
from ACC; result goes to ACC.

Branching and Condition Codes: Instead of using compp and compn, many
computers use condition codes in a Status register that specify the state of
the result of the last operation. Typical condition codes are: N, Z, V, C
Branch positive, branch negative, etc
Addressing Modes:
1. specify how a computer can access its operands and store the result in its registers
and main memory.
2. Immediate addressing: operand is given as part of the instruction, suitable for
small integers for ALU; eg. Addi
3. Register Addressing: The address of an operand is a register.
4. Direct Addressing: also called absolute addressing. The first method used by
electronic stored-program computers. The address in main memory is included in
the instruction to obtain data. Any shortcomings?
5. Indirect Addressing: the content of a register is the main memory address of the
operand. Eg. LDW R1, (R2)
Example: Sum integers. Page 12. Steps: register allocation; initialization; do the
job; store result.
6. Indexing and Arrays: Indexing is a technique that allows a value to be added to
the content of a register (called index register) to form an effective address.
Eg. ADD R3, C(R2)  EA = C+[R2], C is called displacement or offset
Example applications: C can hold the address of the first element in an array and
the index register is initialized to 0 and then index into the array.
Eg. ADD R3, (R1)(R2)
Example: re-do the example of summing integers.
The modifier field in SEAC machine.
7. Base and Indexing Addressing:
8. Base, Index, and Offset Addressing:
9. Relative Addressing: EA = [PC]+displacement for target address computation.
10. Autoincrement and Autodecrement: Designed for push and pop in stack
operation
Eg. (Rx)+ for autoincrement and –(Rx) for autodecrement.
The Assembler
Definition: Assembler is a program that translates the assembly code into machine code.
Assembly code
Machine code
ASM
ADD R5, R2, R3
011000 00110 00010 00011 00000 000000
Source Program
Object Program
The structure of a sentence in an assembly language has 4 parts:
 A label: optional, stands for the name of the location of an instruction of a piece
of data
eg. Msg1: .string
“Hello World!”
 A mnemonic: stands for the operation
 Addresses for the operands and result: register number, or memory address, or a
constant
 Comment: optional.
The set of rules that define each instruction type and how it can be used is called the
syntax of the assembly language.
 Syntax error!
How does an assembler translate an assembly code into object code?
Two-pass assembler as an example.
1. Find out the label(variable)-address pairs (insert them into a symbol table);
changes the operation to the binary op code; change decimal numbers to binary,
etc.
2. Do the translation based on instruction format to get the machine code.
Question: How to assemble external variables? (eg. printf in c)
Answer: Seek the help of linker.
Directives: direct/assist the assembler to do its job (to understand the desire of the
programmer)! (start, text, data, etc)
Directives are reserved words! They are not instructions!
Possible Directives for an assembler:
Label
B
LIST
N
JAKE
START
Directives
Operand
EQU
300
ORIGIN
420
RESERVE
320
DATAWORD 200
DATABYTE 15
DATA:
TEXT:
RETURN
END
Example: Sum the N integers (Page 20-22)
 Syntax of the instructions  get the instruction format
 Instruction description  for coding
 Coding
o Assign and initialize registers
o Do the job and then store the result.
The linker and Loader
Linker is used to resolve external references
Loader is used to load the executable into the main memory and assign a new address to
each variable/label. Why?
Typical Instructions
Integer Arithmetic Instructions: +,-, *, /; addressing mode, HI and LO registers for mul
and div, etc.
Floating-Point Arithmetic Instructions: +,-, *, /, and/or sqrt. Trigonometric functions
are done through subprograms using a technique called numerical analysis.
Decimal Arithmetic Instructions: use BCD code
Data Conversion Instructions: integer to/from FP
Shifting Instructions: logical/arithmetic shift, to do multiplication, etc
Logic Instructions: and, or, not, xor, etc. used to isolate a given set of bits in a register.
To set values, etc.
Word and Byte Transmission Instructions: LDW/STW, LDB/STB, etc.
Control and Branch Instructions: comparison based or condition code based; A control
instruction is a compare: set the condition code based on comparison result.
Sense Indicators and Status Instructions: bits in the status register! Test and set (TST
#n Rx).
Input/Output
Data transfer between the main memory and I/O devices is controlled by OS. Why? –
conflict avoidance!
Large mainframe computers use I/O channels for data movement. Smaller computers
have simple I/O paths – our focus!
There exist two methods of performing I/O in small computers: program-controlled I/O
and memory-mapped I/O.
 Program-controlled I/O:
o Need synchronization – the speed of I/O devices and the speed of the main
memory are different
o Buffer registers and status registers residing in the control unit of the
device: DIN and DOUT, SIN and SOUT
o Eg. Type a character from the keyboard and display a character in the
monitor.
o SPECIAL BRANCH instruction is needed to perform the job:
WAITIN
BIN WAITIN
STB Constant(R3), DIN
WAITOUT BOUT
WAITOUT
LDB
Constant(R3), DOUT
Efficiency: -- the speed of the computer is slowed down to that of the
device!

Memory-mapped I/O
o Computer does not need to know DIN and DOUT. Each I/O device buffer
is wired through an interface to move data to or from a particular location
in main memory.
o DIN is mapped to the special location DATAIN in the main memory and
DOUT is mapped to the special location DATAOUT in the main memory.
These locations are reserved by OS and can not be modified by the user.
WAITIN
BIN WAITIN
STB DATAIN
WAITOUT BOUT
WAITOUT
LDB
DATAOUT
o Special BRANCH instructions such as BIN and BOUT can be avoided by
using TST instruction and the status register.
WAITIN
TST #3, R1
BEZ R1,
WAITIN
STB
DATAIN
WAITOUT TST #4, R1
BEZ R1, WAITOUT
LDB
DATAOUT
o No efficient in CPU usage again!

Computer checks the status either by polling the status register or it is interrupted
by the I/O devices if interrupt-driven method is applied.
Stacks
Stack grows from high address to low address
TOS and BOS are well-defined. Initially SP points to the address just above BOS. SP
always point to TOS
Stack implements LIFC method of operation
How to implement PUSH and POP operations? What if the machine supports
autoincrement and autodecrement addressing?
Queues
Queue is a data structure that implements FIFC.
Subroutines
Definition: A subroutine is a set of instructions that will be used multiple times by a
program over different data . A subroutine usually has a name (label), which indicates the
location of the subroutine program in the main memory.
To use a subroutine, we need an instruction CALL. The subroutine is the called
program (callee) and the main program is the caller program (caller).
Procedure call is a special branch operation, in which the control will be transferred
from the caller to the callee. The callee needs to return the control back the caller when
its job is finished. This is done by an instruction called RETURN.
Subroutine linkage protocol: Caller saves the return address in the link register and
then makes a procedure call. Callee branches to the address stored in the link register
when done.
Nested subroutines: subroutine A calls subroutine B, etc,
 In nested subroutine calling, return address will be overwritten! – stack.
 Who will save and when to save the return address into the stack? – callee at the
beginning.
 Callee needs to save registers that will be locally used by the subroutine; or both
callee and caller can do part of the saving!
Parameter passing: calling parameters and returned parameter are passed by
registers or by the stack.
 Turn the integer sum example into a procedure (subroutine).
Procedure call summary: -- six steps:
Pass parameters to callee
Register or stack
Transfer control to the procedure
Call procName
Allocate storage resources
Save return address register and locally used registers into the stack
Perform the desired task
Return value
Transfer control to the caller
return
Stack frame: The space on the stack that is used to pass parameters and save/restore
registers is called a stack frame. The frame pointer for a particular subroutine remains
fixed throughout the invocation of that instance of the subroutine.
 Frame pointer points to the address that saves the frame pointer of the caller!
 Use frame pointer to access data within the stack frame!
 FP is not a must!
 Examples!
Download