匯編語言第五章_第1頁
匯編語言第五章_第2頁
匯編語言第五章_第3頁
匯編語言第五章_第4頁
匯編語言第五章_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

分支和循環(huán)上章回顧Mov,xchgAdd,sub,inc,dec,negMul,imul,div,idivCbw,cwd,cdqChap5BranchingandLooping2本章內(nèi)容無條件轉(zhuǎn)移條件轉(zhuǎn)移、比較指令循環(huán)結(jié)構(gòu)數(shù)組Chap5BranchingandLooping35.1無條件轉(zhuǎn)移與高級(jí)語言的goto語句類似匯編代碼為:

jmp

statementlabel

statementlabel語句標(biāo)號(hào)與其他匯編語言中語句的名字段一致Chap5BranchingandLooping4Chap5BranchingandLooping5例子1

jmp

quit;exitfromprogram … …

quit:INVOKEExitProcess,0;exitwithreturncode0 … …向前引用

例子2一個(gè)重復(fù)輸入數(shù)據(jù)的程序,在每個(gè)數(shù)輸入之后,顯示迄今為止所有數(shù)的個(gè)數(shù)、累計(jì)和以及平均值。向后引用Chap5BranchingandLooping6代碼Jmp指令Jmp指令除了可以跟語句標(biāo)號(hào)外,還有其他形式Jmpedx

跳轉(zhuǎn)至寄存器存儲(chǔ)的地址Jmptarget

跳轉(zhuǎn)至存儲(chǔ)器存儲(chǔ)的地址Jmpdwordptr[ebx]寄存器間接尋址,首先找到寄存器中存儲(chǔ)的數(shù)據(jù),再到該數(shù)據(jù)表示的地址中找到需要跳轉(zhuǎn)的地址。Chap5BranchingandLooping7Jmp指令每條相對(duì)的轉(zhuǎn)移指令包含相對(duì)jmp指令本身的目標(biāo)位置,這個(gè)位移量加上下一條指令的地址就是轉(zhuǎn)移的目標(biāo)地址。偏移量是一個(gè)有符號(hào)數(shù),對(duì)于向前引用,它是正數(shù);而對(duì)于向后引用,它是負(fù)數(shù)。Chap5BranchingandLooping8Chap5BranchingandLooping9.DATA ... addrStoreDWORD? ....CODE ...doAgain: ...(3指令)

jmp doAgain

...(200指令)

jmp doAgain ...

jmp addrStore ...

jmp eax ...

jmp [edi]

5.2條件轉(zhuǎn)移、比較指令和if結(jié)構(gòu)在80*86機(jī)器語言中,條件轉(zhuǎn)移指令可以實(shí)現(xiàn)if結(jié)構(gòu)、其他選擇以及循環(huán)結(jié)構(gòu)。條件轉(zhuǎn)移指令有很多,每條指令格式如下:

j-目標(biāo)語句

其中助記符的最后一部分,定義了執(zhí)行轉(zhuǎn)移的條件。如果條件滿足,則反之轉(zhuǎn)移;否則執(zhí)行下一條指令。

jzendwhile

如果結(jié)果為0,即標(biāo)志位ZF為1,則轉(zhuǎn)移到標(biāo)號(hào)endwhile的語句。Chap5BranchingandLooping10比較指令cmp指令形式

cmp操作數(shù)1,操作數(shù)2

計(jì)算操作數(shù)1減去操作數(shù)2的差值來進(jìn)行比較,就像一條sub指令。根據(jù)差值以及作減法時(shí)是否產(chǎn)生借位,確定標(biāo)志位的設(shè)置。影響的標(biāo)志位為AF,CF,OF,SF,PF和ZF。主要學(xué)習(xí)對(duì)CF,OF,SF,ZF的影響。

cmpeax,356

cmppattern,0d3a6h

cmpbh,‘$’cmp100,total;非法Chap5BranchingandLooping11122023/1/15例題1:求絕對(duì)值高級(jí)語言if結(jié)構(gòu)Ifeax>0

result=eaxElse

result=-eax;

匯編語言

cmpeax,0jg

nonneg

;大于跳轉(zhuǎn)

neg

eax;取反

nonneg:

