版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第四節(jié)匯編語言程序設計一、概述1.編寫匯編語言程序步驟2.判斷程序質量的標準3.幾種程序結構二、匯編語言程序設計舉例例1將寄存器BX中的內(nèi)容以十六進制形式顯示出來。例2將鍵盤輸入的十進制數(shù)據(jù)串轉換成其相應大小的數(shù)值存放在BX寄存器中。一、概述1.
編寫匯編語言程序步驟2.
判斷程序質量的標準3.
幾種程序結構一.編寫匯編語言程序步驟分析實際問題,抽象描述問題的模型確定解決模型的算法按算法畫出程序流程圖按流程圖編寫程序上機調試,運行程序2.判斷程序質量的標準程序的正確性程序的可讀性程序的執(zhí)行時間程序所占內(nèi)存大小3.幾種程序結構順序結構分支結構循環(huán)結構子程結構順序結構兩個分支YN
、、、
CMPAL,BLJGgreat
JMPexitgreat:
exit:、、、、、、
AL≤BL處理AL>BL處理分支結構三個分支
、、、
CMPAL,0
JGgreat
JLless
JMPexitless:
JMPexitgreat:
exit:、、、AL=0處理AL>0處理AL<0處理YYNN分支結構循環(huán)結構當型循環(huán)(當條件成立進入循環(huán))循環(huán)初始設置循環(huán)體循環(huán)條件判斷?YN直到型循環(huán)(直到條件成立退出循環(huán))YN循環(huán)初始設置循環(huán)體循環(huán)條件判斷?1.多處調用完成同一功能的子程:codeSEGMENTstart:、、
CALLsub
、、
CALLsub
、、
CALLsub
、、
MOVAH,4CHINT21HsubPROC
、、、、
RETsubENDPcodeENDSENDstart2.模塊化程序設計:codeSEGMENTbegin:CALL
sub1
CALLsub2
CALLsub3MOVAH,4CHINT21Hsub1PROC
、、
RETsub1ENDPsub2PROC
、、
RETsub2ENDPsub3PROC
、、
RETsub3ENDPcodeENDSENDbegin
子程結構注意返回DOS語句位置二、匯編語言程序設計舉例例1
將寄存器BX中的內(nèi)容以十六進制形式顯示出來。例2
將鍵盤輸入的十進制數(shù)據(jù)串轉換成其相應大小的數(shù)值存放在BX寄存器中。有關字符、數(shù)碼轉換的處理1.
計算機處理字符時,常用的字符編碼是ASCII碼。2.
數(shù)字和字母的ASCII碼是一個有序序列數(shù)字0~9:30H~39H大寫字母A~Z:41H~5AH小寫字母a~z:61H~7AH3.計算機處理信息時,其對象都是二進制數(shù)。外設(顯示器、打印機、鍵盤等)用ASCII碼與CPU進行信息傳送。例如:1)在鍵盤上按下某一字符鍵(如’9’),鍵盤接口向鍵盤緩沖區(qū)送去的是該字符的ASCII碼(如39H),
不是送數(shù)字09H。
2)在文本方式下,要在顯示器上顯示某一字符(如’A’),
須將該字符的ASCII碼(如41H)送顯示緩沖區(qū),不是送數(shù)字0AH。計算機要利用顯示器、鍵盤等外設時,須據(jù)程序設計的需要進行有關轉換。例將CPU運算的結果通過顯示器顯示時,需將結果轉換成其對應的ASCII碼才能進行顯示。例
CPU要處理從鍵盤輸入的某一數(shù)據(jù),
需將該數(shù)據(jù)串進行轉換后才能應用。例1
將BX寄存器中的內(nèi)容以十六進制形式顯示出來。
BX是一個16位寄存器二進制1010100100111110
用十六進制顯示時,每4位用一個字符顯示,共4個其中0000→’0’30H,1010→’A’41H
0001→’1’31H
,1011→’B’42H
、、、、
1001→’9’39H
,1111→’F’46H?十六進制A93E屏幕上的顯示‘A’‘9’‘3’‘E’對應的ASCII41H39H33H45H算法:取出要顯示的某4位,轉換為對應的ASCII碼,再調用DOS系統(tǒng)功能進行顯示。1)對于0000~1001,先擴展成一個字節(jié),高4位清0,加上30H后,即可得字符’0’~’9’對應的ASCII碼。
00000001B+30H=31H00001001B+30H=39H
0001B‘1’1001B‘9’2)對于1010~1111,先擴展成一個字節(jié),高4位清0,加上30H后,還要再加上07H,才能得到’A’~’F’對應的ASCII碼
00001010B+30H+07H=41H00001111B+30H+07H=46H
1010B‘A’1111B‘F’codeSEGMENTASSUMECS:codestart:MOVCH,4;字符個數(shù)
MOVCL,4;循環(huán)移位次數(shù)
next:ROLBX,CL
;取顯示位的值
MOVDL,BL
;保存在DL中
ANDDL,0FH
;清除高4位
ADDDL,30H
;轉變?yōu)閿?shù)字的ASCII
CMPDL,39H;大于39H,則應轉變
JLEprint;為字母A~F的ASCII
ADDDL,07H
print:MOVAH,2H;顯示DL中的字符
INT21HDECCH;顯示結束?
JNZnextMOVAH,4CH;返回DOSINT21HcodeENDS
ENDstart顯示字符個數(shù)CH=4循環(huán)移位次數(shù)CL=4BX循環(huán)左移4位,將要顯示的值移至低4位,保存在DL中清DL的高4位,只保留要顯示位的值DL←DL+30H完成數(shù)值0~9的ASCII碼轉換YNDL←DL+07H完成數(shù)值A~F的ASCII碼轉換用02功能顯示DL中的字符YN返回DOSDL超出39H?CH←CH-1轉換結束?開始思考:1.例1采用的是大寫字母A~F進行顯示,若采用小寫字符a~f進行顯示,程序如何改寫?
1010001110011110‘A39E’或‘a(chǎn)39e’2.
編程將CPU內(nèi)14個16位寄存器當前的內(nèi)容分別用十六進制形式顯示出來。編程將CPU內(nèi)14個16位寄存器當前的內(nèi)容分別用十六進制形式顯示出來。
要點:將上例改寫為一個子程,入口參數(shù)為BX
子程中注意寄存器值的保存和恢復注意CS、IP、PSW寄存器值的獲取方法例將CPU內(nèi)14個16位寄存器當前內(nèi)容分別用16進制形式顯示出來(采用DEBUG下R命令的顯示順序)codeSEGMENTASSUMECS:codestart:PUSHBXMOVBX,AX;顯示AX
CALLlistbx
POPBX;顯示BX
CALLlistbx
MOVBX,CX;顯示CX
CALLlistbx
MOVBX,DX;顯示DX
CALLlistbx
MOVBX,SP;顯示SP
CALLlistbx
MOVBX,BP;顯示BP
CALLlistbx
MOVBX,SI;顯示SI
CALLlistbx
MOVBX,DI;顯示DI
CALLlistbx
MOVBX,DS;顯示DS
CALLlistbx
MOVBX,ES;顯示ES
CALLlistbx
MOVBX,SS;顯示SS
CALLlistbx
MOVBX,SEGstart
CALLlistbx
;顯示CSMOVBX,OFFSETstart
CALLlistbx
;顯示IP
PUSHF
POPBX;顯示PSW
CALLlistbx
MOVAH,4CH;返回DOSINT21HlistbxPROC
MOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnext
MOVDL,20H;顯示空格符
MOVAH,02HINT21HRET
;子程返回listbxENDPcodeENDSENDstart
listbxPROC
PUSHCX;保存寄存器
PUSHBXPUSHDXPUSHAXPUSHF
POPF
;恢復寄存器
POPAXPOPDXPOPBXPOPCXRET
;子程返回listbxENDPcodeENDSENDstart用十六進制顯示BX內(nèi)容子程
D:\>LIST_REG
;在DOS下執(zhí)行程序0000000000FF0BDF00000912000000000BDF0BDF0BEF0BEF00003202D:\>DEBUG
LIST_REG.EXE
;利用DEBUG檢測結果-R;顯示當前寄存器內(nèi)容AX=0000BX=0000CX=007BDX=0000SP=0000BP=0000SI=0000DI=0000DS=128EES=128ESS=129ECS=129EIP=0000NVUPEIPLNZNAPONC129E:000053PUSHBX-G;執(zhí)行程序00000000007B00000000000000000000128E128E129E129E00007202Programterminatednormally-運行的結果與用R命令顯示的結果相同,程序運行結果正確例2
將鍵盤輸入的十進制數(shù)據(jù)串轉換成相應大小的數(shù)值存放在BX寄存器中。分析:
從鍵盤輸入’1234’(表示1234)
用0AH功能輸入,則緩沖區(qū)存放的內(nèi)容為:06h04h31h32h33h34h0Dhnum問題:要轉換成1234即04D2h存放在BX中,怎么實現(xiàn)?清ASCII碼的高4位可得各數(shù)位大小值。01h02h03h04h04D2h?算法一:數(shù)值大小=各位值×權值之和
1234D=千位×1000+百位×100+十位×10+個位
=1×1000+2×100+3×10+4=0000010011010010B=04D2H01h02h03h04h04D2h?算法二:數(shù)值大小=部分和×10+下一位數(shù)值
1234D=(((0×10+1)×10+2)×10+3)×10+4=0000010011010010B=04D2H
部分和從0開始,循環(huán)次數(shù)等于輸入的位數(shù)01h02h03h04h04D2h?
dataSEGMENT
stringDB‘Input:’,’$’numDB6,?,6DUP(?)
dataENDS
CODESEGMENT
ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AX
CALLinputCALLchangeCALLlist_bx
MOVAH,4CHINT21H
開始初始化DS的值CALLinput顯示輸入提示,等待從鍵盤輸入十進制數(shù)據(jù)串CALLchange將數(shù)據(jù)串轉化為相應的數(shù)值存放在BX中返回DOS主程序流程圖CALLlist_bx將BX內(nèi)容以16進制顯示出來input子程序流程圖調用09功能顯示輸入提示調用0A功能等待從鍵盤輸入數(shù)據(jù)RET返回inputPROC
LEADX,stringMOVAH,09HINT21HLEADX,numMOVAH,0AHINT21H
RETinputENDP0604313233340D00num0000change子程序流程圖(BX)←輸入字符的數(shù)值大小SI←數(shù)據(jù)串偏址CX←數(shù)據(jù)串長度AX←部分和初值0DI←乘數(shù)10YNRET返回AX←部分和乘10(AX)←(AX)+(BX)形成新的部分和修改SI指針,指向下一位輸入BX←轉換結果AXCX←CX-1CX=0?
changePROCLEASI,num+2MOVCL,num+1MOVCH,0
MOVAX,0MOVDI,10
next:
MULDIMOVBH,0MOVBL,[SI]ANDBL,0FH
ADDAX,BX
INCSI
LOOPnextzero:MOVBX,AX
RETchangeENDP
0604313233340D00num00001234D=((
(
0×10
+1
)
×10
+2)
×10
+3
)
×10
+4顯示字符個數(shù)CH=4循環(huán)移位次數(shù)CL=4BX循環(huán)左移4位,將要顯示的值移至低4位,保存在DL中清DL的高4位,只保留要顯示位的值DL←DL+30H完成數(shù)值0~9的ASCII碼轉換YNDL←DL+07H完成數(shù)值A~F的ASCII碼轉換用02功能顯示DL中的字符YNRET返回DL超出39H?CH←CH-1轉換結束?list_bx子程序流程圖
list_bxPROCMOVCH,4MOVCL,4next:ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JLEprint
ADDDL,07H
print:MOVAH,2HINT21HDECCHJNZnext
RET
;子程返回
list_bxENDPcodeENDS
ENDstart編寫子程序的注意事項:
注意子程中PUSH、POP應成對,否則易造成死機。dataSEGMENT
stringDB‘Hello’,’$’
dataENDScodeSEGMENT
ASSUMECS:code,DS:datastart:MOVAX,dataMO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙江越秀外國語學院單招職業(yè)技能測試題庫帶答案解析
- 2025年湖北文理學院理工學院馬克思主義基本原理概論期末考試模擬題帶答案解析
- 2025年廣西中醫(yī)藥大學賽恩斯新醫(yī)藥學院馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 2025年上海商學院單招職業(yè)技能測試題庫附答案解析
- 2024年遼寧建筑職業(yè)學院馬克思主義基本原理概論期末考試題含答案解析(必刷)
- 2024年鉛山縣招教考試備考題庫附答案解析(奪冠)
- 2025年武陟縣招教考試備考題庫帶答案解析
- 2025年上蔡縣幼兒園教師招教考試備考題庫帶答案解析
- 2025年長江職業(yè)學院馬克思主義基本原理概論期末考試模擬題含答案解析(必刷)
- 2026年江蘇信息職業(yè)技術學院單招綜合素質考試題庫帶答案解析
- 止血材料行業(yè)分析研究報告
- 湖南省婁底市新化縣2024-2025學年高一上學期期末考試生物試題(解析版)
- 軍犬專業(yè)考試題及答案
- (一模)烏魯木齊地區(qū)2025年高三年級第一次質量英語試卷(含答案)
- 人教版七年級上冊數(shù)學有理數(shù)計算題分類及混合運算練習題(200題)
- 2025年云南省普洱市事業(yè)單位招聘考試(833人)高頻重點提升(共500題)附帶答案詳解
- 電力行業(yè)網(wǎng)絡與信息安全管理辦法
- 蘭州彤輝商貿(mào)有限公司肅南縣博懷溝一帶銅鐵礦礦產(chǎn)資源開發(fā)與恢復治理方案
- (高清版)DZT 0430-2023 固體礦產(chǎn)資源儲量核實報告編寫規(guī)范
- 狂人筆記的教案
- 健康養(yǎng)老產(chǎn)業(yè)項目可行性分析
評論
0/150
提交評論