《匯編語言》期末考試摘要與試卷_第1頁
《匯編語言》期末考試摘要與試卷_第2頁
《匯編語言》期末考試摘要與試卷_第3頁
《匯編語言》期末考試摘要與試卷_第4頁
《匯編語言》期末考試摘要與試卷_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第三章

1、指令由操作碼和操作數(shù)兩部分組成

2、操作碼說明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不

可缺少的組成部分

3、操作數(shù)是指令執(zhí)行的參與者,即各種操作的對(duì)象,有些指令不需要操作數(shù),通常的指令

都有一個(gè)或兩個(gè)操作數(shù)

4、操作碼:用一個(gè)唯一的助記符表示(指令功能的英文縮寫);對(duì)應(yīng)著機(jī)器指令的一個(gè)二進(jìn)

制編碼

5、操作數(shù):可以是一個(gè)具體的數(shù)值;可以是存放數(shù)據(jù)的寄存器;或指明數(shù)據(jù)在主存位置的

存儲(chǔ)器地址

6、尋找操作數(shù)的過程就是操作數(shù)的尋址

7、代碼格式:

操作碼標(biāo)示尋址方式對(duì)基地址的偏移量立即尋址方式立即數(shù)

8、操作碼操作數(shù)1,操作數(shù)2;

操作數(shù)2,稱為源操作數(shù)src,它表示參與指令操作的一個(gè)對(duì)象

操作數(shù)1,稱為目的操作數(shù)dest,它不僅可以作為指令操作的一個(gè)對(duì)象,還可以用來存

放指令操作的結(jié)果

分號(hào)后的內(nèi)容是對(duì)指令的解釋

9、MOV指令的功能是將源操作數(shù)src傳送至目的操作數(shù)dest

10、立即數(shù)尋址方式:指令中的操作數(shù)直接存放在機(jī)器代碼中,緊跟在操作碼之后的主存單

元中;立即數(shù)尋址方式常用來給寄存器賦值.

11、寄存器尋址方式:操作數(shù)存放在CPU的內(nèi)部寄存器reg中??梢允牵?/p>

8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL

16位寄存器rl6:AX、BX、CX、DX、SI、DI、BP、SP

4個(gè)段寄存器seg:CS、DS、SS、ES

12、存儲(chǔ)器尋址方式:指令中給出操作數(shù)的主存地址信息(偏移地址,稱之為有效地址EA),

而段地址在默認(rèn)的或用段超越前綴指定的段寄存器中。

13、多種存儲(chǔ)器尋址方式:1、直接尋址方式;2、寄存器間接尋址方式

3、寄存器相對(duì)尋址方式;4、基址變址尋址方式

5、相對(duì)基址變址尋址方式

14、直接尋址方式:

>有效地址在指令中直接給出

>默認(rèn)的段地址在DS段寄存器,可使用段超越前綴ES改變

15、寄存器間接尋址方式:有效地址存放在基址寄存器BX或變址寄存器SI、DI中;默認(rèn)

的段地址在DS段寄存器,可使用段超越前綴ES改變。

16、寄存器相對(duì)尋址方式:有效地址是寄存器內(nèi)容與有符號(hào)8位或16位位移量之和,寄存

器可以是BX、BP或SI、DI

有效地址=BX/BP/SI/DI+8/16位位移量

段地址對(duì)應(yīng)BX/SI/DI寄存器默認(rèn)是DS,對(duì)應(yīng)BP寄存器默認(rèn)是

SS;可用段超越前綴ES改變

例:MOVAXJDI+06H];AX-DSJDI+06H]

MOVAX,[BP+06H];AX-SS:[BP+06H]

17、基址變址尋址方式:有效地址由基址寄存器(BX或BP)的內(nèi)容加上變址寄存

器(SI或DI)的內(nèi)容構(gòu)成:有效地址=BX/BP+SI/DI

段地址對(duì)應(yīng)BX基址寄存器默認(rèn)是DS,對(duì)應(yīng)BP基址寄存器默認(rèn)

是SS;可用段超越前綴ES改變

例:MOVAXJBX+SI];AX-DS:[BX+SI]

MOVAX,[BP+DI];AX-SS:[BP+DI]

18、相對(duì)基址變址尋址方式:有效地址是基址寄存器(BX/BP)、變址寄存器(SI/DI)與一

個(gè)8位或16位位移量之和:

有效地址=BX/BP+SI/DI+8/16位位移量

例:MOVAX,[BX+SI+06H];AX-DS:[BX+SI+06H]

注意:位移量可用符號(hào)表示;同一尋址方式有多種表達(dá)形式

19、與轉(zhuǎn)移地址有關(guān)的尋址方式:

1、直接尋址方式:轉(zhuǎn)移地址象立即數(shù)一樣,直接在指令的機(jī)器代碼中

2、間接尋址方式:轉(zhuǎn)移地址在寄存器或主存單元中,就是通過寄存器或存儲(chǔ)器的間接

尋址方式

20、目標(biāo)地址的范圍:段內(nèi)

1、段內(nèi)轉(zhuǎn)移——近轉(zhuǎn)移(near)

在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移(±32KB范圍)

不需要更改CS段地址,只要改變IP偏移地址

2、段內(nèi)轉(zhuǎn)移——短轉(zhuǎn)移(short)

轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)一128?+127范圍的轉(zhuǎn)移

3、段間轉(zhuǎn)移——遠(yuǎn)轉(zhuǎn)移(far)

a)從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,可以在1MB范圍

b)需要更改CS段地址和IP偏移地址

c)目標(biāo)地址必須用一個(gè)32位數(shù)表達(dá),叫做32位遠(yuǎn)指針,它就是邏輯地址

注意:實(shí)際編程時(shí),匯編程序會(huì)根據(jù)目標(biāo)地址的距離,自動(dòng)處理成短轉(zhuǎn)移、近轉(zhuǎn)移

或遠(yuǎn)轉(zhuǎn)移;程序員可用操作符short、nearptr或farptr強(qiáng)制

