匯編語(yǔ)言程序設(shè)計(jì)-課件 第五章(1)順序程序設(shè)計(jì)_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)-課件 第五章(1)順序程序設(shè)計(jì)_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)-課件 第五章(1)順序程序設(shè)計(jì)_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)-課件 第五章(1)順序程序設(shè)計(jì)_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)-課件 第五章(1)順序程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章基本程序設(shè)計(jì)一般來(lái)說(shuō),編寫(xiě)匯編程序應(yīng)遵循如下步驟:(1)分析問(wèn)題,確定算法(2)繪制流程圖(3)分配資源(4)根據(jù)流程圖編寫(xiě)程序(5)上機(jī)調(diào)試程序從程序結(jié)構(gòu)上看,匯編程序有順序、分支、循環(huán)和子程序四種基本結(jié)構(gòu)形式。

5.1順序程序設(shè)計(jì)順序程序設(shè)計(jì)也稱(chēng)為簡(jiǎn)單程序設(shè)計(jì)或直接程序設(shè)計(jì)。順序程序是程序的基本組成部分。一、存儲(chǔ)單元內(nèi)容移位將存儲(chǔ)單元A中的內(nèi)容左移4位,存儲(chǔ)單元B中的內(nèi)容右移2位(移位后的空位為0)。分析:實(shí)現(xiàn)存儲(chǔ)單元內(nèi)容移位,可以直接使用移位指令。但要求移后空位為0,故應(yīng)使用邏輯移位指令。程序段如下: MOV CL,4 SHL A,CL MOV CL,2 SHR B,CL二、

屏蔽與組合將字類(lèi)型變量A的高4位和低4位置0,其余各位保持不變。分析:對(duì)字或字節(jié)變量中的部分位進(jìn)行置0操作,稱(chēng)為屏蔽操作。它們是數(shù)據(jù)處理常用的方法之一。多用于數(shù)據(jù)或碼型變換中,它們可用邏輯運(yùn)算指令實(shí)現(xiàn)。程序段如下: MOV AX,A AND AX,0FF0H MOV A,AX三、

拆字

將存儲(chǔ)單元A中兩個(gè)壓縮BCD數(shù)拆成兩個(gè)非壓縮BCD數(shù)(高位BCD數(shù)放C單元中,低位BCD數(shù)放B單元中),然后分別轉(zhuǎn)換為兩個(gè)ASCII代碼。分析:將A單元BCD數(shù)拆開(kāi)可以采用移位,對(duì)高位BCD數(shù)可右移4位而成為非壓縮數(shù)。低位BCD數(shù),可用屏蔽其高4位而成為非壓縮BCD數(shù)。然后分別與30H進(jìn)行邏輯或運(yùn)算而成為ASCII代碼。程序段如下: MOV AL,A MOV CL,4 SHR AL,CL OR AL,30H MOV C,AL MOV AL,A AND AL,0FH OR AL,30H MOV B,AL四、查表程序設(shè)計(jì)平方表、立方表等可以使用查表指令來(lái)完成XLAT五、加減運(yùn)算已知Z=(X+Y)-(W+Z),其中X,Y,Z,W均為字節(jié)存儲(chǔ)單元,存放的數(shù)據(jù)均用壓縮BCD碼表示。編寫(xiě)完成上式的程序段。分析:這也是一種典型的順序程序,在這里要注意是BCD數(shù)相加,要進(jìn)行十進(jìn)制調(diào)整。程序段如下: MOV AL,Z MOV BL,W ADD AL,BL DAA MOV BL,AL MOV AL,X MOV DL,Y ADD AL,DL DAA SUB AL,BL DAS MOV Z,AL六、乘法運(yùn)算將寄存器BL內(nèi)容進(jìn)行乘10運(yùn)算。分析:對(duì)一個(gè)數(shù)進(jìn)行乘10運(yùn)算,這在數(shù)值運(yùn)算中是經(jīng)常用到的。它可以直接使用乘法指令實(shí)現(xiàn),程序段如下: MOV AL,10 MUL BL但執(zhí)行過(guò)程至少需要70個(gè)時(shí)鐘周期,所用時(shí)間太長(zhǎng)。

如果利用移位操作,左移一位,相當(dāng)于原數(shù)乘2,因此也可以用移位操作實(shí)現(xiàn)乘10運(yùn)算。 MOV AL,BL MOV AH,0 SAL AX,1 MOV BX,AX SAL AX,1 SAL AX,1 ADD AX,BX使用上述程序段,只需15個(gè)時(shí)鐘周期,雖然程序顯得繁瑣些,但執(zhí)行時(shí)間比直接使用乘法指令要快得多。也可以使用加法實(shí)現(xiàn)乘10運(yùn)算 MOV AL,BL MOV AH,0 ADD AX,AX MOV BX,AX ADD AX,AX ADD AX,AX ADD AX,BX 上述程序段所需時(shí)間為18個(gè)時(shí)鐘周期。所以完成簡(jiǎn)單的乘法運(yùn)算,還是使用移位或加法運(yùn)算為快。七、

混合運(yùn)算用順序結(jié)構(gòu)來(lái)編程實(shí)現(xiàn)求無(wú)符號(hào)數(shù)S=(X2+Y2)/Z的值,將最后結(jié)果放入RESULT單元保存。分析:本題中要定義四個(gè)變量,X、Y、Z是計(jì)算表達(dá)式涉及到的數(shù)據(jù),RESULT單元是結(jié)果的存放單元。為方便數(shù)據(jù)的重復(fù)使用,采用寄存器來(lái)存放中間結(jié)果X2和Y2。源程序:DATA SEGMENT

