版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寫字樓消防安全管理方案
- 幼兒園教學(xué)評(píng)估標(biāo)準(zhǔn)與改進(jìn)方案
- 互聯(lián)網(wǎng)行業(yè)入職培訓(xùn)課件全集
- 城鎮(zhèn)燃?xì)獍踩?guī)范操作流程手冊(cè)
- 2026年時(shí)尚設(shè)計(jì)創(chuàng)新趨勢(shì)報(bào)告
- 工廠污染治理環(huán)境監(jiān)測(cè)方案
- 汽車銷售人員產(chǎn)品知識(shí)及客戶溝通技巧
- 應(yīng)急預(yù)案臭氧中毒(3篇)
- 孔口墜落應(yīng)急預(yù)案(3篇)
- 引橋擋墻施工方案(3篇)
- 長(zhǎng)期合作協(xié)議書合同書
- 浙江省小型液化天然氣氣化站技術(shù)規(guī)程
- ?;钒踩芾砼嘤?xùn)課件
- 2023年高級(jí)售后工程師年度總結(jié)及下一年展望
- 小兒鞘膜積液
- 畢業(yè)設(shè)計(jì)粘土心墻土石壩設(shè)計(jì)含計(jì)算書cad圖
- 黑龍江省控制性詳細(xì)規(guī)劃編制規(guī)范
- 6工程竣工驗(yàn)收交付證明書
- 《俠客風(fēng)云傳前傳》支線流程攻略1.0.2.4
- GB/T 12325-2008電能質(zhì)量供電電壓偏差
- 《抖音短視頻營(yíng)銷存在的問題及對(duì)策10000字》
評(píng)論
0/150
提交評(píng)論