21、段內(nèi)轉(zhuǎn)移、直接尋址:JMPlabel;1P-IP+位移量

位移量是緊接著JMP指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地

址位移;當(dāng)向地址增大方向轉(zhuǎn)移時(shí),位移量為正;向地址減小方向轉(zhuǎn)移時(shí),位移量為負(fù)

例:jmpagain;轉(zhuǎn)移到again處繼續(xù)執(zhí)行

again:decex;標(biāo)號(hào)again的指令

jmpoutput;轉(zhuǎn)向output

output:movresult,al;標(biāo)號(hào)output的指令

22、段內(nèi)轉(zhuǎn)移、間接尋址:JMPrl6/ml6;IP-rl6/ml6

將一個(gè)16位寄存器或主存字單元內(nèi)容送入IP寄存器,作為新的指令指針,但不修

改CS寄存器的內(nèi)容

例:jmpax;IP-AX

jmpwordptr[2000h];IP-[2000h]

23、段間轉(zhuǎn)移、直接尋址:JMPfarptrlabel;IP-label的偏移地址;CS-label的段地址

將標(biāo)號(hào)所在段的段地址作為新的CS值,標(biāo)號(hào)在該段內(nèi)的偏移地址作為新的IP值;

這樣,程序跳轉(zhuǎn)到新的代碼段執(zhí)行

例:jmpfarptrotherseg;遠(yuǎn)轉(zhuǎn)移到代碼段2的otherseg

24>段間轉(zhuǎn)移、間接尋址:JMPfarptrmem;IP-[mem],CS-[mem+2]

用一個(gè)雙字存儲(chǔ)單元表示要跳轉(zhuǎn)的目標(biāo)地址。這個(gè)目標(biāo)地址存放在主存中連續(xù)的兩

個(gè)字單元中的,低位字送IP寄存器,高位字送CS寄存器

例:movwordptr[bx],0

Movwordptr[bx+2],1500h

JMPfarptr[bx];轉(zhuǎn)移到1500h:0

25、用符號(hào)表示位移量:

在寄存器相對(duì)尋址或相對(duì)基址變址尋址方式中,位移量可用符號(hào)表示:

MOVAXJSI+COUNT];COUNT是事先定義的變量或常量(就是數(shù)值)

MOVAX,[BX+SI+WNUM];WNUM也是變量或常量

26、多種表達(dá)形式:

同一尋址方式可以寫成不同的形式:

MOVAX,[BX][SI]等同于MOVAX,[BX+SI]

MOVAX,COUNTLSIJ等同于MOVAX,[SI+COUNTJ

MOVAX,WNUM[BX1[SI]等同于MOVAX,WNUM|BX+SI]

等同于MOVAX,[BX+SI+WNUM]

27、80x86指令系統(tǒng)共有117條基本指令,可分成6個(gè)功能組

數(shù)據(jù)傳送指令;算術(shù)運(yùn)算指令;邏輯指令

串處理指令;控制轉(zhuǎn)移指令;處理機(jī)控制指令

28、數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最重要的一種操作;傳送指令也是最常使用的一類指令

傳送指令把數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置

除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位

重點(diǎn)掌握:MOVXCHGXLATPUSHPOPLEA

29、有3條指令:MOVXCHGXLAT

MOV:把一個(gè)字節(jié)或字的操作數(shù)從源地址傳送至目的地址

例:MOVreg/mem,imm;立即數(shù)送寄存器或主存

MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存

MOVreg/seg,mem;主存送(段)寄存器

MOVreg/mem,seg;段寄存器送寄存器或主存

30、立即數(shù)傳送:moval,4;al*-4,字節(jié)傳送

movcx,0ffh;cx*-00fTh,字傳送

movbyteptr[si],Oah;byteptr說明是字節(jié)操作

movwordptr[si+2],0bh;wordptr說明是字操作

注意:立即數(shù)是字節(jié)量還是字量;明確指令是字節(jié)操作還是字操作

31、寄存器傳送:movax,bx;ax*-bx,字傳送

movah,al;ah-al,字節(jié)傳送

32、存儲(chǔ)器傳送:moval,[bx]movdx,[bp];dx*ss:[bp]

moves,[si];es-ds:[si]

注意:不存在存儲(chǔ)器向存儲(chǔ)器的傳送指令

33、段寄存器傳送:mov[si],dsmovax,es;ax-es

movds,ax;ds*-ax*-es

注意:對(duì)段寄存器的操作有一些限制

c

2

c

34、非法傳送種種

兩個(gè)操作數(shù)的類型不一致:例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反

兩個(gè)操作數(shù)不能都是存儲(chǔ)器:例:傳送指令很靈活,但主存之間的直接傳送卻不允許

段寄存器的操作有一些限制:例:段寄存器屬專用寄存器,對(duì)他們的操作能力有限

35、兩個(gè)操作數(shù)的類型要一致

絕大多數(shù)雙操作數(shù)指令,除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,否

則為非法指令例如:MOVAL,050AH;非法指令:050Ah為字,而AL為字節(jié)

寄存器有明確的字節(jié)或字類型,有寄存器參與的指令其操作數(shù)類型就是寄存器的類型

對(duì)于存儲(chǔ)器單元與立即數(shù)同時(shí)作為操作數(shù)的情況,必須顯式指明;byteptr指示字節(jié)

類型,wordptr指示字類型

36、兩個(gè)操作數(shù)不能都是存儲(chǔ)器

80x86指令系統(tǒng)不允許兩個(gè)操作數(shù)都是存儲(chǔ)單元(除串操作指令),要實(shí)現(xiàn)這種傳

送,可通過寄存器間接實(shí)現(xiàn)。例如:

movax,bufferl;ax-bufferl(將bufferl內(nèi)容送ax)

movbufferl,ax;buffer!^~ax

;這里bufferl和buffer!是兩個(gè)字變量

;實(shí)際表示直接尋址方式

37、要小心段寄存器的操作

不允許立即數(shù)傳送給段寄存器:MOVDS,100H;非法指令:立即數(shù)不能傳送段寄存器

不允許直接改變CS值例:MOVCS,[SI];不允許使用的指令

不允許段寄存器之間的直接數(shù)據(jù)傳送MOVDS,ES;非法指令:不允許段寄存器間傳送

38、交換指令XCHG(exchange)

把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換例:XCHGreg,reg/mem;reg—reg/mem

寄存器與寄存器之間對(duì)換數(shù)據(jù)

例:movax,1234h;ax=1234h

movbx,5678h;bx=5678h

xchgax,bx;ax=5678h,bx=1234h

xchgah,al;ax=7856h

寄存器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)