movresult,eax;計(jì)算EAX的絕對(duì)值132023/1/15例題2:輸入一個(gè)分?jǐn)?shù)判斷其屬于哪個(gè)等級(jí),等級(jí)分別為’A’

(80-100),’B’(60-80),’C’(0-59)。高級(jí)語言if結(jié)構(gòu)Ifvalue>=80

result=‘A’Elseifvalue>=60

result=‘B’Elseresult=‘C’

匯編語言

cmpvalue,80jb

djB;小于80,跳轉(zhuǎn)

movresult,‘A’djB:cmpvalue,60jb

djC;小于60,跳轉(zhuǎn)

movreslut,‘B’djC:movreslut,‘C’×142023/1/15例題2:輸入一個(gè)分?jǐn)?shù)判斷其屬于哪個(gè)等級(jí),等級(jí)分別為’A’

(80-100),’B’(60-80),’C’(0-59)。匯編語言

cmpvalue,80jb

djB;小于跳轉(zhuǎn)

movresult,‘A’

jmpenddjdjB:cmpvalue,60jb

djC;小于,跳轉(zhuǎn)

movreslut,‘B’

jmpenddjdjC:movreslut,‘C’enddj:例題3Chap5BranchingandLooping15高級(jí)語言if結(jié)構(gòu)If(total>=100)or(count=10)value==value+total;

匯編語言:

cmptotal,100

jge

addvalue;大于或等于跳轉(zhuǎn)

cmpcx,10

jneendadd;不等于跳轉(zhuǎn)addvalue:movebx,valueaddtotal,ebxendadd:

例題4Chap5BranchingandLooping16高級(jí)語言if結(jié)構(gòu)If(total>=100)and(count=10)value==value+total;

匯編語言:

cmptotal,100

jl

endadd

;小于跳轉(zhuǎn)

cmpcount,10

jneendadd;不等于跳轉(zhuǎn)addvalue:movbx,valueaddtotal,bxendadd:

課堂練習(xí)P102期中作業(yè)實(shí)驗(yàn)2.3字符顯示題目:輸入一個(gè)字符,找出它的前導(dǎo)字符和后續(xù)字符,并按順序顯示這三個(gè)字符。實(shí)驗(yàn)要求:程序從鍵盤接收用戶輸入的一個(gè)字符后,然后分別找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示這三個(gè)字符。在用戶輸入和顯示字符之前都要有相應(yīng)的提示信息。提示:從鍵盤輸入一個(gè)字符,這個(gè)字符前導(dǎo)字符和后續(xù)字符的ASCII碼分別少1或多1。然后分別顯示這三個(gè)字符。Chap5BranchingandLooping18期中作業(yè)實(shí)驗(yàn)3.2計(jì)算立方值題目:計(jì)算給定數(shù)字的立方值實(shí)驗(yàn)要求:從鍵盤輸入0至9中任一自然數(shù)x,求其立方值。若輸入的字符不是0至9之間的數(shù)字,則顯示錯(cuò)誤信息,并要求重新輸入。要求有信息提示輸入數(shù)字、顯示計(jì)算結(jié)果和提示輸入錯(cuò)誤。提示:用戶輸入字符首先判斷是否是0至9之間的字符,如果是,則轉(zhuǎn)換為整數(shù)并計(jì)算其立方值,然后顯示結(jié)果;如果不是,則顯示輸入錯(cuò)誤信息并等待用戶重新輸入。Chap5BranchingandLooping195.3循環(huán)結(jié)構(gòu)的實(shí)現(xiàn)大多數(shù)程序都有循環(huán)結(jié)構(gòu),常用的循環(huán)結(jié)構(gòu)有while、until和for循環(huán)。高級(jí)語言while循環(huán)

while循環(huán)條件

{循環(huán)體}

endwhileChap5BranchingandLooping20While循環(huán)高級(jí)語言實(shí)現(xiàn)while(sum<1000)

{循環(huán)體}endwhileChap5BranchingandLooping21匯編語言實(shí)現(xiàn)whilesum:cmpsum,1000

jnlendwhile

;不小于跳轉(zhuǎn)

jmp

whilesum

endwhile:例題1求1+2+3+…+99+100的值Chap5BranchingandLooping22高級(jí)語言while結(jié)構(gòu)count=1sum=0whilecount<=100sum=sum+count;count++;endwhile

匯編語言:

movcx,1movsum,0whileadd:cmpcx,100

