組合語言的語句型別

2022-11-14 16:51:04 字數 4186 閱讀 1902

組合語言的語句型別有兩種:指示性語句和指令性語句。指示性語句可以位於任何段中,指令性語句必須位於**段內。

指示性語句

又稱偽操作語句,它不是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 在對一些實際問題的程式設計處理上使用這些高階語言顯得很是方便。於是在剛接觸這門課的時候就對其實用性產生了懷疑和一些的牴觸情緒。再學習了一段時間後,雖然對一些繁雜的指令有些討厭 但還是硬著頭皮學著下來了 但後來再經過實驗課的學習感覺組合語...