例:xchgax,[2000h];字交換,等同于xchg[2000h],ax

xchgal,[2000h];字節(jié)交換,等同于xchg[2000h],al

不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)

39、換碼指令XLAT(translate)

將BX指定的緩沖區(qū)中、AL指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給AL

例:XLAT;al-ds:[bx+al]

換碼指令執(zhí)行前:在主存建立一個(gè)字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼,表格首地址

存放于BX,AL存放相對(duì)表格首地址的位移量

換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼

movbx,l()Oh

moval,03h

xlat

換碼指令沒有顯式的操作數(shù),但使用了BX和AL;因?yàn)閾Q碼指令使用了隱含尋址方式一一

采用默認(rèn)操作數(shù)

40、堆棧操作指令

>堆棧是一個(gè)“后進(jìn)先出FILO”(或說“先進(jìn)后出FILO”)的主存區(qū)域,位于堆棧段中;

SS段寄存器記錄其段地址

>堆棧只有一個(gè)出口,即當(dāng)前棧頂;用堆棧指針寄存器SP指定

>棧頂是地址較小的一端(低端),棧底不變

41、堆棧和隊(duì)列

>堆棧:按照后進(jìn)先出(LIFO)的原則組織的存儲(chǔ)器空間(棧)

>隊(duì)列:按照先進(jìn)先出(FIFO)的原則組織的存儲(chǔ)器空間

42、堆棧的操作

堆棧只有兩種基本操作:進(jìn)棧和出棧,對(duì)應(yīng)兩條指令PUSH和POP

PUSH:進(jìn)棧指令先使堆棧指針SP減2,然后把一個(gè)字操作數(shù)存入堆棧頂部

例:PUSHrl6/ml6/seg;SP-SP-2,SS:[SP]*-rl6/ml6/seg

POP;出棧指令把棧頂?shù)囊粋€(gè)字傳送至指定的目的操作數(shù),然后堆棧指針SP加2

例:POPrl6/ml6/seg;rl6/ml6/seg*-SS:[SP],SP=SP+2

43、堆棧的特點(diǎn)

>堆棧操作的單位是字,進(jìn)棧和出棧只對(duì)字量

>字量數(shù)據(jù)從棧頂壓入和彈出時(shí),都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)

>堆棧操作遵循先進(jìn)后出原則,但可用存儲(chǔ)器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù)

>堆棧常用來:臨時(shí)存放數(shù)據(jù);傳遞參數(shù);保存和恢復(fù)寄存器

44、標(biāo)志寄存器傳送指令

標(biāo)志寄存器傳送指令用來傳送標(biāo)志寄存器FLAGS的內(nèi)容,方便進(jìn)行對(duì)各個(gè)標(biāo)志位的直

接操作

有2對(duì)4條指令:低8位傳送:LAHF和SAHF;16位傳送:PUSHF和POPF

45、標(biāo)志低字節(jié)進(jìn)出AH指令

LAHF;AH-FLAGS的低字節(jié)

>LAHF指令將標(biāo)志寄存器的低字節(jié)送寄存器AH

>SF/ZF/AF/PF/CF狀態(tài)標(biāo)志位分別送入AH的第7/6/4/2/0位,而AH的第5/3/1位任

SAHF;FLAGS的低字節(jié)+AH

>SAHF將AH寄存器內(nèi)容送FLAGS的低字節(jié)

A用AH的第7/6/4/2/0位相應(yīng)設(shè)置SF/ZF/AF/PF/CF標(biāo)志

PUSHF;SP*-SP-2;SS:[SP]*-FLAGS

>PUSHF指令將標(biāo)志寄存器的內(nèi)容壓入堆棧,同時(shí)棧頂指針SP減2

POPF:FLAGS-SS:[SP];SP+SP+2

>POPF指令將棧頂字單元內(nèi)容送標(biāo)志寄存器,同時(shí)棧頂指針SP加2

46、置位單步標(biāo)志

pushf;保存全部標(biāo)志到堆棧

popax;從堆棧中取出全部標(biāo)志

orax,0100h;設(shè)置D8=TF=1,;ax其他位不變

pushax;將ax壓入堆棧

popf;FLAGS-AX;將堆棧內(nèi)容取到標(biāo)志寄存器

47、地址傳送指令

>地址傳送指令將存儲(chǔ)器單元的邏輯地址送至指定的寄存器

1、有效地址傳送指令LEA2、指針傳送指令LDS和LES

>注意不是獲取存儲(chǔ)器單元的內(nèi)容

48、有效地址傳送指令LEA(loadEA)

>將存儲(chǔ)器操作數(shù)的有效地址傳送至指定的16位寄存器中

例:LEArl6,mem;rl6+mem的有效地址EA

49、獲取有效地址

movbx,0400h

movsi,3ch

leabx,[bx+si+0f62h];BX=0400h+003ch+0f62h=139EH

勺獲得主存單元的有效地址;不是物理地址,也不是該單元的內(nèi)容

3可以實(shí)現(xiàn)計(jì)算功能

50、指針傳送指令

LDS指令將主存中mem指定的字送至rl6,并將mem的下一字送DS寄存器

例:LDSrl6,mem;rl6-mem,;DS=mem+2

ALES指令將主存中mem指定的字送至rl6,并將mem的下一字送ES寄存器

例:LESrl6,mem;rl6-mem,;ES-mem+2

51、地址指針傳送

movwordptr[3060h],0100h

movwordptr[3062h],1450h

