P. 1
Chapter 4

Chapter 4

5.0

|Views: 481|Likes:
出版社:陳鍾誠

More info:

Published by: 陳鍾誠 on Sep 29, 2009
著作権:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

10/20/2011

pdf

text

original

作者:陳鍾誠

旗標出版社
第 4 章、組譯器
– 系統程式 理論與實務
第 4 章、組譯器

4.1 組譯器簡介

4.2 組譯器的演算±

4.3 )]的組譯j]

4.4 Q©的組譯器|¶

4.5 實務¶]

4.5.1 #¢的組譯3|

4.5.2 GNU 組譯3|
4.1 組譯器簡介

|¶組譯器´

組譯器Tþ[組¡þ±|Q{|的 的3|,

þ組¡þ±程式j[µ[®)的±§3|,
g 4.1 組譯器的®程¬¶g
MUL R5, R2, R2
ADD R1, R2, R5
ADD R2, R4, R2
15 52 20 00
13 12 50 00
13 24 20 00
組譯器
Assembler
組合語言
目的檔
j] 4.1 簡#的組¡þ±程式
行號 組合語言程式碼 說明
1
2
3
4
5
6
EX1 START
0x0100
LD R1, B
ST R1, A
A RESW 1
B WORD 29
END EX1
程式開始
載入記憶體變數 B 到暫存器 R1 當中
將暫存器 R1 存記憶體變數 A 當中
!"#$%組 (Word) &變數 A
'(變數 B )%組*+,-.) 29
程式/0
j] 4.2 {組¡þ±程式D±|的[
行號 記憶體12
(16 31)
程式碼 目的碼A
( 4562)
( 78)
目的碼 B
( 9562)
( 7:)
1
2
3
4
5
6
00000100
00000104
00000108
0000010C
EX1 START 0x0100
LD R1, B
ST R1, A
A RESW 1
B WORD 29
END EX1
T(0010010
C)
T(0110010
8)
B(0004)
T(0000001
D)
T(001000C)
T(0110004)
B(0004)
T(0000001D)
j] 4.3 組譯器的þ出- |的 的j]
T 0100 ! 001000C 0110004 "
T 010C ! 0000001D "
±| 4.1 ¶/¶|的]+µ[±
;
<
=式 >? O# @A BC 說明


D

B LD 00 載入
($ord)
LD R%
&R'()x*
R%&R'( )x*
B ST 01 D存
($ord)
ST R% &R'(
)x*
R%& R'( )x*
B LDB 02 載入 ('+,-) LDB R% &R'(
)x*
R%('+,-)&R'(
)x* B STB 03 D存 ('+,-) STB R% &R'(
)x*
R%('+,-)&R'(
)x* . . . . . . .
絕對定址 /.0. |±¶±
LD R%, &R' ( Cx*
LD R1, B
00 1 0 010C
g 4.2 [LD R1, B 指令以絕對定址法編為目的
[
>?E碼 Cx .的FG (Cx1B2
#C) LD Rd, &R% ( Cx*
LD R1, #C( (B2#C)
00 1 0008
0x010C
(B)
2 0x0104
(#C)
1 0x0008
(Cx)
g 4.3 [LD R1, B 指令以相對於 PC 的方法編為目的碼
組譯器的 ¶
1. ®算;|Q :[[j®算[ (OP) |Q{©器þ
±,]9 LD |{ 00 ,S |{ 01 ¶,
2. §#|Q :[|¶®算;|Qj©器t±,]9
A |{ 010! ,B |{ 010C ¶,
3. /||Q:[[¶程式±7的/|¶#|Q{ 
#的©器[,]9 2" |Q{ 001D ,
4. 目的碼產生:)®±的|式@[©器]+,±
目的程式。
4.2 組譯器的演算±

第¬©[ (PASS1)

[算|¶t±

第¯©[ (PASS2)

產生目的碼
第¬©[ ( [算|¶t±)

1. 決定每一個指令與假指令所占記憶!的"#

]9$¶ #ORD 、R$S# ¶]+[¶¶的/|[•,)€
LD 、S ¶]+[•‚ƒ的„…,

2. 指定程式$%所&指令與'(的)址

†þ‡¶ 2 { 0100 ,‡¶ 3 { 0104 ¶,

3. *+每一個,-與./的記憶0)址

ˆ‰第¯©[®),†þŠ# A { 010! ,Š# B { 010C
¶,
第¯©[ ( 組譯]+與/|)

1. |Q組¡þ±]+[j[{©器[

]9 LD |Q{ 00 ,S |Q{ 01 ¶,

2. |Q]+§#{©器[

]9 R1 |Q{ 1, B |Q{ 0 01 0C ¶,

3. |Q/|¶譯]+{t;

]9 #ORD B 2" |{ 00 00 00 1D ¶,

4. 產生目的碼1234目的5$%。
組譯器的/|‹Œ
LD 00
ST 01
LDB 02
....
A 00000108
B 0000010C
BC 4.4 HI/J 1 2 >?K=
BC 4.5 HI/J 2 % L號K
=
M#NOPGQ ( FGL號12) (1)
Algorithm AssemblerPass1 // 組R器的M#NOPGQ
input AssmeblyFile // S入T組合語言檔
ouptut SymbolTable // SUTL號K
begin
SymbolTable = new Table; // VWX的L號K
file = open(AssemblyFile) // 開Y組合語言檔Z)S入
while not file.en // 當檔[\]/0^*_`a檔
line = rea!ine(file) // ab#行
if line is "omment // cde行)fg
"ontinue // hijk行*_`b#lmn
label= label(line) // ope行中的q記
if label is not null // cde行rq記
symbol#e"or = symbolTable.sear"h(label) // sL號K中tueq記
if symbol#e"or is not null // cdu到eq記
report error // hv(wx $ q記yz6A
en if
M#NOPGQ ( FGL號12) (2)
op = operator(line) // ope行中的>?{| ( }憶L號)
op#e"or = opTable.sear"h(op); // s>?K中tue>?
if op#e"or is not null // cdu到e>?
aress %= &; // h將12~&
// ( •)'P() 的€$>?•‚ & byte)
else if op is *STA#T+ // cd>?‚ STA#T
aress = (parameter 1 as integer) // h將12,6)ƒ數 1 „…K的12
else if op is *,-T.+ // cd>?‚ ,-T.
aress %= 1/length(parameters) // h將12~1
else if op is *01#2+ // cd>?‚ 01#2
aress %= & / length(parameters) // h將12~& ('P() 的wor ‚& byte)
else if op is *#.S,+ // cd>?‚ #.S,
aress %= length(parameter 1) // h將12~†ƒ數„‡的 byte 數目
else if op is *#.S0+ // cd>?‚ #.S0
aress %= & / length(parameter 1) // h將12~†&/ ƒ數„‡的0or 數
else // cdˆ‰s†Š‹Œ•#*h…Ke>?
report error // Ž••‘rx*s‚’“wx”•
en if
en while
.n
M–NOPGQ ( —˜目的碼)
(1)
Al&'r()*m AssemblerP+ss2 ,, 組譯器的第¯©[演算±
(-./) Assmebl01(le, S0mb'l+ble ,, 26789:;5<=>?
'/.)/) Ob21(le ,, 237目的5
be&(-
3(le 4 '.e-(Assembl01(le) ,, @A89:;5B為26
5*(le -') 3(le.e-6 ,, $5CDEFGH<IJK5
l(-e 4 re+6L(-e(3(le) ,, KL一M
'. 4 '.er+)'r(l(-e) ,, •Ž•‡7的]+#• ( [j|¶)
'.Re7'r6 4 '.+ble.se+r7*('.) ,, 於指令?%NOP指令
(3 '.Re7'r6 (s -') -/ll ,, 9‘’“•]+
'b2C'6e 4 )r+-sl+)e8-s)r/7)('-(l(-e, +66ress) ,, []+|Q{|的[
+66ress 94 le-&)*('b2C'6e) ,, [算”¬•]+t±
M–NOPGQ ( —˜目的碼)
(3)
else (3 '. (s :#ORD; 'r :B<$: ,, 9‘]+þ #ORD – B<$
'b2C'6e 4 )r+-sl+)eD+)+(l(-e) ,, [/||Q{|的[
+66ress 94 le-&)*('b2C'6e) ,, [算”¬•]+t±
else (3 '. (s :SAR; ,, 9‘]+þ SAR
+66ress 4 (.+r+me)er 1 +s (-)e&er) ,, —[t±j¶{§#1 [˜±的t±
else (3 '. (s :R$SB; ,, 9‘]+þ R$SB
+66ress 94 le-&)*(.+r+me)er 1) ,, —[™jšt±D±§#[›的 b0)e #
else (3 '. (s :R$S#; ,, 9‘]+þ R$S#
+66ress 94 4 = le-&)*(.+r+me)er 1) ,, —[t±D±4 = §#的#'r6 #
e-6 (3
'/)./) Ob2C'6e )' Ob21(le ,, [|的[œ/|的 ±7, 5
e-6 5*(le
e-6
第¯©[演算± ( ]+|Q) (3)
Al&'r()*m r+-sl+)e8-s)r/7)('- ,, |Q]+{|的[,
8-./) l(-e, .7, '.Re7'r6 ,, 267指令Q程式R/S
O/)./) 'b2C'6e ,, 237目的碼
(3 ('.Re7'r6.)0.e (s L) ,, 9‘þL •]+
R+ 4 .+r+me)ers>1? ,, j¶ R+ §#
(3 (.+r+me)ers>3? (s C'-s)+-)) ,, 9‘þ¶#
C@ 4 )'8-)e&er(.+r+me)er>2?)A ,, j¶ C@ 為PT/。
(3 (.+r+me)ers>3? (s B+r(+ble) ,, 9‘þŠ#
C@ 4 +66ress(B+r(+ble) % .7 ,, j¶ C@ 為)U ( 標™-PC) ,
Rb 4 .+r+me)ers>2? ,, j¶ Rb §#,
e-6 (3
'b2C'6e 4 '.Re7'r6.'.C'6e9(6(R+)9*e@(C@)A ,, j¶|的[,
else (3 ('..)0.e (s A) ,, 9‘þA •]+
R+ 4 .+r+me)er>1? ,, •Ž R+
Rb 4 .+r+me)er>2? ,, •Ž Rb
R7 4 .+r+me)er>3? ,, •Ž R7
'b2C'6e 4 '.Re7'r6.'.C'6e9(6(R+)9(6(Rb)9(6(R7) ,, [|的[œ/|的 , 5
C. ,, C ž理 A . •與/|Ÿ±
$-6
4.3 )]的組譯j]

組¡þ±

組譯®±

目的5
j] 4.6 組¡þ± ( D@|¶)
j] 4.6 的組譯®±
j] 4.6 的|的
4.4 Q©的組譯器|¶

¶±jg的[®

實¬ (L()er+l) :]j[¶#œ{]+7

LORG D [實¬5出

ORG D ®“¶•t±

$EU D )(|˜±¶#–|¶®算式
定址VW的XY
T/Z的?[法
j] 4.11 實¬ (L3,-r%4) 的組¡þ
±程式j]
j] 4.12 ) LTOR5 ]=¶®實¬的j
]
j] 4.13 ®)E67 ]]+的組¡
þ±程式)[
j] 4.14 ®)E67 Q‡|±t±
¶© C þ±的 0,r89, ‹Œ
j] 4.15 ®)E67 與§¶ : ¶©
C þ±的 0,r89, ‹Œ
j] 4.16 ®)OR5 ]]+的組¡
þ±程式)[
j] 4.1; ®)®算式[算|5„…
的組¡þ±程式)[
j] 4.18 )7SE [¶@$j„|5
[¿j的¶±[®
4.5 實務¶]

4.5.1 #¢的組譯3|

4.5.2 GNU 組譯3|
4.5.1 #¢的組譯3|

B(s/+l S)/6(' $@.ress (C99)

•ý的q±{*)).D,,F(.(rG(-e.7'm,+sm,

)7ý@的JE章與[(j]程式,¯)ÿ)”¶,

Ge))(-& S)+r)e6 5()* MASM

*)).D,,555.F(.(rG(-e.7'm,+sm,&e))(-&S)+r)e6,(-6e@.*
)m
j] 4.19 ) <308%4 S,8d3o jœ
)AS)組¡þ±的j]
g 4.; {<308%4 S,8d3o 7|‡組¡þ
±
g 4.8 {<308%4 S,8d3o 7|‡
)AS) 組¡þ±的‹‘
g 4.9 )組¡þ±þ出¬¤“¶¶
±
4.5.2 5N7 組譯3|

GNU 的 &77, +s |¯)^組譯

®) &77 |ˆ‰,[{¯[%µ譯®‹

¿¯[ C þ±µ譯{組¡þ±

7#[®) &77 [ C µ譯{組¡þ±@±]q
,,)®‹ C þ±的{@)¶,®®|[¶式的
|[,
j]4.20 C þ±程式j]
j]4.21 |Q{組¡þ±@ (1)
j]4.21 |Q{組¡þ±@
(2)
j]4.21 |Q{組¡þ±@
(3)
j]4.21 |Q{組¡þ±@
(4)
j
]
4
.
2
1

]
q
#

j]4.21 的|‡‹‘
{ C þ±7 |組¡þ±

 |組¡þ±

&77 ¯®) +sm HCI þ± |組¡þ±) C þ±
±7,
j] 4.24 \]89:;的C 程式 2
(1)
j] 4.24 的|‡®程
±| 4.1 5N7 ]6式89:;的^
]{| ( 5± =A32 ž理器)
_\]程式`@為89:;
j] 4.26 [ > j] 4.26? 的{|ß
}{ r
j] 4.2; > j] 4.24?與> j]
4.26? 的組¡þ±±þ (1)
j] 4.2; > j] 4.24?與> j]
4.26? 的組¡þ±±þ (2)
第 4 章、組譯器 ( @§ 1)

4.1 組譯器簡介

組譯器:[組¡þ±|Q{©器[

4.2 組譯器的演算±

第¬©[:[算|¶t±

第¯©[:[]+|{|的[

4.3 )]的組譯j]

|5D@|¶
第 4 章、組譯器 ( @§ 2)

4.4 Q©的組譯器|¶

L()er+l ( 實¬) 、¶#、$EU, ORG, =, C

4.5 實務¶]

4.5.1 #¢的組譯3|
'
{ B(s/+l S)/6(' %ab89:;

4.5.2 GNU 組譯3|
'
®) &77 µ譯C 程式為89:;<1cde
'
) C :;%\]89:; ( ®) GNU 的\]:法)

You're Reading a Free Preview

ダウンロード
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->