X DB 5

Y DB 7 Z DB 2RESULT DB ?DATA ENDSCODE SEGMENT

ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,X MUL X MOV BX,AX MOV AL,Y MUL Y ADD AX,BX DIV Z MOV RESULT,AL MOV AH,4CH INT 21HCODE ENDS END START

八、求數(shù)的補(bǔ)碼與反碼將字變量A轉(zhuǎn)換為補(bǔ)碼和反碼,分別存入字變量B和C中。分析:數(shù)據(jù)取反可以直接使用非邏輯指令;對(duì)數(shù)據(jù)求補(bǔ)碼操作,應(yīng)該先取反,末位再加1即可。 MOV AX,A NOT AX MOV B,AX INC AX MOV C,AX當(dāng)然,取補(bǔ)操作也可以直接通過(guò)取補(bǔ)指令實(shí)現(xiàn)。 MOV AX,A NEG AX MOV C,AX DEC AX MOV B,AX5.2分支程序設(shè)計(jì)條件轉(zhuǎn)移指令和無(wú)條件轉(zhuǎn)移指令JMP用于實(shí)現(xiàn)程序的分支在條件轉(zhuǎn)移指令前,通常需要安排算術(shù)運(yùn)算指令、比較指令或測(cè)試指令等能夠影響標(biāo)志位的相關(guān)指令一、單分支程序設(shè)計(jì)編程實(shí)現(xiàn)將鍵盤(pán)輸入的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母顯示出來(lái)。分析:從鍵盤(pán)接收數(shù)據(jù)后,在程序中要判斷接收的是否是小寫(xiě)字母,是則進(jìn)行轉(zhuǎn)換,否則不予轉(zhuǎn)換,這樣就需要判斷所輸入字符是否在'a'和'z'的范圍內(nèi),采用單分支結(jié)構(gòu)即可實(shí)現(xiàn)。轉(zhuǎn)換后結(jié)果的顯示通過(guò)DOS功能調(diào)用的02號(hào)功能,將要顯示字符的ASCII碼放在DL中。參考程序如下:CODESEGMENT ASSUMECS:CODESTART:MOVAH,01H ;用DOS調(diào)用的01號(hào)

INT 21H ;功能,從鍵盤(pán)輸入字符,AL

CMP AL,'a'

JB EXIT

CMP AL,'z'

JA EXIT

SUB AL,20H MOVDL,AL

MOVAH,02H INT 21HEXIT:MOVAH,4CH INT 21HCODEENDS END START

二、多分支程序設(shè)計(jì)多分支結(jié)構(gòu)具有若干個(gè)條件,每個(gè)條件對(duì)應(yīng)一個(gè)操作程序。程序必須判斷那個(gè)條件成立,從而轉(zhuǎn)去執(zhí)行該條件對(duì)應(yīng)的程序段。多分支程序可以采用用簡(jiǎn)單分支程序組合實(shí)現(xiàn),也可以利用地址表、轉(zhuǎn)移表的方法實(shí)現(xiàn)。1.簡(jiǎn)單分支程序組合實(shí)現(xiàn)編寫(xiě)程序,完成下面的分段函數(shù)的計(jì)算,給定X為帶符號(hào)的字節(jié)數(shù)據(jù)。分析:這是三路分支的程序設(shè)計(jì),根據(jù)題目要求X為內(nèi)存中的一個(gè)帶符號(hào)數(shù)。采用兩重條件判斷:首先判斷X值的正負(fù),若為負(fù)數(shù),將-1送到Y(jié)中保存;若為正數(shù),再判斷X是否為0,如果為0,將0送到Y(jié)中保存,否則將1送到Y(jié)中保存。

1X>0

Y=0X=0

-1X<0源程序:DATA SEGMENT X DB-10 Y DB?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA

MOV DS,AX MOV AL,X CMP AL,0 JGE BIG MOV BL,-1

JMP EXITBIG: JE MIN MOV BL,1

JMP EXITMIN: MOV BL,0EXIT: MOV Y,BL MOV AH,4CH INT 21HCODE ENDS END START2.跳轉(zhuǎn)表法多分支程序設(shè)計(jì)所謂跳轉(zhuǎn)表法是指:把轉(zhuǎn)移到各分支程序的入口地址集中存放在一張表中,如果是段內(nèi)轉(zhuǎn)移,則為16位地址;如果是段間轉(zhuǎn)移,則為32位地址。這張表稱(chēng)為分支跳轉(zhuǎn)表。把各分支轉(zhuǎn)移程序的入口地址在表中的位置(離表首地址的位移量)作為條件。當(dāng)進(jìn)行多分支條件判斷時(shí),把當(dāng)前條件,位移量加上表首地址作為轉(zhuǎn)移地址,轉(zhuǎn)到表的相應(yīng)位置,取出所轉(zhuǎn)向的子程序的人口地址,達(dá)到多分支的目的。根據(jù)AL中各位被置位情況,控制轉(zhuǎn)移到8個(gè)子程序P1~P8之一中去。分析:對(duì)于這種程序關(guān)鍵要找出每種情況的轉(zhuǎn)移地址,從圖中可見(jiàn)表地址=表基地址+偏移量,而偏移量可由AL各位所在位置×2求得。源程序:DATA SEGMENTBASE DWSR0,SR1,SR2,SR3,SR4,SR5,SR6,SR7DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATABEGIN:

PUSH DS XOR AX,AX PU

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論