lesdi,[3060h];es=1450h,di=0100h

Idssi,[3060h];ds=1450h,si=0100h

mem指定主存的連續(xù)4個(gè)字節(jié)作為邏輯地址(32位的地址指針),送入DS:rl6或ES:rl6

52、輸入輸出指令

>80x86通過輸入輸出指令與外設(shè)進(jìn)行數(shù)據(jù)交換;呈現(xiàn)給程序員的外設(shè)是端口(Port)

即I/O地址

>80x86用于尋址外設(shè)端口的地址線為16條,端口最多為216=65536(64K)個(gè),端

口號(hào)為0000H?FFFFH

>每個(gè)端口用于傳送一個(gè)字節(jié)的外設(shè)數(shù)據(jù)

53、輸入輸出尋址方式

>80x86的端口有64K個(gè),無需分段,設(shè)計(jì)有兩種尋址方式

?直接尋址:只用于尋址00H?FFH前256個(gè)端口,操作數(shù)i8表示端口號(hào)

間接尋址:可用于尋址全部64K個(gè)端口,DX寄存器的值就是端口號(hào)

>對(duì)大于FFH的端口只能采用間接尋址方式

54、輸入指令I(lǐng)N:將外設(shè)數(shù)據(jù)傳送給CPU內(nèi)的AL/AX

例:INAL,i8;字節(jié)輸入:AL+I/O端口(i8直接尋址)

INAL,DX;字節(jié)輸入:AL+I/O端口(DX間接尋址)

INAX,i8;字輸入:AX+I/O端口(i8直接尋址)

INAX,DX;字輸入:AX+I/O端口(DX間接尋址)

55、字量數(shù)據(jù)傳送實(shí)際上實(shí)現(xiàn)了連續(xù)的兩個(gè)端口地址的字節(jié)量傳送

例:inal,21h

movah,al

inal,20h;直接尋址,字節(jié)量輸入等同于下一句

inax,20h;直接尋址,字量輸入子也等同于下一句

movdx,20h

inax,dx;I間接尋址,字量輸入

56、輸出指令OUT::將CPU內(nèi)的AL/AX數(shù)據(jù)傳送給外設(shè)

例:OUTi8,AL;字節(jié)輸出:I/O端口=AL(i8直接尋址)

OUTDX,AL-;字節(jié)輸出:I/O端口一AL(DX間接尋址)

OUTi8,AX;字輸出:1/0端口-AX68直接尋址)

OUTDX,AX:;字輸出:I/O端口-AX(DX間接尋址)

57、間接尋址,字節(jié)量輸出實(shí)例:

movdx,3fch

moval,80h

outdx,al

58、算術(shù)運(yùn)算類指令

>四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的一種操作。算術(shù)運(yùn)算指令實(shí)現(xiàn)二進(jìn)制(和十進(jìn)制)數(shù)

據(jù)的四則運(yùn)算

>請(qǐng)注意算術(shù)運(yùn)算類指令對(duì)標(biāo)志的影響

■掌握:ADD/ADC/INC>SUB/SBB/DEC/NEG/CMP

■熟悉:MUL/IMUL、DIV/IDIV

■理解:CBW/CWD>DAA/DAS、AAA/AAS/AAM/AAD

59、加法指令A(yù)DD

>ADD指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)

>ADD指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置

格式:ADDreg,imm/reg/mein;reg<-reg+imm/reg/mem

ADDmem,iinm/reg;mem-mem+imm/reg

例:moval,Ofbh;al=Ofbhaddal,07h;al=02h

movwordptr[200h],4652h;|200h]=4652h

movbx,lfeh;bx=lfehaddal,bl;al=00h

addwordptr[bx+2],()f()f()h;[200h]=3742h

60、帶進(jìn)位加法指令A(yù)DC

>ADC指令將源與目的操作數(shù)相加,再加上進(jìn)位CF標(biāo)志,結(jié)果送到目的操作數(shù)

>ADC指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置

>ADC指令主要與ADD配合,實(shí)現(xiàn)多精度加法運(yùn)算

格式:ADCreg,imm/reg/mem;reg*-reg+imm/reg/mem+CF

ADCmem,imm/reg;mem+mem+imm/reg+CF

61、增量指令I(lǐng)NC(increment)

>INC指令對(duì)操作數(shù)加1(增量)

>INC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志

格式:INCreg/mem;reg/mem*-reg/mem+1

62、減法指令SUB(subtract)

ASUB指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)

>SUB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志

格式:SUBreg,imm/reg/mem;reg-reg-imm/reg/mem

SUBmem,imm/reg;mem-mem-imm/reg

63、帶借位減法指令SBB

SBB指令將目的操作數(shù)減去源操作數(shù),再減去借位CF(進(jìn)位),結(jié)果送到目的操作數(shù)。

>SBB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志

>SBB指令主要與SUB配合,實(shí)現(xiàn)多精度減法運(yùn)算

格式:SBBreg,imm/reg/mem;reg-reg-imm/reg/mem-CF

SBBmem,imm/reg;mem-mem-imm/reg-CF

64>減量指令DEC(decrement)

>DEC指令對(duì)操作數(shù)減1(減量)

>DEC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志

格式:DECreg/mem;reg/memreg/mem-1

?INC指令和DEC指令都是單操作數(shù)指令

?主要用于對(duì)計(jì)數(shù)器和地址指針的調(diào)整

65、求補(bǔ)指令NEG(negative)

>NEG指令對(duì)操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)

>求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1

>NEG指令對(duì)標(biāo)志的影響與用零作減法的SUB指令一樣

格式:NEGreg/mem;reg/mem^0—reg/mem

例:movax,0ff64h

negal;ax=ff9ch,OF=0^SF=1>ZF=O、PF=KCF=1

66、比較指令CMP(compare)

>CMP指令將目的操作數(shù)減去源操作數(shù),按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志

>CMP指令執(zhí)行的功能與SUB指令,但結(jié)果不回送目的操作數(shù)

格式:CMPreg,imm/reg/mem;reg—imm/reg/mem

