Lecture 4
LC-3 Assembly Language
CS Reality
G
Youve got to know assembly
G
Chances are, youll never write program in
assembly
Compilers are much better & more patient than
you are
G
n!erstan!ing assembly "ey to machine-level
e#ecution mo!el
$ehavior o% programs in presence o% bugs
&igh-level language mo!el brea"s !own
'uning program per%ormance
n!erstan!ing sources o% program ine%%iciency
(mplementing system so%tware
Compiler has machine co!e as target
)perating systems must manage process state
(ts har! to write co!e in *s & +s,
G
Assembly language ma"es it possible to write -achine
Language co!e
each line o% assembly language is translate! into a single
-L instruction
G
A program calle! the Assembler !oes the translation an!
provi!es use%ul tools.
use o% labels - symbolic names %or a!!ress locations
automatic conversion o% binary / he# / !ecimal
pseu!o-ops
Assembly Language (nstructions
G
0ormats
LA$1L )2C)31 )21RA43S 5 C)--14'S
LA$1L 2S13)-)2S 5 C)--14'S
G
)pco!e
Symbolic name %or the 4-bit -L opco!e
G
Label
Symbolic name %or a memory location6 (t is use! to.
in!icate the target o% a branch instruction, e6g6 A7A(4 in
location +$
in!icate the location o% a store! value or array, e6g6 4-$1R
an! S(8
G
Comments
inten!e! %or humans only. e#planation o% co!e, visual
!isplay
2seu!o-)ps 9
9 are !irectives to the assembler
they are not translate! into -L instructions
LC-3 2seu!o-)ps.
6)R(7 a!!ress 'ells assembler where to locate the program in
memory :starting a!!ress;6
60(LL value Store value in the ne#t location in memory6
6$L<= n Set asi!e a bloc" o% n wor!s in memory6
6S'R(47> string Store the string, one character per wor!, in
memory6 A!! a wor! o% #++++ a%ter the string6
6143 -ar"s the en! o% the source program :not to be
con%use! with the instruction &AL',;
618'1R4AL 'he label so in!icate! is allocate! in another
mo!ule6
A sample program
+* 5
+? 5 2rogram to multiply an integer by the number @
+3 5
+4 6)R(7 #3+A+
+A L3 R*, S(8
+@ L3 R?, 4-$1R
+B A43 R3, R3, C+ 5 clear R3 to hol! the pro!uct
+D 5
+E 5 'he inner loop
+A 5
+$ A7A(4 A33 R3, R3, R?
+C A33 R*, R*, C-* 5 "eep trac" o% iterations
+3 $Rp A7A(4
+1 5
+0 &AL'
*+ 5
** 4-$1R 6$L<= *
*? S(8 60(LL #+++@
*3 5
*4 6143
0rom Assembly to bits9
6)R(7 #3+++
A43 R*, R*, C+
A33 R*, R*, C*+
L3 R?, 'wenty
L3 R3, 1ss
&AL'
'wenty 0(LL #++*4
6$L<= ?
1ss 60(LL FSG
6S'R(47> F&iG
6$L<= 3
6143
#3+++. A43 R*, R*, + ++++
#3++*. A33 R*, R*, + *+*+
#3++?. L3 R?, + ++++ ++*+
#3++3. L3 R3, + ++++ +*++
#3++4. 'RA2 ++*+ +*+*
#3++A. ++++ ++++ +++* +*++ 5 #++*4
#3++@.
#3++B.
#3++D. ++++ ++++ +*+* ++** 5 #++A3 H IS
#3++E. ++++ ++++ +*++ *+++ 5 #++4D H I&
#3++A. ++++ ++++ +**+ *++* 5 #++@E H Ii
#3++$. ++++ ++++ ++++ ++++ 5 null terminator
#3++C.
#3++3.
#3++1.
'he Assembly 2rocess
G
)bJective
'ranslate the AL :Assembly Language; program into -L
:-achine Language;6
1ach AL instruction yiel!s one -L instruction wor!6
(nterpret pseu!o-ops correctly6
G
2roblem
An instruction may re%erence a label6
(% the label hasnt been encountere! yet, the assembler
canKt %orm the instruction wor!
G
Solution
'wo-pass assembly
'wo-2ass Assembly - *
G
0irst 2ass - generating the symbol
table
Scan each line
<eep trac" o% current a!!ress
(ncrement by * %or each instruction
A!Just as reLuire! %or any pseu!o-ops
:e6g6 60(LL or 6S'R(47>, etc6;
0or each label
1nter it into the symbol table
Allocate to it the current a!!ress
Stop when 6143 is encountere!
Symbol 'able e#ample
sing the earlier
e#ample.
;
; Program to multiply a number by six
;
.ORIG x3050
x3050 LD R1, I!
x3051 LD R", #$%&'R
x305" (#D R3, R3, )0
;
; *+e inner loop
;
x3053 (G(I# (DD R3, R3, R"
x305, (DD R1, R1, )-1
x3055 &Rp (G(I#
;
x305. /(L*
;
x3050 #$%&'R .&L12 1
x3053 I! .4ILL x000.
;
.'#D
Symbol Address
Again x3053
Number x3057
Six x3058
'wo-2ass Assembly - ?
G
Secon! 2ass - generating the -L
program
Scan each line again
'ranslate each AL instruction into -L
Loo" up symbols in the symbol table
instruction
1nsure that labels are no more than
M?A@ / -?AA lines %rom instruction
3etermine operan! %iel! %or the instruction
0ill memory locations as !irecte! by
pseu!o-ops
Stop when 6143 is encountere!
Assemble! co!e
sing the earlier
e#ample.
x3050 0010 001 0 0000 0111 ; LD R1, SIX
x3051 0010 010 0 0000 0101 ; LD R2, NUMBER
x3052 0101 011 011 1 00000 ; AND R3, R3, #0
x3053 0001 011 011 0 00 010 ; ADD R3, R3, R2
x3054 0001 001 001 1 11111 ; ADD R1, R1, #-1
x3055 0000 001 1 1111 1101 ; BRp AGAIN
x3056 1111 0000 0010 0101 ; HALT
X3057 ; .BL! 1
x305" 0000 0000 0000 0110 ; .#ILL x0006
Symbol Address
Again x3053
Number x3057
Six x3058
1#ercise
6)R(7 #3+++
3+++ A43 R?, R?, #+
3++* L3( R*, (nput
3++? Count $RN Report
3++3 $Rp Shi%t
3++4 A33 R?, R?, #*
3++A Shi%t A33 R*, R*, R*
3++@ $RnNp Count
3++B Report A43 R3, R?, #*
3++D S'( R3, )utput
3++E 'RA2 #?A
3++A (nput 60(LL #3?++
3++$ )utput 60(LL #3?+*
Symbol Address
Count x3002
Shift x3005
Report x3007
Input x300A
utput x300!
0rom C to e#ecutable
G
2reprocessing phase. -o!i%ies original program accor!ing to
preprocessor !irectives :these start with the C character;6 'he
result is another C program te#t %ile :typically with the 6i su%%i#;
Cinclu!e Ost!io6hP
C!e%ine 0ALS1 +
G
Compilation phase. te#t %ile converte! %rom high-level language
to assembly6
Regar!less o% the original high-level language, all programs
han!le! i!entically %rom this point onwar!
)ne assembly correspon!s one-to-one with machine instructions
Hello.c Hello.i Hello.s Hello.o Hello
Pre-
Processor
(cpp)
Compiler
(cc1)
Assembler
(as)
Linker
(ld)
"ry running g55 -' and g55 - to emit $i and $s files respe%ti&ely$
0rom C to e#ecutable
G
Assembly phase. assembly te#t %ile converte! into
machine language binary %ile an! pac"age! into a
relocatable obJect program6
G
Lin"er phase. multiple obJect programs are merge! to
result in an e#ecutable obJect %ile6
0or e#ample. a stan!ar! library %unction such as print%
might resi!e in a separate precompile! obJect %ile :li"e
print%6o; that e#ists elsewhere in the system6
Hello.c Hello.i Hello.s Hello.o Hello
Pre-
Processor
(cpp)
Compiler
(cc1)
Assembler
(as)
Linker
(ld)
)bJect 0ile
G
1ach source %ile is translate! into an obJect %ile
(nitial memory content :instructions M variables;6
'he symbol table6
G
A complete program may inclu!e several source an!/or
obJect %iles.
Source %iles written in Assembly by the programmer
Library %iles provi!e! by the system :)S or other;
Compile! &LL :e6g6, C; libraries
G
'he obJect %iles must be lin"e!
)ne obJect %ile will be the FmainG
All cross-re%erence! labels in symbol tables will be resolve!
'he en! result 9
G
9 is the e#ecutable image :e6g6, 6e#e %ile;
this is a %ile :FimageG; o% the %inaliNe! list o% -L
instructions,
with all symbolic re%erences resolve!
it is loaded by copying the list into memory,
starting at the
a!!ress speci%ie! in the 6)R(7 !irective
it is run by copying the starting a!!ress to the 2C
Representing (nstructions
G
int sum(int x, int y)
G
{
G
return x+y;
G
}
Different machines use totally different instructions and encodings
00
00
30
42
Alpha sum
01
80
FA
6B
E0
08
81
C3
SPARC sum
90
02
00
09
For this example, Alpha & PA!C "se
t#o $-b%te instr"ctions
&se di''erin( n"mbers o' instr"ctions in other
cases
x)* "ses + instr"ctions #ith len(ths 1, ,, and -
b%tes
ame 'or ./ and 'or Lin"x
./ 0 Lin"x not '"ll% binar% compatible
E5
8B
55
89
x86 sum
45
0C
03
45
08
89
EC
5D
C3