版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
stack segmentstack ;定義堆棧段
dw512dup(?) ;堆棧段有512字(1024字節(jié))空間stack ends ;堆棧段結(jié)束data segment ;定義數(shù)據(jù)段string db’Hello,Everybody!’,0dh,0ah,’$’data endscode segment’code’ ;定義代碼段
assumecs:code,ds:data,ss:stackstart: movax,data ;建立DS段地址
movds,ax
movdx,offsetstring movah,9 int21h movax,4c00h int21h ;利用功能調(diào)用返回DOScode ends ;代碼段結(jié)束
endstart ;匯編結(jié)束,同時(shí)指明程序起始點(diǎn)完整段定義格式數(shù)據(jù)段堆棧段(可略)分配段寄存器首指令位置返回DOS設(shè)置DS段寄存器內(nèi)容源程序結(jié)束,第一條指令的地址這是編寫(xiě)程序的模版:極其重要。匯編語(yǔ)言的main{}在哪里?
例 dataseg ARR1DB00H,11H,22H,33HARR2DW3456H,1024,25×25,1000/3,10A0HdataendsARR100H11H22H33HARR256H34H00H04H71H02H4DH01HA0H10H0123456789ABCDEARR1的偏移地址是0ARR2的偏移地址是4MOVAX,ARR2;(AX)=?MOVAX,OFFSETARR2;(AX)=?MOVAL,ARR2+5;(AL)=?(X)MOVAX,ARR1+1;(AX)=?(X)變量在指令中的使用分析偏移地址這個(gè)·例子說(shuō)明兩點(diǎn):1。變量的值與變量的地址的區(qū)別2。變量的類型----字節(jié)與字的區(qū)別編輯文本編輯器,如EDIT.COM源程序:文件名.asm匯編匯編程序,如MASM.EXE目標(biāo)模塊:文件名.obj連接連接程序,如LINK.EXE可執(zhí)行文件:文件名.exe調(diào)試調(diào)試程序,如DEBUG.EXE應(yīng)用程序錯(cuò)誤錯(cuò)誤錯(cuò)誤錯(cuò)誤注意:MASM及LINK生成的是后綴為EXE的可執(zhí)行文件,與普通CPU的BIN或HEX文件是不同的微機(jī)原理與接口技術(shù)
第4章深入淺出學(xué)編程通過(guò)本章的學(xué)習(xí),應(yīng)當(dāng)掌握以下內(nèi)容:了解匯編語(yǔ)言的基本知識(shí)和特點(diǎn)。熟悉匯編語(yǔ)言的程序結(jié)構(gòu)、段定義以及語(yǔ)句的格式。掌握匯編語(yǔ)言常用偽指令的使用方法。熟練掌握匯編語(yǔ)言程序設(shè)計(jì)的基本方法:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)。*掌握程序設(shè)計(jì)中的宏指令和常用的系統(tǒng)功能的調(diào)用方法。是否掌握?教學(xué)目的綜合硬指令和偽指令,從程序結(jié)構(gòu)角度展開(kāi)程序設(shè)計(jì),:分支結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)子程序結(jié)構(gòu)程序設(shè)計(jì)教學(xué)重點(diǎn)1.掌握基本程序結(jié)構(gòu)――順序結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、分支結(jié)構(gòu)及其匯編語(yǔ)言程序設(shè)計(jì)2.熟悉常見(jiàn)程序設(shè)計(jì)問(wèn)題:數(shù)據(jù)范圍判斷(0~9、A~Z、a~z)字母大小寫(xiě)轉(zhuǎn)換;字符串傳送、比較等操作求最大最小值、數(shù)據(jù)求和、統(tǒng)計(jì)字符個(gè)數(shù)數(shù)組排序,查找,插入,刪除●
一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試
當(dāng)接到程序設(shè)計(jì)的任務(wù)后,首先對(duì)任務(wù)進(jìn)行詳盡的分析,搞清楚已知的數(shù)據(jù)和想要得到的結(jié)果,程序應(yīng)該完成何種的功能。匯編語(yǔ)言設(shè)計(jì)的一般步驟
一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試
根據(jù)實(shí)際問(wèn)題的要求和指令系統(tǒng)的特點(diǎn),確定解決問(wèn)題的具體步驟。根據(jù)任務(wù)要求,對(duì)不同的計(jì)算方法進(jìn)行比較,選擇最適宜的算法。
匯編語(yǔ)言設(shè)計(jì)的一般步驟
一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試將解決問(wèn)題的具體步驟用一種約定的幾何圖形、指向線和必要的文字說(shuō)明描述出來(lái)的圖形。工具:VISIO,AUTOCAD匯編語(yǔ)言設(shè)計(jì)的一般步驟
一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試
經(jīng)過(guò)上述各步驟后,解決問(wèn)題的思路已經(jīng)非常清楚,所以接下來(lái)就可以按流程圖的順序?qū)γ恳粋€(gè)功能框選用合適的指令編寫(xiě)出匯編語(yǔ)言程序。工具:UltraEdit,BeyondCompare2匯編語(yǔ)言設(shè)計(jì)的一般步驟
一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試在應(yīng)用程序的設(shè)計(jì)中,幾乎沒(méi)有一個(gè)程序只經(jīng)過(guò)一次編寫(xiě)就完全成功的,所以必須經(jīng)過(guò)上機(jī)調(diào)試。工具:MASM,TASM,Emu8086,ReallyASM,Debug匯編語(yǔ)言設(shè)計(jì)的一般步驟程序的靈魂--算法一個(gè)程序應(yīng)包括兩個(gè)方面的內(nèi)容對(duì)數(shù)據(jù)的描述:數(shù)據(jù)結(jié)構(gòu)(datastructure)對(duì)操作的描述:算法(algorithm)著名計(jì)算機(jī)科學(xué)家沃思提出一個(gè)公式:數(shù)據(jù)結(jié)構(gòu)+算法=程序數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方法+合適語(yǔ)言工具完整的程序設(shè)計(jì)應(yīng)該是:算法的概念
廣義地說(shuō),為解決一個(gè)問(wèn)題而采取的方法和步驟,就稱為“算法”。方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次對(duì)同一個(gè)問(wèn)題,可有不同的解題方法和步驟例:求簡(jiǎn)單地說(shuō):算法就是解決問(wèn)題的思路問(wèn)題是:匯編語(yǔ)言與高級(jí)語(yǔ)言的思路不太一樣用流程圖表示算法美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI(AmericanNationalStandardInstitute)規(guī)定了一些常用的流程圖符號(hào):起止框判斷框處理框輸入/輸出框注釋框流向線連接點(diǎn)希望大家重視流程圖是表示算法的較好的工具。一個(gè)流程圖包括以下幾部分:(1)表示相應(yīng)操作的框;(2)帶箭頭的流程線;(3)框內(nèi)外必要的文字說(shuō)明。傳統(tǒng)流程圖的流程可以是:
這種如同亂麻一樣的算法稱為BS型算法,意為一碗面條(ABowlofSpaghetti),亂無(wú)頭緒。缺點(diǎn):難以閱讀、修改,使算法的可靠性和可維護(hù)性難以保證。解決辦法:必須限制箭頭的濫用,即不允許無(wú)規(guī)律地使流程隨意轉(zhuǎn)向,只能順序地進(jìn)行下去。
(3)分支(選擇)結(jié)構(gòu)(4)子程序結(jié)構(gòu)●程序結(jié)構(gòu)(5)復(fù)合結(jié)構(gòu):多種程序結(jié)構(gòu)的組合…
(1)順序結(jié)構(gòu)(2)循環(huán)結(jié)構(gòu)Bohra和Jacopini提出了以下三種基本結(jié)構(gòu):
順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)用這三種基本結(jié)構(gòu)作為表示一個(gè)良好算法的基本單元。
圖中沒(méi)有一條從入口到出口的路徑通過(guò)A框。不正確的流程表示:流程內(nèi)的死循環(huán)4.3順序程序設(shè)計(jì)順序程序完全按指令書(shū)寫(xiě)的前后順序執(zhí)行每一條指令,是最基本、最常見(jiàn)的程序結(jié)構(gòu)一般純粹的順序結(jié)構(gòu)的程序設(shè)計(jì)較少開(kāi)始執(zhí)行1結(jié)束執(zhí)行2例4.1
.modelsmall
.stack .dataX dw5Y dw6Z dw7W dw?
.code .startup
movax,X addax,Y addax,Z movW,ax
.exit0 end計(jì)算:Z=X+Y,結(jié)果放在W64位數(shù)據(jù)左移8位例4.2-1/2
.dataqvar dq1234567887654321h
.code moval,byteptrqvar[6] movbyteptrqvar[7],al moval,byteptrqvar[5] movbyteptrqvar[6],al moval,byteptrqvar[4] movbyteptrqvar[5],al moval,byteptrqvar[3] movbyteptrqvar[4],al圖示3456788765432100例4.2-2/2 moval,byteptrqvar[2] movbyteptrqvar[3],al moval,byteptrqvar[1] movbyteptrqvar[2],al moval,byteptrqvar[0] movbyteptrqvar[1],al movbyteptrqvar[0],012
34
56
78
87
65
43
21h34
56
78
87
65
43
21
00h移位后圖示第4章64位數(shù)據(jù)左移8位123456788765432100qvar[0]qvar[1]qvar[2]qvar[3]qvar[4]qvar[5]qvar[6]qvar[7]例題代碼轉(zhuǎn)換-1/2;查表法,實(shí)現(xiàn)一位16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼顯示
.modelsmall .stack .dataASCII db30h,31h,32h,33h,34h,35h db36h,37h,38h,39h ;0~9的ASCII碼
db41h,42h,43h,44h,45h,46h ;A~F的ASCII碼hex db0bh ;任意設(shè)定了一個(gè)待轉(zhuǎn)換的一位16進(jìn)制數(shù)例題代碼轉(zhuǎn)換-2/2 .code .startup
movbx,offsetASCII ;BX指向ASCII碼表
moval,hex ;AL取得一位16進(jìn)制數(shù),正是ASCII碼表中位移
andal,0fh ;只有低4位是有效的,高4位清0
xlat
;換碼:AL←DS:[BX+AL] movdl,al ;入口參數(shù):DL←AL movah,2 ;02號(hào)DOS功能調(diào)用顯示出來(lái)
int21h ;顯示一個(gè)ASCII碼字符
.exit0 end開(kāi)始設(shè)置數(shù)據(jù)段和堆棧段地址設(shè)置堆棧指針取數(shù)據(jù)截取高四位右移四位
例:設(shè)內(nèi)存DATA單元存放一個(gè)無(wú)符號(hào)字節(jié)數(shù)據(jù),編制程序?qū)⑵洳鸪蓛晌皇M(jìn)制數(shù),并存入HEX和HEX+1單元的低4位,HEX存放高位十六進(jìn)制數(shù),HEX+1單元存放低位十六進(jìn)制數(shù)解: 分析命題確定算法畫(huà)流程圖拆字程序取原數(shù)據(jù)結(jié)束保存高位十六進(jìn)制數(shù)截取低四位保存低位十六進(jìn)制數(shù)保存結(jié)果
MOV SS,AX MOV SP,LENGTHSTK MOV AL,DATA MOV AH,AL AND AL,0F0H MOV CL,04 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AX,4C00H INT 21HCSEGENDS END BEG
例:設(shè)內(nèi)存DATA單元存放一個(gè)無(wú)符號(hào)字節(jié)數(shù)據(jù),編制程序?qū)⑵洳鸪蓛晌皇M(jìn)制數(shù),并存入HEX和HEX+1單元的低4位,HEX存放高位十六進(jìn)制數(shù),HEX+1單元存放低位十六進(jìn)制數(shù)解: 分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試拆字程序
SSEG SEGMENTSTACKSTK DB 20DUP(0)SSEG ENDSDSEG SEGMENTDATA DB 0B5HHEX DB 0,0DSEG ENDSCSEG SEGMENT ASSUMECS:CSEG,DS:DSEG ASSUMESS:SSEGBEG:MOV AX,DSEG MOV DS,AX MOV AX,SSEG4.4分支程序設(shè)計(jì)分支程序根據(jù)條件是真或假?zèng)Q定執(zhí)行與否判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標(biāo)志轉(zhuǎn)移指令Jcc和JMP可以實(shí)現(xiàn)分支控制單分支:求絕對(duì)值等雙分支:顯示BX最高位等多分支:例4.4等29/18匯編語(yǔ)言程序的基本結(jié)構(gòu)分支結(jié)構(gòu):利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某一指令后,根據(jù)條件是否滿足,來(lái)改變程序執(zhí)行的順序。一般先用比較指令或數(shù)據(jù)操作及位檢測(cè)指令來(lái)改變標(biāo)志寄存器各個(gè)標(biāo)志位,然后用條件轉(zhuǎn)移指令進(jìn)行分支。繪制程序流程圖步驟必不可少!?。±L制程序流程圖,一般先按上下流程線寫(xiě),再完成分支部分。繪制程序流程圖的判斷環(huán)節(jié)時(shí),要特別注意把握邏輯關(guān)系和標(biāo)志位的意義。分支如何產(chǎn)生單分支程序設(shè)計(jì)條件成立跳轉(zhuǎn),否則順序執(zhí)行分支語(yǔ)句體;注意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)地址例題求絕對(duì)值;計(jì)算AX的絕對(duì)值
cmpax,0
jnsno_neg ;分支條件:AX≥0
negax ;條件不滿足,求補(bǔ)no_neg: movresult,ax ;條件滿足;計(jì)算AX的絕對(duì)值
cmpax,0
jsyesneg ;分支條件:AX<0 jmpnonneg;分支條件:AX>=0yesneg: negax ;條件不滿足,求補(bǔ)nonneg: movresult,ax ;條件滿足GoodBad例題無(wú)符號(hào)數(shù)除以2(自學(xué));AX中存放的無(wú)符號(hào)數(shù);如果是偶數(shù)除以2,如果是奇數(shù),則加1后除以2 testax,01h ;測(cè)試AX最低位
jzeven ;最低位為0:AX為偶數(shù)
addax,1 ;最低位為1:AX為奇數(shù),需要加1even: rcrax,1 ;AX←AX÷2 ;如果采用SHR/SAR指令,則不能處理AX=FFFFH的特殊情況分析命題確定算法畫(huà)流程圖開(kāi)始取十六進(jìn)制數(shù)X+30H0<=X<=9YN0A<=X<=0FHX+37H結(jié)束YN分支程序設(shè)計(jì)例:寫(xiě)一個(gè)實(shí)現(xiàn)把一位十六進(jìn)制數(shù)轉(zhuǎn)化為對(duì)應(yīng)ASCII碼的程序。
流程圖的例子分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試
JMP LAB2LAB1:ADDAL,37HLAB2:MOVASCII,AL MOVAH,4CH INT21HCODEENDSENDSTART
DATA SEGMENTXXDB4ASCIIDB?DATAENDS
CODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAL,0FH CMPAL,9 JALAB1 ADDAL,30H分支程序設(shè)計(jì)例:寫(xiě)一個(gè)實(shí)現(xiàn)把一位十六進(jìn)制數(shù)轉(zhuǎn)化為對(duì)應(yīng)ASCII碼的程序。
雙分支程序設(shè)計(jì)條件成立跳轉(zhuǎn)執(zhí)行第2個(gè)分支語(yǔ)句體,否則順序執(zhí)行第1個(gè)分支語(yǔ)句體。注意第1個(gè)分支體后一定要有一個(gè)JMP指令跳到第2個(gè)分支體后例題顯示BX最高位-解法1 shlbx,1 ;BX最高位移入CF
jcone ;CF=1,即最高位為1,轉(zhuǎn)移
movdl,’0’
;CF=0,即最高位為0,DL←’0’
jmptwo
;一定要跳過(guò)另一個(gè)分支體one: movdl,’1’
;DL←’1’two: movah,2 int21h ;顯示另一種解法例題顯示BX最高位-解法2
shlbx,1 ;BX最高位移入CF
jncone ;CF=0,即最高位為0,轉(zhuǎn)移
movdl,’1’;CF=1,即最高位為1,DL←’1’
jmptwo
;一定要跳過(guò)另一個(gè)分支體one: movdl,’0’
;DL←’0’two: movah,2 int21h ;顯示另一種解法例題顯示BX最高位-解法3 movdl,’0’
;DL←’0’ shlbx,1 ;BX最高位移入CF jnctwo ;CF=0,最高位為0,轉(zhuǎn)移
movdl,’1’
;CF=1,最高位為1,DL←’1’two: movah,2 int21h ;顯示
解法三說(shuō)明:雙分支程序可以改為單分支程序多分支程序設(shè)計(jì)多個(gè)條件對(duì)應(yīng)各自的分支語(yǔ)句體,哪個(gè)條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行。多分支可以化解為雙分支或單分支結(jié)構(gòu)的組合,例如:
orah,ah ;等效于cmpah,0jzfunction0 ;ah=0,轉(zhuǎn)向function0decah ;等效于cmpah,1jzfunction1 ;ah=1,轉(zhuǎn)向function1decah ;等效于cmpah,2jzfunction2 ;ah=2,轉(zhuǎn)向function2圖示想想C語(yǔ)言的CASE多分支結(jié)構(gòu)AH=0function0YNAH=1function1YNAH=2function2YN第4章【例】編程實(shí)現(xiàn)下列函數(shù)的功能,其中X、Y為無(wú)符號(hào)字節(jié)數(shù)。(多分支)1:畫(huà)出詳細(xì)流程2:編寫(xiě)完整程序流程圖(AL)=X(BL)=Y開(kāi)始(AL)=(BL)?Z=0YZ=1Y(AL)>(BL)?NZ=-1N結(jié)束MOV AX,DAT
MOV DS,AXCMP AL,BLJE
C1
JA
C2EXT: MOVZ,AL
MOV AL,X MOV BL,YC1:MOV AL,0
JMP
EXTC2:MOV AL,1
JMP
EXTMOVAL,-1地址表形成多分支(太技巧,不用看)需要在數(shù)據(jù)段事先安排一個(gè)按順序排列的轉(zhuǎn)移地址表輸入的數(shù)字作為偏移量。因?yàn)橛?個(gè)字節(jié)16位偏移地址,所以偏移量需要乘2關(guān)鍵是要理解間接尋址方式JMP指令地址表分支1地址分支2地址...table dwdisp1,disp2,disp3,disp4,...此例有點(diǎn)難不用看,但這個(gè)方法(技巧)是匯編經(jīng)常用到的 .datamsg db'Inputnumber(1~8):',0dh,0ah,'$'msg1 db'Chapter1:...',0dh,0ah,'$'msg2 db'Chapter2:...',0dh,0ah,'$‘ ...msg8 db'Chapter8:...',0dh,0ah,'$'table dwdisp1,disp2,disp3,disp4 dwdisp5,disp6,disp7,disp8 ;取得各個(gè)標(biāo)號(hào)的偏移地址例4.4數(shù)據(jù)段-1/3此處等同于offsetdisp1start1: movdx,offsetmsg ;提示輸入數(shù)字
movah,9 int21h movah,1 ;等待按鍵,ASCIICODE
int21h
cmpal,'1' ;數(shù)字<1?
jbstart1 cmpal,'8' ;數(shù)字>8?
jastart1 andax,000fh ;將ASCII碼轉(zhuǎn)換成數(shù)字例4.4代碼段-2/3
decax shlax,1 ;等效于addax,ax
movbx,ax
jmptable[bx];(段內(nèi))間接轉(zhuǎn)移:IP←[table+bx]start2: movah,9 int21h .exit0disp1: movdx,offsetmsg1 ;處理程序1
jmpstart2disp2: movdx,offsetmsg2 ;處理程序2
jmpstart2
…..例4.4代碼段-3/3可以改為calltable[bx]對(duì)應(yīng)修改為ret4.5循環(huán)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)一般是根據(jù)某一條件判斷為真或假來(lái)確定是否重復(fù)執(zhí)行循環(huán)體循環(huán)指令和轉(zhuǎn)移指令可以實(shí)現(xiàn)循環(huán)控制循環(huán)指令LOOPE:例4.6轉(zhuǎn)移指令:例4.7多重循環(huán):例4.8等循環(huán)指令LOOP:例4.5循環(huán)結(jié)構(gòu)
結(jié)束
初始化
循環(huán)的初始狀態(tài)
循環(huán)體
循環(huán)的工作部分及修改部分
計(jì)數(shù)控制循環(huán)條件控制循環(huán)修改部分控制條件YN●循環(huán)程序結(jié)構(gòu)形式DO-WHILE結(jié)構(gòu)
DO-UNTIL結(jié)構(gòu)控制條件初始化循環(huán)體YN控制條件初始化循環(huán)體YN初始化:設(shè)置循環(huán)的初始狀態(tài)循環(huán)體:循環(huán)的工作部分及修改部分控制條件:計(jì)數(shù)控制(LOOP)特征值控制(LOOPZ/LOOPNZ/ 條件跳轉(zhuǎn)指令)
●循環(huán)程序結(jié)構(gòu)說(shuō)明例4.5:把BX中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上
如:1011001011111010BB2FAH
BX1234分析:(1)程序結(jié)構(gòu)的確定由題意應(yīng)該把BX的內(nèi)容從左到右每4位為一組在屏幕上顯示出來(lái),顯然這可以用循環(huán)結(jié)構(gòu)來(lái)完成,每次顯示一個(gè)十六進(jìn)制數(shù)位,因而循環(huán)次數(shù)是已知的,計(jì)數(shù)值為4。
(2)循環(huán)體的構(gòu)成(算法確定)循環(huán)體應(yīng)該包括:二進(jìn)制到所顯示字符的ASCII之間的轉(zhuǎn)換,以及每個(gè)字符的顯示。需要了解相關(guān)知識(shí):◆字符和其ASCII碼之間的關(guān)系?
“0”~“9”
30H~39H,“A”~”Z”41H~5AH◆如何顯示一個(gè)字符?(a)將顯示字符的ASCII碼放入DL寄存器;(b)將AH的內(nèi)容置為2(功能號(hào));(c)執(zhí)行INT21H(DOS功能調(diào)用)。(3)循環(huán)控制條件分析●因?yàn)檠h(huán)次數(shù)已知,可以使用LOOP指令實(shí)現(xiàn),但是必須注意:由于循環(huán)移位指令中使用CL寄存器作為移位次數(shù)寄存器,而LOOP指令的循環(huán)次數(shù)隱含在CX寄存器中,因此,必須注意這兩者之間的沖突?!癯丝梢允褂肔OOP指令之外,還可以使用條件跳轉(zhuǎn)指令來(lái)實(shí)現(xiàn)。LOOPAGAIN
DEC計(jì)數(shù)器
JNZAGAIN
……
movcx,4;初始化rotate:pushcx
movcl,4;把高四位移到低四位
rolbx,clmoval,bl ;找出BX的低四位
andal,0fhaddal,30h;’0’~’9’ASCII30H~39Hcmpal,3ahjlprintit ;al<3ahaddal,7h;’A’~’F’ASCII41H~46H
printit:movdl,almovah,2int21h
popcx
looprotate
……方法1(LOOP)注意這個(gè)地方這是干什么?顯示AL的內(nèi)容
……
movch,4;初始化rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30h;’0’~’9’ASCII30H~39Hcmpal,3ahjlprintitaddal,7h;’A’~’F’ASCII41H~46Hprintit:movdl,almovah,2int21h
decchjnzrotate
……方法2(條件跳轉(zhuǎn)指令) .modelsmall .stack .datasum dw? .code .startup xorax,ax ;被加數(shù)AX清0 movcx,100again: addax,cx;從100,99,...,2,1倒序累加
loopagain movsum,ax ;將累加和送入指定單元
.exit0 end例4.6求和:1+2+…+100
計(jì)數(shù)控制循環(huán)循環(huán)次數(shù)固定
movbx,offsetstringagain: moval,[bx] ;取一個(gè)字符
oral,al ;是否為結(jié)尾符0
jzdone ;是,退出循環(huán)
cmpal,'A' ;是否為大寫(xiě)A~Z
jbnext cmpal,'Z'
janext oral,20h
;是,轉(zhuǎn)換為小寫(xiě)字母(使D5=1)
mov[bx],al ;仍保存在原位置next: incbx
jmpagain ;繼續(xù)循環(huán)done: .exit0例4.7把一串字符中的大寫(xiě)改為小寫(xiě)
條件控制循環(huán)利用標(biāo)志退出大小寫(xiě)字母僅D5位不同冒泡法“冒泡法”是一種排序算法,不是最優(yōu)的算法,但它易于理解和實(shí)現(xiàn)冒泡法從第一個(gè)元素開(kāi)始,依次對(duì)相鄰的兩個(gè)元素進(jìn)行比較,使前一個(gè)元素不大于后一個(gè)元素;將所有元素比較完之后,最大的元素排到了最后;然后,除掉最后一個(gè)元素之外的元素依上述方法再進(jìn)行比較,得到次大的元素排在后面;如此重復(fù),直至完成就實(shí)現(xiàn)元素從小到大的排序這需要一個(gè)雙重循環(huán)程序結(jié)構(gòu)圖示冒泡法的排序過(guò)程序號(hào)數(shù)比較遍數(shù)123413228531641558321615885161583285158163285815163285第4章
mov
cx,count ;CX←數(shù)組元素個(gè)數(shù)
deccx ;元素個(gè)數(shù)減1為外循環(huán)次數(shù)outlp: mov
dx,cx ;DX←內(nèi)循環(huán)次數(shù)
movbx,offsetarrayinlp:
moval,[bx] ;取前一個(gè)元素
cmpal,[bx+1] ;與后一個(gè)元素比較
jnanext ;前一個(gè)不大于后一個(gè)元素,則不進(jìn)行交換
xchgal,[bx+1] ;否則,進(jìn)行交換
mov[bx],alnext: incbx ;下一對(duì)元素
decdx
jnzinlp
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版智能航運(yùn)物流船運(yùn)輸合作協(xié)議合同2篇
- 二零二五年測(cè)繪數(shù)據(jù)處理與分析合同范本3篇
- 二零二五年特種花卉種子采購(gòu)合同范本3篇
- 二零二五版商業(yè)街區(qū)保安臨時(shí)工勞動(dòng)合同示范文本3篇
- 二零二五版生態(tài)農(nóng)業(yè)基地種植分包合同3篇
- 河北省二零二五年度二手房買賣合同附帶專業(yè)拆除及清理服務(wù)3篇
- 二零二五年度車輛過(guò)戶手續(xù)代理合同3篇
- 二零二五版汽車制造專用管子配件供應(yīng)合同3篇
- 二零二五年度酒店食堂承包服務(wù)合同范本3篇
- 二零二五年度礦業(yè)風(fēng)險(xiǎn)評(píng)估與風(fēng)險(xiǎn)管理合同2篇
- 割接方案的要點(diǎn)、難點(diǎn)及采取的相應(yīng)措施
- 2025年副護(hù)士長(zhǎng)競(jìng)聘演講稿(3篇)
- 2025至2031年中國(guó)臺(tái)式燃?xì)庠钚袠I(yè)投資前景及策略咨詢研究報(bào)告
- 原發(fā)性腎病綜合征護(hù)理
- 第三章第一節(jié)《多變的天氣》說(shuō)課稿2023-2024學(xué)年人教版地理七年級(jí)上冊(cè)
- 2025年中國(guó)電科集團(tuán)春季招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年度建筑施工現(xiàn)場(chǎng)安全管理合同2篇
- 建筑垃圾回收利用標(biāo)準(zhǔn)方案
- 2024年考研英語(yǔ)一閱讀理解80篇解析
- 福建省廈門(mén)市2023-2024學(xué)年高二上學(xué)期期末考試語(yǔ)文試題(解析版)
- 防火墻施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論