CMPmem,imm/reg;mem-imm/reg

實(shí)例:cmpal,100;al-100

jbbelow;al<100,跳轉(zhuǎn)到below執(zhí)行

立執(zhí)行比較指令之后,可以根據(jù)標(biāo)志判斷兩個(gè)數(shù)是否相等、大小關(guān)系等

67、乘法指令

MULr8/m8;無符號(hào)字節(jié)乘法;AX^-ALXr8/m8

MULrl6/ml6;無符號(hào)字乘法;DX.AX^AXXrl6/ml6

IMULr8/m8;有符號(hào)字節(jié)乘法;AX^-ALXr8/m8

IMULrl6/ml6;有符號(hào)字乘法;DX?AX-AXXrl6/ml6

68、乘法指令的功能

>乘法指令分無符號(hào)和有符號(hào)乘法指令

>乘法指令的源操作數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX

字節(jié)量相乘:AL與r8/m8相乘,得到16位的結(jié)果,存入AX

字量相乘:AX與rl6/ml6相乘,得到32位的結(jié)果,其高字存入DX,低字存入AX

>乘法指令利用OF和CF判斷乘積的高一半是否具有有效數(shù)值

69、乘法指令對(duì)標(biāo)志的影響

A乘法指令如下影響OF和CF標(biāo)志:

MUL指令——若乘積的高一半(AH或DX)為0,貝!|OF=CF=0;否貝!IOF=CF=1

IMUL指令——若乘積的高一半是低一半的符號(hào)擴(kuò)展,則OF=CF=0;否則均為1

>乘法指令對(duì)其他狀態(tài)標(biāo)志沒有定義

注意:對(duì)標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(cè)(就是誰也不知道

是0還是1);對(duì)標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)

70、除法指令

DIVr8/m8;無符號(hào)字節(jié)除法:AL-AX+r8/m8的商,Ah-AX+r8/m8的余數(shù)

DIVrl6/ml6;無符號(hào)字除法:;AX*-DX.AX4-rl6/ml6的商,DX-DX.AX+rl6/ml6

的余數(shù)

IDIVr8/m8;有符號(hào)字節(jié)除法:AL-AX+r8/m8的商,Ah*AX+r8/m8的余數(shù)

IDIVrl6/ml6;有符號(hào)字除法:;AX*-DX.AX^-rl6/ml6的商,DX-DX.AX+rl6/ml6

的余數(shù)

71、除法指令的功能

>除法指令分無符號(hào)和有符號(hào)除法指令

>除法指令的除數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX作為被除數(shù)

■字節(jié)量除法:AX除以r8/m8,8位商存入AL,8位余數(shù)存入AH

■字量除法:DX.AX除以rl6/ml6,16位商存入AX,16位余數(shù)存入DX

>除法指令對(duì)標(biāo)志沒有定義

>除法指令會(huì)產(chǎn)生結(jié)果溢出

72、除法錯(cuò)中斷

>當(dāng)被除數(shù)遠(yuǎn)大于除數(shù)時(shí),所得的商就有可能超出它所能表達(dá)的范圍。如果存放商

的寄存器AL/AX不能表達(dá),便產(chǎn)生溢出,80x86CPU中就產(chǎn)生編號(hào)為0的內(nèi)部中斷

——除法錯(cuò)中斷

1、對(duì)DIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商超過8位,或者在字除時(shí)商超過16位

則發(fā)生除法溢出

2、對(duì)IDIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商不在-128?127范圍內(nèi),或者在字除時(shí)

商不在-32768?32767范圍內(nèi),則發(fā)生除法溢出

73、符號(hào)擴(kuò)展指令

CBW;AL的符號(hào)擴(kuò)展至AH

;如AL的最高有效位是0,則AH=00

;AL的最高有效位為1,則AH=FFH。AL不變

CWD;AX的符號(hào)擴(kuò)展至DX

;如AX的最高有效位是(),則DX=()()

;AX的最高有效位為1,貝!|DX=FFFFH。AX不變

>符號(hào)擴(kuò)展指令常用于獲得倍長的數(shù)據(jù)

74、符號(hào)擴(kuò)展的概念:符號(hào)擴(kuò)展是指用一個(gè)操作數(shù)的符號(hào)位(即最高位)形成另一個(gè)操作

數(shù),后一個(gè)操作數(shù)的各位是全0(正數(shù))或全1(負(fù)數(shù))。符號(hào)擴(kuò)展不改變數(shù)據(jù)大小

cwd;DX.AX+AX

idivbx;AX-DX.AX+BX

?利用符號(hào)擴(kuò)展指令得到除法指令所需要的倍長于除數(shù)的被除數(shù)

C對(duì)無符號(hào)數(shù)除法應(yīng)該采用直接使高8位或高16位清0的方法,獲得倍長的被除數(shù)

75、十進(jìn)制調(diào)整指令

>十進(jìn)制數(shù)調(diào)整指令對(duì)二進(jìn)制運(yùn)算的結(jié)果進(jìn)行十進(jìn)制調(diào)整,以得到十進(jìn)制的運(yùn)算結(jié)果

A分成壓縮BCD碼和非壓縮BCD碼調(diào)整

76、BCD碼

>二進(jìn)制編碼的十進(jìn)制數(shù):一位十進(jìn)制數(shù)用4位二進(jìn)制編碼來表示

77、壓縮BCD碼加、減調(diào)整指令

ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8)

DAA;AL-將AL的加和調(diào)整為壓縮BCD碼

(SUBAL,i8/r8/m8)

(SBBAL,i8/r8/m8)

DAS;AL-將AL的減差調(diào)整為壓縮BCD碼

A78、使用DAA或DAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令

>DAA和DAS指令對(duì)OF標(biāo)志無定義,按結(jié)果影響其他標(biāo)志,例如CF反映壓縮BCD

碼相加或減的進(jìn)位或借位狀態(tài)

78、壓縮BCD加法

moval,68h;al=68h,壓縮BCD碼表示真值68