jg

endwhile;大于跳轉(zhuǎn)

addsum,cxinccx

jmpwhileaddendwhile:

While循環(huán)高級(jí)語言實(shí)現(xiàn)while(sum<1000)

and(count<=24)

{循環(huán)體}endwhileChap5BranchingandLooping23匯編語言實(shí)現(xiàn)whilesum:cmpsum,1000

jnl

endwhile;不小于跳轉(zhuǎn)

cmpcount,24

jnle

endwhile;不小于等于跳轉(zhuǎn)

jmp

whilesum

endwhile:While循環(huán)高級(jí)語言實(shí)現(xiàn)while(sum<1000)

or(count<=24)

{循環(huán)體}endwhileChap5BranchingandLooping24匯編語言實(shí)現(xiàn)whilesum:cmpsum,1000

jl

body;小于跳轉(zhuǎn)

cmpcount,24

jnle

endwhile;不小于等于跳轉(zhuǎn)

body:

jmp

whilesum

endwhile:Until循環(huán)高級(jí)語言u(píng)ntil循環(huán)

until結(jié)束條件

{循環(huán)體}

enduntil循環(huán)體至少循環(huán)一次,然后檢查結(jié)束條件。如果不成立,則再次執(zhí)行循環(huán)體。如果成立,則退出循環(huán)。Chap5BranchingandLooping25例題1求1+2+3+…+99+100的值Chap5BranchingandLooping26高級(jí)語言u(píng)ntil結(jié)構(gòu)count=1;sum=0;untilcount>100sum=sum+count;count++;enduntil

匯編語言:

movcx,1

movsum,0untiladd:addsum,cxinccxcmpcx,100

jnguntiladd;

不大于跳轉(zhuǎn)

enduntil:

For循環(huán)高級(jí)語言for循環(huán)for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)

{循環(huán)體}

endfor或者for(循環(huán)變量=初值to終值)

{循環(huán)體}

endforChap5BranchingandLooping27例題1求1+2+3+…+99+100的值Chap5BranchingandLooping28高級(jí)語言for結(jié)構(gòu)sum=0;for(i=1;i<=100;i++)sum=sum+i;endfor

匯編語言:

movcx,1

movsum,0foradd:cmpcx,100

jgendfor

;大于跳轉(zhuǎn)

addsum,cx

inccx

jmp

foraddendfor:

5.4匯編語言中的for循環(huán)通常循環(huán)次數(shù)是已知的情況下,用for循環(huán)結(jié)構(gòu)是最理想的。

Forindex=1tocountloop

{循環(huán)體}

Endfor

或者

Forindex=countto1loop

{循環(huán)體}

Endfor

每次循環(huán)的次數(shù)都是countChap5BranchingandLooping295.4匯編語言中的for循環(huán)上述格式的循環(huán),可以用匯編中的

loopstatementlabel注意:

Loop循環(huán)的次數(shù)由ECX的值決定,當(dāng)ECX的值是0,結(jié)束循環(huán)。

另外stetementlabel與loop語句不可以間隔太遠(yuǎn),向前127字節(jié)或向后128字節(jié)

每執(zhí)行一次循環(huán),ECX的值減少一次。Chap5BranchingandLooping305.4匯編語言中的for循環(huán)高級(jí)語言for循環(huán)結(jié)構(gòu)

Forcount=20to1loop

{循環(huán)體}

Endfor

匯編語言

movecx,20forcount:……loopforcountChap5BranchingandLooping31loop指令匯編語言中的loop指令,需要注意循環(huán)次數(shù)一開始就值為的0的情況

movecx,0forcount:……loopforcountChap5BranchingandLooping32循環(huán)次數(shù)為4294967296

movecx,number

cmpecx,0

je

endforforcount:……loopforcountendfor:5.5數(shù)組數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標(biāo)代表數(shù)據(jù)在數(shù)組中的序號(hào)。匯編語言中數(shù)組空間的聲明

nbrArrarydword20dup(?)numberbyte100dup(?)number1word-5,-4,-3,-2,-1number2word8dup(1)

Chap5BranchingandLooping335.5數(shù)組數(shù)組的訪問

number1word5,4,3,2,1獲取數(shù)組的首

溫馨提示

  • 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. 人人文庫(kù)網(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)論