組合語言的語句型別有兩種:指示性語句和指令性語句。指示性語句可以位於任何段中,指令性語句必須位於**段內。
指示性語句
又稱偽操作語句,它不是8086/8088cpu的指令,它與匯程式設計序指示性語句的功能主要是變數定義、為資料分配儲存空間、告訴匯程式設計序如何對源程式彙編等。源程式彙編後,指示性語句不生成目標**,所以常被稱為偽指令。
指令性語句
指令性語句是可執行語句,是8086/8088cpu的指令。源程式彙編後,指令性語句生成目標**。第3章中介紹的所有指令都是指令性語句的主體,其運算元最多只能有2個。
.2018/04/2312:17:12
2.組合語言源程式由若干段組成:資料段、附件資料段、堆疊段和**段等,段與段之間的順序可以任意排列,每段由segment開始,以ends結束,每段的開始和結束都附有相同的名字。
乙個程式一般定義三個段:資料段、堆疊段和**段,必要時增加定義附加資料段,能獨立執行的程式至少包含乙個**段。
張宇新2018/04/2312:19:12
3(1)buffdb200dup(?)
(2)db'byte','word'
(3)dw2040h,0300h,10h,0020h,1048h
張宇新2018/04/2312:19:25
5(1)movsi,offsetname
(2)movax,wordptr[list]
(3)movax,sizelist
張宇新2018/04/2312:31:44
6(1)200x100+55
(2)c8and0f-0f=0
(3)100mod15=10
(4)0forc8=cfh
張宇新2018/04/2312:31:59
7datasegment
numdwx
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
moval,0
movbx,num
movcx,16
next:shlax,1
jncnext1
incal
next1:loopnext
movah,4ch
int21h
codeends
endstart
張宇新2018/04/2312:38:12
8datasegment
bufferdb100dup(?)
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
xordx,dx
movcx,100
movsi,offsetbuffer
next:moval,[si]
incsi
testal,80h
jnzgoon
cmpal,0
jzgoon
incdx
goon:loopnext
movnumber,dx
movah,4ch
int21h
codeends
endstart
張宇新2018/04/2312:39:49
9這是乙個查表程式,查表取出hex中數字對應的ascii碼。
張宇新2018/04/2312:48:35
10過程定義的一般格式為:procendp。如果乙個子程式被多次呼叫,保護與恢復(主程式)現場就非常重要。
主程式每次呼叫子程式時,主程式現場不會相同,保護與恢復現場的工作就只能在子程式中進行。原則上,首先把子程式中要用到的暫存器、儲存單元、狀態標誌等壓入堆疊或存入特定空間中,然後子程式才可以使用它們,使用後再將它們彈出堆疊或從特定空間中取出,回覆他們原來的值,即恢復主程式現場。保護和恢復現場常使用push和pop指令。
張宇新2018/04/2312:58:18
11datasegment
bufdb?
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
moval,buf
movbl,al
next:movcl,4
shral,cl
andal,0fh
cmpal,0
jzgoon
addal,30h
movdl,al
movah,2
int21h
goon:moval,bl
andal,0fh
addal,30h
movdl,al
movah,2
int21h
movah,4ch
int21h
codeends
endstart
張宇新2018/04/2313:04:46
12datasegment
m1db100dup(?)
dataends
edatasegment
m2db100dup(?)
edataends
codesegment
assumecs:code,ds:data,es:edata
start:movax,data
movds,ax
movax,edata
moves,ax
leasi,m1
leadi,m2
movcs,200
cldrepecmpsb
andcx0ffffh
jzstop
decsi
movbx,si
moval,[si]
stop:movah,4ch
int21h
codeends
endstart
張宇新2018/04/2313:11:49
13datasegment
tabledb100dup(?)
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
xoral,al
movplus,al
movminus,al
movzero,al
leasi,table
movcx,100
cldcheck:lodsb
oral,al
jsx1
jzx2
incplus
jmpnext
x1:incminus
jmpnext
x2:inczero
next:loopcheck
movah,4ch
int21h
codeends
endstart
張宇新2018/04/2313:22:37
14datasegment
data1db80dup(?)
data2db5dup(0)
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
movcx,80
leasi,data1
leadi,data2
again:moval,[si]
cmpal,90
jcnext1
inc,byteptr[di]
jmpsto
next1:
cmpal,80
jcnext2
incbyteptr[di+1]
jmpsto
next2:
cmpal,70
jcnext3
incbyteptr[di+2]
jmpsto
next3:
cmpal,60
jcnext4
incbyteptr[di+3]
jmpsto
next4:incbyteptr[di+4]
sto:incsi
loopagain
movah,4ch
int21h
codeends
endstart
組合語言 第3章巨集組合語言
第三章巨集組合語言 一 巨集組合語言格式 3.1.1 指令語句格式 指令語句的一般格式如下 標號 指令助記符運算元 注釋 1 標號 標號是機器指令語句存放位址的符號表示,代表該指令目標 的第乙個位元組位址,後面必須緊跟冒號 2 指令助記符 指令助記符為語句的核心成分,表示了該語句的操作型別。3 運算...
組合語言總結
一 乙個完整的源程式的結構 乙個源程式一般由若干個段組成,每個分段可以是棧段 資料段和 段。乙個源程式可以有多個棧段 資料段和 段,從語法規則上來看,棧段是有明顯標誌的 段最好的型別為 code 的標記,並用cs作為段界暫存器,只有資料段不要求標誌。完整的源程式的結構一般形式如下 程式名稱 二 源程...
組合語言總結
組合語言學習體會 大一大二期間學寫了一些高階語言,如c語言和c 在對一些實際問題的程式設計處理上使用這些高階語言顯得很是方便。於是在剛接觸這門課的時候就對其實用性產生了懷疑和一些的牴觸情緒。再學習了一段時間後,雖然對一些繁雜的指令有些討厭 但還是硬著頭皮學著下來了 但後來再經過實驗課的學習感覺組合語...