movbl,28h;bl=28h,壓縮BCD碼表示真值28

addal,bl;二進(jìn)制力口法:al=68h+28h=90h

daa;十進(jìn)制調(diào)整:al=96h;實(shí)現(xiàn)壓縮BCD碼加法:68+28=96

79、非壓縮BCD碼加、減調(diào)整指令

(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8)

AAA;AL*將AL的加和調(diào)整為非壓縮BCD碼

;AH-AH+調(diào)整的進(jìn)位

(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8)

AAS;AL-將AL的減差調(diào)整為非壓縮BCD碼

;AH+AH-?調(diào)整的借位

80、非壓縮BCD碼乘、除調(diào)整指令

(MULr8/m8)

AAM;AX*將AX的乘積調(diào)整為非壓縮BCD碼

AAD;AX-將AX中非壓縮BCD碼擴(kuò)展成二進(jìn)制數(shù)(DIVr8/m8)

81、AAM指令跟在字節(jié)乘MUL之后,將乘積調(diào)整為非壓縮BCD碼

>AAD指令跟在字節(jié)除DIV之前,先將非壓縮BCD碼的被除數(shù)調(diào)整為二進(jìn)制數(shù)

>AAM和AAD指令根據(jù)結(jié)果設(shè)置SF、ZF和PF,但對(duì)OF、CF和AF無定義

82、非壓縮BCD加

movax,0608h;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h;bl=09h,非壓縮BCD碼表示真值9

addal,bl;二進(jìn)制力口法:al=08h+09h=llh

aaa;十進(jìn)制調(diào)整:ax=0707h;實(shí)現(xiàn)非壓縮BCD碼加法:68+9=77

83、非壓縮BCD減

movax,0608h;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h;bl=09h,非壓縮BCD碼表示真值9

subal,bl;二進(jìn)制減法:al=08h-09h=fTh

aas;十進(jìn)制調(diào)整:ax=0509h;實(shí)現(xiàn)非壓縮BCD碼減法:68-9=59

83、非壓縮BCD乘

movax,0608h;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h;bl=09h,非壓縮BCD碼表示真值9

mulbl;二進(jìn)制乘法:al=08hX09h=0048h

aam;十進(jìn)制調(diào)整:ax=0702h;實(shí)現(xiàn)非壓縮BCD碼乘法:8X9=72

84、非壓縮BCD除

movax,0608h;ax=0608h,非壓縮BCD碼表示真值68

movbl,09h;bl=09h,非壓縮BCD碼表示真值9

aams二進(jìn)制擴(kuò)展:ax=68=0044h

divbl;除法運(yùn)算:商al=07h,余數(shù)ah=05h

;實(shí)現(xiàn)非壓縮BCD碼初法:68+9=7(余5)

85REP重復(fù)前綴指令

REP;每執(zhí)行一次串指令,CX減1;直到CX=0,重復(fù)執(zhí)行結(jié)束

86重復(fù)串傳送

movsi,offsetsource

movdi,offsetdestination

movex,100;ex-傳送次數(shù)

cld

repmovsb

(again:movsb;傳送一個(gè)字節(jié)

decex;傳送次數(shù)減1

jnzagain;判斷傳送次數(shù)ex是否為0

;不為0(ZF=0),則轉(zhuǎn)移again位置執(zhí)行

;否則,結(jié)束

)

87重復(fù)串存儲(chǔ)

movax,0

movdi,0

movcx,8000h

eld

repstosw

(again:stosw;傳送一個(gè)字

decex;傳送次數(shù)減1

jnzagain;判斷傳送次數(shù)ex是否為0

)

88REPZ重復(fù)前綴指令

REPZ;每執(zhí)行一次串指令,CX減1

;并判斷ZF是否為0,

;只要CX=0或ZF=0,重復(fù)執(zhí)行結(jié)束

89REPNZ重復(fù)前綴指令

REPZ;每執(zhí)行一次串指令,CX減1

;并判斷ZF是否為1,

;只要CX=0或ZF=1,重復(fù)執(zhí)行結(jié)束

比較字符串

movsi,offsetstringl

movdi9offsetstring!

movcx9count

cld

repzcmpsb;重復(fù)比較兩個(gè)字符

jnzunmat;字符串不等,轉(zhuǎn)移

moval,0;字符串相等,設(shè)置00h

jmpoutput;轉(zhuǎn)向output

unmat:moval,Offh;設(shè)置ffh

output:movresult,al;輸出結(jié)果標(biāo)記

90重復(fù)比較的解釋

>指令repzcmpsb結(jié)束重復(fù)執(zhí)行的情況

①ZF=0,即出現(xiàn)不相等的字符

②CX=0,即比較完所有字符:

這種情況下,如果ZF=0,說明最后一個(gè)字符不等;而ZF=1表示所有字符比較后都相等,

也就是兩個(gè)字符串相同

>所以,重復(fù)比較結(jié)束后,jnzunmat指令的條件成立ZF=0,表示字符串不相等

91查找字符串

movdi,offsetstring

moval,20h

movcx9count

cld

repnzscasb;搜索

jzfound;為0(ZF=1),發(fā)現(xiàn)空格

...;不含空格,則繼續(xù)執(zhí)行

found:...

85、教學(xué)要求

1.熟悉80x86的基本參數(shù)、堆棧工作原理、指令對(duì)標(biāo)志的影響、符號(hào)擴(kuò)展的含義、壓

縮和非壓縮BCD的格式

2.掌握基本指令:MOV/XCHG/XLAT,PUSH/POP>LEA;CLC/STC/STC,

CLD/STD;ADD/ADC/INC、SUB/SBB/DEC/CMP/NEG、CBW/CWD

3.熟悉串操作尋址特點(diǎn)

4.掌握基本指令:AND/OR/XOR/NOT/TEST、SHL/SHR/SAR、ROL/ROR

/RCL/RCR^MOVS/LODS/STOS>REP

5.熟悉特色指令:CMPS/SCAS

6.了解不常使用的指令:REPZ/REPNZ

第四章

重點(diǎn)掌握:

/程序的格式、開發(fā)方法

/參數(shù)的表達(dá)、變量的定義

/變量和標(biāo)號(hào)的屬性

1源程序分別用兩種格式書寫

?第一種格式從MASM5.0開始支持:簡化段定義格式

?:?第二種格式MASM5.0以前就具有:完整段定義格式

2lt301a.asm(文件名)

.modelsmall;定義程序的存儲(chǔ)模式

.stack;定義堆棧段

.data;定義數(shù)據(jù)段

stringdb'Hello,Everybody!\0dh,0ah,,$,

;在數(shù)據(jù)段定義要顯示的字符串

.code;定義代碼段

.startup;程序起始點(diǎn),建立DS、SS

movdx,offsetstring;指定字符串

movah,9

int21h;利用功能調(diào)用顯示信息

.exit0;程序結(jié)束點(diǎn),返回DOS

end;匯編結(jié)束

3SampleA.ASM

?modelsmall

.stack

.data

...;在數(shù)據(jù)段定義數(shù)據(jù)

.code

.startup;(注1)

...;在代碼段填入指令序列

.exit0;(注2)

...;子程序代碼

end

4;SampleC.ASM

.modelsmall

.stack

.data

...;在數(shù)據(jù)段定義數(shù)據(jù)

.code

start:movax,@data

movds,ax

...;在代碼段填入指令序列

movax,4c00h

int21h

...;子程序代碼

endstart

5lt301b.asm(文件名)

stacksegmentstack;定義堆棧段

dw512dup(?)

;堆棧段有512字(1024字節(jié))空間

stackends;堆棧段結(jié)束

datasegment;定義數(shù)據(jù)段

stringdb'Hello,Everybody!\()dh,()ah,,$,

dataends

codesegment'code,;定義代碼段

assumecs:code,ds:data9ss:stack

start:movax,data;建立DS段地址

movds,ax

movdx,offsetstring

movah,9

int21h

movax,4c00h

int21h;利用功能調(diào)用返回DOS

codeends;代碼段結(jié)束

endstart

;匯編結(jié)束,同時(shí)指明程序起始點(diǎn)

6完整段定義格式MASM5.x支持

SampleB.ASM

stacksegmentstack

dw512dup(?)

stackends

datasegment

...;在數(shù)據(jù)段定義數(shù)據(jù)

dataends

codesegment'code'

assumecs:code9ds:data,ss:stack

start:movax,data

movds,ax

...;在代碼段填入指令序列

movax,4c00h

int21h

...;子程序代碼

codeends

endstart

7硬指令——使CPU產(chǎn)生動(dòng)作、并在程序執(zhí)行時(shí)才處理的語句,就是第3章學(xué)習(xí)的處理

器指令

8偽指令(Directive)——不產(chǎn)生CPU動(dòng)作、在程序執(zhí)行前由匯編程序處理的說明性語句,

例如,數(shù)據(jù)說明、變量定義等等

9偽指令與具體的處理器類型無關(guān),但與匯編程序的版本有關(guān)

10匯編語言程序的過程:(即匯編語言程序的開發(fā)方法)編輯:源程序:文件名.asm;匯

編:目標(biāo)模塊:文件名.obj;連接:可執(zhí)行文件:文件名.exe;調(diào)試:應(yīng)用程序

11匯編是將源程序翻譯成由機(jī)器代碼組成的目標(biāo)模塊文件的過程

12連接程序能把一個(gè)或多個(gè)目標(biāo)文件和庫文件合成一個(gè)可執(zhí)行程序

13經(jīng)匯編、連接生成的可執(zhí)行程序在操作系統(tǒng)下只要輸入文件名就可以運(yùn)行:

It301a操作系統(tǒng)裝載該文件進(jìn)入主存,并開始運(yùn)行

14完整段定義由SEGMENT和ENDS這一對(duì)偽指令實(shí)現(xiàn),SEGMENT偽指令定義一個(gè)邏

輯段的開始,ENDS偽指令表示一個(gè)段的結(jié)束

>段定義指令后的4個(gè)關(guān)鍵字用于確定段的各種屬性,堆棧段要采用stack組合類型,

代碼段應(yīng)具有,code,類別,其他為可選屬性參數(shù)

15段定位(align)屬性

>指定邏輯段在主存儲(chǔ)器中的邊界,可為:

BYTE段開始為下一個(gè)可用的字節(jié)地址(xxxxxxxxb)

WORD段開始為下一個(gè)可用的偶數(shù)地址(xxxxxxxOb)

DWORD段開始為下一個(gè)可用的4倍數(shù)地址(xxxxxxOOb)

PARA段開始為下一""b可用的節(jié)地址(xxxx0000b)

PAGE段開始為下一個(gè)可用的頁地址(00000000b)

>簡化段定義偽指令的代碼和數(shù)據(jù)段默認(rèn)采用WORD定位,堆棧段默認(rèn)采用PARA

定位

>完整段定義偽指令的默認(rèn)定位屬性是PARA,其低4位已經(jīng)是0,所以默認(rèn)情況下

數(shù)據(jù)段的偏移地址從0開始

16段組合(combine)屬性

>指定多個(gè)邏輯段之間的關(guān)系,可為:

PRIVATE本段與其他段沒有邏輯關(guān)系,不與其他段合并,每段都有自己的段地址。這

是完整段定義偽指令默認(rèn)的段組合方式

PUBLIC連接程序把本段與所有同名同類型的其他段相鄰地連接在一起,然后為所有這些

段指定一個(gè)共同的段地址,也就是合成一個(gè)物理段。這是簡化段定義偽指令默認(rèn)的段組合

STACK本段是堆棧的一部分,連接程序?qū)⑺蠸TACK段按照與PUBLIC段的同樣方式

進(jìn)行合并。這是堆棧段必須具有的段組合

17段字(use)屬性

>為支持32位段而設(shè)置的屬性

>對(duì)于16位x86CPU來說,它默認(rèn)是16位段,即USE16

而對(duì)于匯編32位x86CPU指令時(shí),它默認(rèn)采用32位段,即USE32;但可以使用USE16

指定標(biāo)準(zhǔn)的16位段

>編寫運(yùn)行于實(shí)地址方式(8086工作方式)的匯編語言程序,必須采用16位段

18段類別(class)屬性

>當(dāng)連接程序組織段時(shí),將所有的同類別段相鄰分配

>段類別可以是任意名稱,但必須位于單引號(hào)中

>大多數(shù)MASM程序使用‘code,、'data,和,stack,來分別指名代碼段、數(shù)據(jù)段和堆棧

段,以保持所有代碼和數(shù)據(jù)的連續(xù)

19END[標(biāo)號(hào)]

>指示匯編程序MASM到此結(jié)束匯編過程

>源程序的最后必須有一條END語句

>可選的標(biāo)號(hào)用于指定程序開始執(zhí)行點(diǎn),連接程序?qū)?jù)此設(shè)置CS:IP值

>采用了.startup偽指令就不需要再用“end標(biāo)號(hào)”指明開始執(zhí)行點(diǎn),但還要有end

偽指令

注意:程序終止和匯編結(jié)束是兩碼事

20語句格式

執(zhí)行性語句——由硬指令構(gòu)成的語句,它通常對(duì)應(yīng)一條機(jī)器指令,出現(xiàn)在程序的代碼段中:

標(biāo)號(hào):硬指令助記符操作數(shù),操作數(shù);注釋

說明性語句——由偽指令構(gòu)成的語句,它通常指示匯編程序如何匯編源程序:

名字偽指令助記符參數(shù),參數(shù),…;注釋

21標(biāo)號(hào)、名字與標(biāo)識(shí)符

>標(biāo)號(hào)是反映硬指令位置(邏輯地址)的標(biāo)識(shí)符,后跟一個(gè)冒號(hào)分隔

>名字是反映偽指令位置(邏輯地址)和屬性的標(biāo)識(shí)符,后跟空格或制表符分隔,沒

有一個(gè)冒號(hào)

>標(biāo)識(shí)符(Identifier)一般最多由26個(gè)字母、數(shù)字及規(guī)定的特殊符號(hào)(如一、$、?、

@)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識(shí)符中的字母大小寫

>一個(gè)程序中,每個(gè)標(biāo)識(shí)符的定義是唯一的,還不能是匯編語言采用的保留字

22保留字

>保留字(ReservedWord)是匯編程序已經(jīng)利用的標(biāo)識(shí)符,主要有:

o硬指令助記符——例如:MOV、ADD

o偽指令助記符——例如:DB、EQU

o操作符——例如:OFFSET、PTR

o寄存器名——例如:AX、CS

o預(yù)定義符號(hào)----例如:@data

o匯編語言大小寫不敏感

23助記符

>硬指令助記符可以是任何一條處理器指令,也可以是一條宏指令

24操作數(shù)與參數(shù)

>處理器指令的操作數(shù)可以是立即數(shù)、寄存器和存儲(chǔ)單元

>偽指令的參數(shù)可以是常數(shù)、變量名、表達(dá)式等,可以有多個(gè),參數(shù)之間用逗號(hào)分隔

25注釋

>語句中由分號(hào)“;”開始的部分為注釋內(nèi)容,用以增加源程序的可讀性

>必要時(shí),一個(gè)語句行也可以由分號(hào)開始作為階段性注釋

>匯編程序在翻譯源程序時(shí)將跳過該部分,不對(duì)它們做任何處理

26分隔符

>語句的4個(gè)組成部分要用分隔符分開

>標(biāo)號(hào)后用冒號(hào),注釋前用分號(hào)

>操作數(shù)之間和參數(shù)之間使用逗號(hào)分隔

>其他部分通常采用空格或制表符

>多個(gè)空格和制表符的作用與一個(gè)相同

>MASM支持續(xù)行符巴”

27匯編語言源程序的組成原則

>完整的匯編語言源程序由段組成

>一個(gè)匯編語言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之

間的順序可隨意排列

>需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有

一個(gè)起始點(diǎn)

>所有的可執(zhí)行性語句必須位于某一個(gè)代碼段內(nèi),說明性語句可根據(jù)需要位于任一段

內(nèi)

>通常,程序還需要一個(gè)堆棧段

28數(shù)值型參數(shù)

>在源程序語句格式的4個(gè)組成部分中,參數(shù)是指令的操作對(duì)象(在學(xué)習(xí)硬指令時(shí)被

稱為操作數(shù)),參數(shù)之間用逗號(hào)分隔

A參數(shù)根據(jù)指令不同可以沒有,可以有1個(gè)、2個(gè)或多個(gè)

>匯編語言程序中,指令參數(shù)有數(shù)值型,它的主要形式是常數(shù)和數(shù)值表達(dá)式;

>硬指令的操作數(shù)有立即數(shù);立即數(shù)就要用數(shù)值型參數(shù)表達(dá)

29常數(shù)

>常數(shù)(常量)表示一個(gè)固定的數(shù)值

>它又分成多種形式:

(1)十進(jìn)制常數(shù)(2)十六進(jìn)制常數(shù)(3)二進(jìn)制常數(shù)(4)八進(jìn)制常數(shù)(5)字符串常數(shù)

(6)符號(hào)常數(shù)

30數(shù)值表達(dá)式

>數(shù)值表達(dá)式一般是指由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表達(dá)式

>匯編程序在匯編過程中計(jì)算表達(dá)式,最終得到一個(gè)數(shù)值

>程序運(yùn)行之前,就已經(jīng)計(jì)算出了表達(dá)式;所以,程序運(yùn)行速度沒有變慢,但增強(qiáng)程

序的可讀性

>MASM對(duì)除偽指令外各種匯編時(shí)處理的指令統(tǒng)稱為操作符(Operator)

31運(yùn)算符

>算術(shù)運(yùn)算符:+-*/MOD或叫:力口、減、乘、除、取余

>邏輯運(yùn)算符:ANDORXOR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論