版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《微機(jī)原理及應(yīng)用》主講教師《微機(jī)原理及應(yīng)用》主講教師2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)2第四章匯編語言及匯編程序設(shè)計(jì)一、概述二、偽指令三、表達(dá)式及運(yùn)算符四、宏指令五、匯編語言程序的上機(jī)過程六、匯編程序的設(shè)計(jì)過程七、匯編程序基本設(shè)計(jì)方法八、系統(tǒng)功能調(diào)用
例題作業(yè)2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)2第四章2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)3一、概述
匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計(jì)語言。指令格式:1、標(biāo)號(hào)是指該指令的符號(hào)地址,以冒號(hào)結(jié)束;2、用助記符表示操作碼,是指令名稱的代表符號(hào),是語句中的關(guān)鍵字,不可缺??;2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)3一、概2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)4一、概述(續(xù)上頁)3、用符號(hào)代表操作數(shù)或操作數(shù)地址。操作數(shù)是本指令執(zhí)行需要的數(shù)據(jù)。
有些指令不需要指明操作數(shù),可以默認(rèn);
有些指令需要兩個(gè)操作數(shù);
還有些操作數(shù)可以用表達(dá)式。4、注釋項(xiàng)是可選項(xiàng),用分號(hào)開始。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)4一、概2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)5一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源程序,常用的匯編程序有ASM-86和宏匯編MASM-86。匯編語言源程序的組成部分:①可以使用CPU指令系統(tǒng)所提供的指令(硬指令);②可以使用各種符合匯編語法的表達(dá)式,運(yùn)算符以及自行定義生成滿足需要的目標(biāo)代碼的指令。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)5一、概2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)61、標(biāo)號(hào)8086/8088匯編語言中使用的標(biāo)號(hào)必須遵循下列規(guī)則:(1)大小寫字母;(2)數(shù)字0~9;(3)某些特殊字符(@,_,?)(4)第一個(gè)字符不能是數(shù)字,“?”不能單獨(dú)作為標(biāo)號(hào)。(5)標(biāo)號(hào)的有效長度是31;
有效標(biāo)號(hào):STARTMY_PROGRAM
無效標(biāo)號(hào):MAIN%1BETA2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)61、標(biāo)2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)7二、偽指令偽指令是告訴匯編程序生成目標(biāo)代碼的指令語句。1、符號(hào)定義偽指令2、內(nèi)存數(shù)據(jù)定義偽指令3、段定義偽指令4、段寄存器說明偽指令5、定位偽指令2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)7二、偽2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)81、符號(hào)定義偽指令(1)EQU偽指令(2)等號(hào)(賦值)偽指令(3)解除符號(hào)定義偽指令2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)81、符2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)9(1)EQU偽指令偽指令格式:<符號(hào)名>EQU<表達(dá)式>指令功能:給符號(hào)名賦值。符號(hào)名可以由程序員取定,表達(dá)式應(yīng)該是可以計(jì)算得出一個(gè)具體值。例:
PORTEQU88H ;定義符號(hào)PORT代表88H
DATAEQUPORT+2 ;定義符號(hào)DATA代表 ;PORT+2注意:①用EQU定義的符號(hào),不能重新再定義,除非用PURGE偽指令解除;②如果在表達(dá)式中用了其他符號(hào),必須事先定義。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)9(1)2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)10(2)等號(hào)(賦值)偽指令偽指令格式:<符號(hào)名>=<表達(dá)式>指令功能:與EQU類似,唯一的區(qū)別是“=”可以隨時(shí)對(duì)符號(hào)名賦新值,而不必使用PURGE偽指令。例:PORT=88H ;定義符號(hào)PORT代表88HDATA=PORT+2 ;定義符號(hào)DATA代表PORT+22022/11/10第4章匯編語言及匯編程序設(shè)計(jì)10(22022/11/11第4章匯編語言及匯編程序設(shè)計(jì)11(3)解除符號(hào)定義偽指令偽指令格式:PURGE符號(hào)1,符號(hào)2,…指令功能:撤消用EQU賦值的符號(hào)名,以便于賦予新值。例:PURGEPORT,DATA;撤消用EQU對(duì)PORT、;DATA的賦值2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)11(32022/11/11第4章匯編語言及匯編程序設(shè)計(jì)122、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,參數(shù)2,…
功能:數(shù)據(jù)定義語句用來分配存儲(chǔ)單元。數(shù)據(jù)定義語句的命令有:
DB
定義字節(jié)數(shù)據(jù)
DW
定義字?jǐn)?shù)據(jù)
DD
定義雙字?jǐn)?shù)據(jù)
DQ
定義8字節(jié)數(shù)據(jù)
DT
定義10字節(jié)數(shù)據(jù)2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)122、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)132、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符
格式:<復(fù)制次數(shù)>DUP數(shù)據(jù)1,數(shù)據(jù)2,…
功能:匯編程序把所定義的數(shù)據(jù)按先后次序連續(xù)分配存儲(chǔ)空間,所起的名稱只代表第一個(gè)單元的字符。
例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)132、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)142、內(nèi)存數(shù)據(jù)定義偽指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)142、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)153、段定義偽指令格式:<段名>SEGMENT
…<段名>ENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)1532022/11/11第4章匯編語言及匯編程序設(shè)計(jì)164、段寄存器說明偽指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,…]
功能:該偽指令告訴匯編程序在匯編時(shí),各個(gè)段寄存器所對(duì)應(yīng)的邏輯段基址。
注意:除了CS,所有段寄存器的實(shí)際值還必須用傳送指令在執(zhí)行時(shí)賦值2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)164、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)175、定位偽指令①格式:
ORG<表達(dá)式>
功能:起址定位偽指令告訴匯編程序,以下的程序或數(shù)據(jù)從表達(dá)式指定的偏移地址開始存放;②格式:
EVEN
功能:偶地址定位偽指令告訴匯編程序,以下的程序或數(shù)據(jù)從偶地址開始存放。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)175、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)18三、表達(dá)式及運(yùn)算符在匯編語言中,指令的操作數(shù)除了可以是常數(shù)、寄存器、變量和標(biāo)號(hào)外,還可以是表達(dá)式。表達(dá)式是由常數(shù)、寄存器、變量、標(biāo)號(hào)和專用運(yùn)算符組合而成。在程序匯編時(shí),匯編程序自動(dòng)把這些表達(dá)式計(jì)算出來,形成具體的指令操作數(shù)。1、常數(shù)、變量和標(biāo)號(hào)2、表達(dá)式及運(yùn)算符2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)18三、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)191、常數(shù)、變量和標(biāo)號(hào)常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。如:12H,1234H,’AB’變量變量代表存放在存儲(chǔ)單元中的數(shù)據(jù)。
定義后的變量有三個(gè)屬性:(1)段屬性表示變量所在的邏輯段;(2)偏移量屬性表示變量所在邏輯段中的偏移地址;(3)類型屬性表示變量占用的存儲(chǔ)單元數(shù),DB、DW、DD、DQ、DT。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)191、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)201、常數(shù)、變量和標(biāo)號(hào)標(biāo)號(hào)是指令目標(biāo)代碼的符號(hào)地址。在轉(zhuǎn)移指令中常用標(biāo)號(hào)代替具體轉(zhuǎn)移地址,標(biāo)號(hào)的使用使編寫匯編語言程序時(shí),不必考慮程序匯編、連接后系統(tǒng)分配給指令代碼的實(shí)際地址。標(biāo)號(hào)同樣有三個(gè)屬性:(1)段屬性表示指令代碼所在的邏輯段;(2)偏移量屬性表示指令代碼所在的邏輯段中的偏移地址;(3)距離屬性表示標(biāo)號(hào)可作段內(nèi)轉(zhuǎn)移或段間轉(zhuǎn)移(NEAR、FAR)。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)201、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)212、表達(dá)式及運(yùn)算符表達(dá)式由操作數(shù)和運(yùn)算符組成。其中,操作數(shù)可以是常數(shù)、變量、寄存器和標(biāo)號(hào)。運(yùn)算符包括算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、分析運(yùn)算符和屬性運(yùn)算符五類運(yùn)算。
注意:運(yùn)算符的先后次序。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)2122022/11/11第4章匯編語言及匯編程序設(shè)計(jì)22五、匯編語言程序的上機(jī)過程建立匯編語言的環(huán)境,典型的匯編語言開發(fā)環(huán)境都包含4種工具:1、編輯程序2、匯編程序3、連接程序4、匯編程序的上機(jī)過程2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)22五、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)231、編輯程序(1)編輯程序是用來輸入?yún)R編語言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)匯編語言是以文本格式保存的;(3)匯編程序的源程序必須以ASM作為擴(kuò)展名;(4)輸入和編輯源程序時(shí)必須遵循匯編語言的語法規(guī)定。
匯編程序的基本結(jié)構(gòu)
例題實(shí)際操作:編輯源程序TEST11.ASM2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)231、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)24匯編程序的基本結(jié)構(gòu)DATAASEGMENT
…… ;數(shù)據(jù)段內(nèi)定義各類程序執(zhí)行需要的相關(guān)的數(shù)據(jù)DATAAENDSSTACKASEGMENTSTACK……;根據(jù)具體程序的需要,定義堆棧段供程序執(zhí)行過程;中保存臨時(shí)數(shù)據(jù)STACKAENDSCODEASEGMENTASSUMECS:CODEA,DS:DATAA,SS:STACKASTART:MOVAX,DATAA MOVDS,AX ;送數(shù)據(jù)段基址
…… ;完成具體操作的指令序列CODEAENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)24匯編2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)25實(shí)際操作(實(shí)現(xiàn)X+Y→Z,源程序文件名:TEST11.ASM)
DATA1SEGMENT ;數(shù)據(jù)段 XDB05H YDB04H ZDB?DATA1ENDS
CODE1SEGMENT ;代碼段ASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA ;數(shù)據(jù)段基址→AXMOVDS,AX ;AX→DS MOVAL,X ;內(nèi)存單元X的數(shù)據(jù)→AL ADDAL,Y ;內(nèi)存單元Y的數(shù)據(jù)+AL→AL,即X+Y→AL MOVZ,AL ;AL→內(nèi)存單元Z,即求和結(jié)果送回Z
MOVAH,4CH ;送功能號(hào)
INT21H ;系統(tǒng)功能調(diào)用,返回操作系統(tǒng)
CODE1ENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)25實(shí)際2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)262、匯編程序(1)匯編程序用來把源程序翻譯成機(jī)器碼,包括ASM.EXE,MASM.EXE;(2)匯編程序翻譯源程序,產(chǎn)生一個(gè)目標(biāo)代碼文件,與源程序文件名相同,擴(kuò)展名為OBJ。實(shí)際操作:產(chǎn)生目標(biāo)文件TEST11.OBJ2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)262、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)273、連接程序通過匯編產(chǎn)生的是OBJ文件是二進(jìn)制目標(biāo)文件,但用的是浮動(dòng)地址,不能直接運(yùn)行,必須用連接程序LINK.EXE連接和定位。實(shí)際操作:產(chǎn)生可執(zhí)行文件TEST11.EXE2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)273、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)284、匯編程序的上機(jī)過程實(shí)際操作演示2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)284、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)29data1segment ;數(shù)據(jù)段開始test1.asm xdb05h ydb04h zdb? buffdb‘5+4=$‘ ;定義一個(gè)數(shù)據(jù)串,數(shù)據(jù)串規(guī)定以$結(jié)尾,為了 ;顯示’5+4=’data1endscode1segment ;代碼段開始assumecs:code1,ds:data1 ;start: movax,data1 ;將數(shù)據(jù)段基址→ax movds,ax ;ax→ds moval,x ;內(nèi)存數(shù)據(jù)x→al addal,y ;內(nèi)存數(shù)據(jù)Y+al→al,即X+Y→al movz,al ;al→Z,即X+Y→Z
leadx,buff ;裝載buff的有效地址 movah,09h ;送功能號(hào) int21h ;系統(tǒng)功能調(diào)用,顯示屏顯示字符串’5+4=’
movdl,z ;將z送dl adddl,30h ;將z的值轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼值 movah,02h ;送功能號(hào) int21H ;系統(tǒng)功能調(diào)用,將x+y的和z以單字符形式在顯 ;示屏上顯示出來 movah,4ch ;送功能號(hào) int21h ;系統(tǒng)功能調(diào)用,返回DOS狀態(tài)code1endsendstart2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)29da2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)30六、匯編程序的設(shè)計(jì)過程1、分析問題確定算法2、繪制程序流程圖(要求同學(xué)們從現(xiàn)在開始編寫程序前養(yǎng)成先繪制流程圖的習(xí)慣)3、編寫代碼2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)30六、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)31七、匯編程序基本設(shè)計(jì)方法1、簡單程序
作業(yè)2、分支程序3、循環(huán)程序4、子程序2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)31七、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)321、簡單程序
簡單程序是指順序結(jié)構(gòu)程序,在程序中不包含任何轉(zhuǎn)移類指令。執(zhí)行時(shí)按指令的先后次序從第一條開始逐條執(zhí)行,直至程序結(jié)束。
例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)321、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)33例題1、有X,Y兩個(gè)16位數(shù)3456H和0ABCDH,求兩數(shù)之和,并將結(jié)果送到Z單元。解:①編寫流程圖2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)33例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)34例題程序清單
DATA SEGMENTX DW 3456HY DW 0ABCDHZ DW 0DATA ENDS ;設(shè)置數(shù)據(jù)段,取名DATA
CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA ;取數(shù)碼段DATA段址至AX MOVDS,AX ;段地址送DS LEASI,X ;將X的有效地址送S1 LEADI,Y ;將Y的有效地址送D1 MOVAX,[SI] ;將X的值送AX ADDAX,[DI] ;AX+Y的值送回AX MOVZ,AX ;將AX的值送到存儲(chǔ)單元Z MOVAH,4CH ;設(shè)置功能號(hào)
INT 21H ;系統(tǒng)功能調(diào)用,返回DOSCODEENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)34例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)35作業(yè)P.1262、4、5、7、122022/11/10第4章匯編語言及匯編程序設(shè)計(jì)35作業(yè)2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)362、分支程序
分支程序就是利用轉(zhuǎn)移指令,控制計(jì)算機(jī)執(zhí)行某段程序或不執(zhí)行某段程序。兩路分支多路分支例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)362、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)37例題1、內(nèi)存中有一個(gè)8位帶符號(hào)數(shù),求其絕對(duì)值,并將結(jié)果放回原處。答:編寫流程圖程序清單2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)37例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)38例題程序清單DATA2SEGMENT MDB05H ;第二個(gè)程序換成-5,即0fbhDATA2ENDSCODE2SEGMENT ASSUMECS:CODE2,DS:DATA2START: MOVAX,DATA2MOVDS,AX ;送段地址至DS LEASI,M ;取M的地址指針
MOVAL,[SI] ;取帶符號(hào)數(shù) ANDAL,AL ;判斷符號(hào)位
JNSDONE ;SF=0,轉(zhuǎn)移到DONE NEGAL ;SF=1,AL<0,AL求補(bǔ)(即0-AL)DONE:MOV[SI],AL ;絕對(duì)值送回原內(nèi)存單元
MOVDL,[SI]
ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該數(shù)值
MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)38例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)39例題2、編寫程序?qū)崿F(xiàn)函數(shù)。1(當(dāng)X>0)Y=0(當(dāng)X=0)9(當(dāng)X<0)解:編寫程序清單程序清單2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)39例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)40例題程序清單_數(shù)據(jù)段DATAXYSEGMENTXDB8FH ;另外兩組分別是7FH,00HYDB?DATAXYENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)40例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)41例題程序清單_代碼段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART:MOVAX,DATAXY MOVDS,AX ;送段地址 LEASI,X ;取X的指針 MOVAL,[SI] ;將X的值送AL ANDAL,AL ;自身與,取符號(hào)標(biāo)志位
JNSOTHER ;SF=0,轉(zhuǎn)移到OTHER MOVY,09H ;SF=1,則X<0 JMPDONEOTHER:JNZPLUS ;ZF=0轉(zhuǎn)移到PLUS MOVY,00H ;ZF=1,則X=0 JMPDONEPLUS: MOVY,01H ;SF=0,ZF=0,則X>0DONE: MOVDL,Y ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示Y的值
MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)41例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)423、循環(huán)程序
循環(huán)程序就是控制計(jì)算機(jī)反復(fù)執(zhí)行一段指令序列的程序結(jié)構(gòu)。非零次循環(huán)結(jié)構(gòu)零次循環(huán)結(jié)構(gòu)例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)423、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)431、統(tǒng)計(jì)字節(jié)數(shù)據(jù)Z的1的個(gè)數(shù),將結(jié)果放在RESULT內(nèi)。解:編寫流程圖例題程序清單2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)432022/11/11第4章匯編語言及匯編程序設(shè)計(jì)44例題程序清單——數(shù)據(jù)段DATAXYSEGMENT XDB0FFH ;第二個(gè)程序換成-5,即0fbhRESULTDB?DATAXYENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)44例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)45例題程序清單—代碼段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART: MOVAX,DATAXY MOVDS,AX ;送段地址至DS XORBL,BL ;累加器BL清0
MOVCX,08H ;循環(huán)次數(shù)送CX LEASI,X ;取X的指針 MOVAL,[SI] ;取X送ALSUM:SHRAL,1 ;邏輯右移1位 JNCNONE ;CF=0,轉(zhuǎn)移到NONE INCBL ;CF=1,BL+1→BLNONE: LOOPSUM MOVRESULT,BL;統(tǒng)計(jì)值送RESULT內(nèi)存單元
MOVDL,RESULT ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該統(tǒng)計(jì)數(shù)值 MOVAH,4CH INT21HCODEENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)45例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)464、子程序一個(gè)程序中,當(dāng)在不同的地方需要多次使用某段程序時(shí),我們常將這段程序單獨(dú)編寫成一個(gè)程序段,稱為子程序/過程。(1)子程序的定義格式(2)子程序的調(diào)用(3)編寫子程序的注意事項(xiàng)2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)464、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)47(1)子程序的定義格式格式1:子程序名PROC … RET子程序名ENDP格式2:子程序名:… RET2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)47(12022/11/11第4章匯編語言及匯編程序設(shè)計(jì)48(2)子程序的調(diào)用
格式:CALL子程序名2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)48(22022/11/11第4章匯編語言及匯編程序設(shè)計(jì)49(3)編寫子程序的注意事項(xiàng)1、現(xiàn)場保護(hù):保護(hù)調(diào)用子程序的現(xiàn)場,即保護(hù)子程序中會(huì)用到的寄存器,將這些寄存器入棧;2、功能子程序:子程序要完成的功能;3、恢復(fù)現(xiàn)場:為了使計(jì)算機(jī)返回到主程序調(diào)用時(shí)的狀態(tài),將入棧的數(shù)據(jù)出棧。注意順序!例題:子程序的基本框架2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)49(32022/11/11第4章匯編語言及匯編程序設(shè)計(jì)50子程序的基本框架設(shè)某一子程序中要用到寄存器BX,CX,SI,DI則:ABC: PUSHBX PRSHCX PUSHSI PUSHDI …… ;子程序的功能程序
POPDI POPSI POPCX POPBX RET2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)50子程2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)51例題1編寫統(tǒng)計(jì)X數(shù)據(jù)中的“1”的個(gè)數(shù)子程序,并編寫主程序調(diào)用。子程序如下:ABC:PUSHBX PUSHCX XORBL,BL ;累加器BL清0
MOVCX,08H ;循環(huán)次數(shù)送CX SUM:SHRAL,1 ;邏輯右移1位
JNCNONE ;CF=0,轉(zhuǎn)移到NONE INCBL ;CF=1,BL+1→BLNONE:LOOPSUM MOVAL,BL ;AL里保存的是“1”的統(tǒng)計(jì)個(gè)數(shù)
POPCX POPBX
RET2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)51例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)52例題1主程序_數(shù)據(jù)段_堆棧段DATAXYSEGMENTXDB0FFHSXDB?DATAXYENDS;----------------------STACKSEGMENTDW100DUP(?)STACKENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)52例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)53例題1主程序_代碼段CODE1SEGMENTASSUMECS:CODE1,DS:DATAXY,SS:STACKSTART:MOVAX,DATA MOVDS,AX LEABX,X MOVAL,[BX] CALLABC MOV[BX+1],AL
MOVDL,SX ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該統(tǒng)計(jì)數(shù)值
MOVAH,4CHINT21H
;子程序插入此處CODE1ENDSENDSTART
2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)53例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)54例題2、將一字節(jié)無符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換為兩位十進(jìn)制數(shù)的ASCII碼值,并存放在其后的兩個(gè)字節(jié)。(顯示程序用子程序編寫)。解:編寫流程圖:2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)54例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)55程序——數(shù)據(jù)段data1segmentxdb2ah ;可任取<100的無符號(hào)字節(jié)數(shù)據(jù)ydb?zdb?buffdb'2ah=$'data1ends2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)55程序2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)56代碼段:code1segmentassumecs:code1,ds:data1start:movax,data1movds,axmoval,xcbwmovbl,0ahdivblmovy,almovz,ahleadx,buffmovah,09hint21hmoval,y;下接右上;上接左下calldispmoval,zcalldispjmpeenddisp:movdl,aladddl,30hmovah,02hint21hreteend:movah,4chint21hcode1endsendstart2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)56代碼2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)57思考題試編制程序?qū)⒁粋€(gè)字?jǐn)?shù)據(jù)用十六進(jìn)制數(shù)的形式顯示在屏幕上。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)57思考2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)58八、系統(tǒng)功能調(diào)用MS-DOS是8086/8088微機(jī)系統(tǒng)廣泛使用的一種操作系統(tǒng)。MS-DOS中包含有許多通用的內(nèi)部子程序,分別用于完成I/O管理、內(nèi)存管理、文件管理以及作業(yè)管理等。MS-DOS以中斷服務(wù)程序形式提供這些功能程序,在匯編語言源程序中可以用軟中斷調(diào)用它們。系統(tǒng)功能調(diào)用(INT21H)應(yīng)用步驟:(1)傳送入口參數(shù)到規(guī)定的寄存器或存儲(chǔ)單元;(2)把子程序功能編號(hào)送到AH寄存器;(3)執(zhí)行軟件中斷指令I(lǐng)NT21H。
2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)58八、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)59常用的系統(tǒng)功能介紹(1)返回操作系統(tǒng)(功能號(hào):4CH)通常程序結(jié)束時(shí),需調(diào)用4CH的系統(tǒng)功能把微機(jī)的控制權(quán)交還給操作系統(tǒng),方法如下:MOVAH,4CH;功能號(hào)送AHINT21H;調(diào)用功能子程序在編程結(jié)束前,將以上兩條指令插入,前面許多例題已經(jīng)使用。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)59常用2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)60常用的系統(tǒng)功能介紹(2)鍵盤輸入單字符并回顯(功能號(hào):01H)這一功能調(diào)用沒有入口參數(shù),它從標(biāo)準(zhǔn)輸入設(shè)備(一般默認(rèn)為鍵盤)讀入一個(gè)字符以ASCII碼形式送到AL,并且將該字符送到標(biāo)準(zhǔn)輸出設(shè)備(一般默認(rèn)為顯示器)。如果讀入的是Ctrl-Break碼,則退出命令,讀入的內(nèi)容不送AL。例如程序中需要從鍵盤讀入一個(gè)字符,可用下面語句實(shí)現(xiàn):
MOVAH,01H INT21H當(dāng)上面第二條指令執(zhí)行完時(shí),系統(tǒng)等待鍵盤按鍵。按下任一字符時(shí),AL中的內(nèi)容即為該字符的ASCII碼,同時(shí)顯示器上顯示出所按下的字符。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)60常用2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)61(3)顯示單字符(功能號(hào):02H)這一功能調(diào)用時(shí),系統(tǒng)將DL寄存器中的ASCII字符輸出到顯示器。例如需要顯示字符“D”,可用以下指令實(shí)現(xiàn):MOVDL,‘D’ ;把要顯示的字符送DL寄存器MOVAH,02H ;功能號(hào)02H送AHINT21H ;調(diào)用系統(tǒng)功能顯示字符‘D’常用的系統(tǒng)功能介紹2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)61(32022/11/11第4章匯編語言及匯編程序設(shè)計(jì)62常用的系統(tǒng)功能介紹(4)顯示字符串(功能號(hào):09H)調(diào)用該功能可把內(nèi)存緩沖區(qū)中的字符串輸出到顯示器,緩沖區(qū)中的字符串以‘$’作為結(jié)束標(biāo)志,緩沖區(qū)的首地址存放在DX。例如:
...BUFF2DB‘Howdoyoudo!$’
...MOVDX,OFFSETBUFF2;送字符串的首地址至DXMOVAH,09H ;送功能號(hào)INT 21H ;系統(tǒng)功能調(diào)用顯示字符串執(zhí)行以上幾條指令后,屏幕上將顯示:Howdoyoudo!2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)62常用《微機(jī)原理及應(yīng)用》主講教師《微機(jī)原理及應(yīng)用》主講教師2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)64第四章匯編語言及匯編程序設(shè)計(jì)一、概述二、偽指令三、表達(dá)式及運(yùn)算符四、宏指令五、匯編語言程序的上機(jī)過程六、匯編程序的設(shè)計(jì)過程七、匯編程序基本設(shè)計(jì)方法八、系統(tǒng)功能調(diào)用
例題作業(yè)2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)2第四章2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)65一、概述
匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計(jì)語言。指令格式:1、標(biāo)號(hào)是指該指令的符號(hào)地址,以冒號(hào)結(jié)束;2、用助記符表示操作碼,是指令名稱的代表符號(hào),是語句中的關(guān)鍵字,不可缺??;2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)3一、概2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)66一、概述(續(xù)上頁)3、用符號(hào)代表操作數(shù)或操作數(shù)地址。操作數(shù)是本指令執(zhí)行需要的數(shù)據(jù)。
有些指令不需要指明操作數(shù),可以默認(rèn);
有些指令需要兩個(gè)操作數(shù);
還有些操作數(shù)可以用表達(dá)式。4、注釋項(xiàng)是可選項(xiàng),用分號(hào)開始。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)4一、概2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)67一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源程序,常用的匯編程序有ASM-86和宏匯編MASM-86。匯編語言源程序的組成部分:①可以使用CPU指令系統(tǒng)所提供的指令(硬指令);②可以使用各種符合匯編語法的表達(dá)式,運(yùn)算符以及自行定義生成滿足需要的目標(biāo)代碼的指令。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)5一、概2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)681、標(biāo)號(hào)8086/8088匯編語言中使用的標(biāo)號(hào)必須遵循下列規(guī)則:(1)大小寫字母;(2)數(shù)字0~9;(3)某些特殊字符(@,_,?)(4)第一個(gè)字符不能是數(shù)字,“?”不能單獨(dú)作為標(biāo)號(hào)。(5)標(biāo)號(hào)的有效長度是31;
有效標(biāo)號(hào):STARTMY_PROGRAM
無效標(biāo)號(hào):MAIN%1BETA2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)61、標(biāo)2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)69二、偽指令偽指令是告訴匯編程序生成目標(biāo)代碼的指令語句。1、符號(hào)定義偽指令2、內(nèi)存數(shù)據(jù)定義偽指令3、段定義偽指令4、段寄存器說明偽指令5、定位偽指令2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)7二、偽2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)701、符號(hào)定義偽指令(1)EQU偽指令(2)等號(hào)(賦值)偽指令(3)解除符號(hào)定義偽指令2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)81、符2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)71(1)EQU偽指令偽指令格式:<符號(hào)名>EQU<表達(dá)式>指令功能:給符號(hào)名賦值。符號(hào)名可以由程序員取定,表達(dá)式應(yīng)該是可以計(jì)算得出一個(gè)具體值。例:
PORTEQU88H ;定義符號(hào)PORT代表88H
DATAEQUPORT+2 ;定義符號(hào)DATA代表 ;PORT+2注意:①用EQU定義的符號(hào),不能重新再定義,除非用PURGE偽指令解除;②如果在表達(dá)式中用了其他符號(hào),必須事先定義。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)9(1)2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)72(2)等號(hào)(賦值)偽指令偽指令格式:<符號(hào)名>=<表達(dá)式>指令功能:與EQU類似,唯一的區(qū)別是“=”可以隨時(shí)對(duì)符號(hào)名賦新值,而不必使用PURGE偽指令。例:PORT=88H ;定義符號(hào)PORT代表88HDATA=PORT+2 ;定義符號(hào)DATA代表PORT+22022/11/10第4章匯編語言及匯編程序設(shè)計(jì)10(22022/11/11第4章匯編語言及匯編程序設(shè)計(jì)73(3)解除符號(hào)定義偽指令偽指令格式:PURGE符號(hào)1,符號(hào)2,…指令功能:撤消用EQU賦值的符號(hào)名,以便于賦予新值。例:PURGEPORT,DATA;撤消用EQU對(duì)PORT、;DATA的賦值2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)11(32022/11/11第4章匯編語言及匯編程序設(shè)計(jì)742、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,參數(shù)2,…
功能:數(shù)據(jù)定義語句用來分配存儲(chǔ)單元。數(shù)據(jù)定義語句的命令有:
DB
定義字節(jié)數(shù)據(jù)
DW
定義字?jǐn)?shù)據(jù)
DD
定義雙字?jǐn)?shù)據(jù)
DQ
定義8字節(jié)數(shù)據(jù)
DT
定義10字節(jié)數(shù)據(jù)2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)122、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)752、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符
格式:<復(fù)制次數(shù)>DUP數(shù)據(jù)1,數(shù)據(jù)2,…
功能:匯編程序把所定義的數(shù)據(jù)按先后次序連續(xù)分配存儲(chǔ)空間,所起的名稱只代表第一個(gè)單元的字符。
例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)132、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)762、內(nèi)存數(shù)據(jù)定義偽指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)142、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)773、段定義偽指令格式:<段名>SEGMENT
…<段名>ENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)1532022/11/11第4章匯編語言及匯編程序設(shè)計(jì)784、段寄存器說明偽指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,…]
功能:該偽指令告訴匯編程序在匯編時(shí),各個(gè)段寄存器所對(duì)應(yīng)的邏輯段基址。
注意:除了CS,所有段寄存器的實(shí)際值還必須用傳送指令在執(zhí)行時(shí)賦值2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)164、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)795、定位偽指令①格式:
ORG<表達(dá)式>
功能:起址定位偽指令告訴匯編程序,以下的程序或數(shù)據(jù)從表達(dá)式指定的偏移地址開始存放;②格式:
EVEN
功能:偶地址定位偽指令告訴匯編程序,以下的程序或數(shù)據(jù)從偶地址開始存放。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)175、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)80三、表達(dá)式及運(yùn)算符在匯編語言中,指令的操作數(shù)除了可以是常數(shù)、寄存器、變量和標(biāo)號(hào)外,還可以是表達(dá)式。表達(dá)式是由常數(shù)、寄存器、變量、標(biāo)號(hào)和專用運(yùn)算符組合而成。在程序匯編時(shí),匯編程序自動(dòng)把這些表達(dá)式計(jì)算出來,形成具體的指令操作數(shù)。1、常數(shù)、變量和標(biāo)號(hào)2、表達(dá)式及運(yùn)算符2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)18三、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)811、常數(shù)、變量和標(biāo)號(hào)常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。如:12H,1234H,’AB’變量變量代表存放在存儲(chǔ)單元中的數(shù)據(jù)。
定義后的變量有三個(gè)屬性:(1)段屬性表示變量所在的邏輯段;(2)偏移量屬性表示變量所在邏輯段中的偏移地址;(3)類型屬性表示變量占用的存儲(chǔ)單元數(shù),DB、DW、DD、DQ、DT。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)191、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)821、常數(shù)、變量和標(biāo)號(hào)標(biāo)號(hào)是指令目標(biāo)代碼的符號(hào)地址。在轉(zhuǎn)移指令中常用標(biāo)號(hào)代替具體轉(zhuǎn)移地址,標(biāo)號(hào)的使用使編寫匯編語言程序時(shí),不必考慮程序匯編、連接后系統(tǒng)分配給指令代碼的實(shí)際地址。標(biāo)號(hào)同樣有三個(gè)屬性:(1)段屬性表示指令代碼所在的邏輯段;(2)偏移量屬性表示指令代碼所在的邏輯段中的偏移地址;(3)距離屬性表示標(biāo)號(hào)可作段內(nèi)轉(zhuǎn)移或段間轉(zhuǎn)移(NEAR、FAR)。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)201、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)832、表達(dá)式及運(yùn)算符表達(dá)式由操作數(shù)和運(yùn)算符組成。其中,操作數(shù)可以是常數(shù)、變量、寄存器和標(biāo)號(hào)。運(yùn)算符包括算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、分析運(yùn)算符和屬性運(yùn)算符五類運(yùn)算。
注意:運(yùn)算符的先后次序。2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)2122022/11/11第4章匯編語言及匯編程序設(shè)計(jì)84五、匯編語言程序的上機(jī)過程建立匯編語言的環(huán)境,典型的匯編語言開發(fā)環(huán)境都包含4種工具:1、編輯程序2、匯編程序3、連接程序4、匯編程序的上機(jī)過程2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)22五、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)851、編輯程序(1)編輯程序是用來輸入?yún)R編語言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)匯編語言是以文本格式保存的;(3)匯編程序的源程序必須以ASM作為擴(kuò)展名;(4)輸入和編輯源程序時(shí)必須遵循匯編語言的語法規(guī)定。
匯編程序的基本結(jié)構(gòu)
例題實(shí)際操作:編輯源程序TEST11.ASM2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)231、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)86匯編程序的基本結(jié)構(gòu)DATAASEGMENT
…… ;數(shù)據(jù)段內(nèi)定義各類程序執(zhí)行需要的相關(guān)的數(shù)據(jù)DATAAENDSSTACKASEGMENTSTACK……;根據(jù)具體程序的需要,定義堆棧段供程序執(zhí)行過程;中保存臨時(shí)數(shù)據(jù)STACKAENDSCODEASEGMENTASSUMECS:CODEA,DS:DATAA,SS:STACKASTART:MOVAX,DATAA MOVDS,AX ;送數(shù)據(jù)段基址
…… ;完成具體操作的指令序列CODEAENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)24匯編2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)87實(shí)際操作(實(shí)現(xiàn)X+Y→Z,源程序文件名:TEST11.ASM)
DATA1SEGMENT ;數(shù)據(jù)段 XDB05H YDB04H ZDB?DATA1ENDS
CODE1SEGMENT ;代碼段ASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA ;數(shù)據(jù)段基址→AXMOVDS,AX ;AX→DS MOVAL,X ;內(nèi)存單元X的數(shù)據(jù)→AL ADDAL,Y ;內(nèi)存單元Y的數(shù)據(jù)+AL→AL,即X+Y→AL MOVZ,AL ;AL→內(nèi)存單元Z,即求和結(jié)果送回Z
MOVAH,4CH ;送功能號(hào)
INT21H ;系統(tǒng)功能調(diào)用,返回操作系統(tǒng)
CODE1ENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)25實(shí)際2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)882、匯編程序(1)匯編程序用來把源程序翻譯成機(jī)器碼,包括ASM.EXE,MASM.EXE;(2)匯編程序翻譯源程序,產(chǎn)生一個(gè)目標(biāo)代碼文件,與源程序文件名相同,擴(kuò)展名為OBJ。實(shí)際操作:產(chǎn)生目標(biāo)文件TEST11.OBJ2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)262、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)893、連接程序通過匯編產(chǎn)生的是OBJ文件是二進(jìn)制目標(biāo)文件,但用的是浮動(dòng)地址,不能直接運(yùn)行,必須用連接程序LINK.EXE連接和定位。實(shí)際操作:產(chǎn)生可執(zhí)行文件TEST11.EXE2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)273、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)904、匯編程序的上機(jī)過程實(shí)際操作演示2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)284、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)91data1segment ;數(shù)據(jù)段開始test1.asm xdb05h ydb04h zdb? buffdb‘5+4=$‘ ;定義一個(gè)數(shù)據(jù)串,數(shù)據(jù)串規(guī)定以$結(jié)尾,為了 ;顯示’5+4=’data1endscode1segment ;代碼段開始assumecs:code1,ds:data1 ;start: movax,data1 ;將數(shù)據(jù)段基址→ax movds,ax ;ax→ds moval,x ;內(nèi)存數(shù)據(jù)x→al addal,y ;內(nèi)存數(shù)據(jù)Y+al→al,即X+Y→al movz,al ;al→Z,即X+Y→Z
leadx,buff ;裝載buff的有效地址 movah,09h ;送功能號(hào) int21h ;系統(tǒng)功能調(diào)用,顯示屏顯示字符串’5+4=’
movdl,z ;將z送dl adddl,30h ;將z的值轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼值 movah,02h ;送功能號(hào) int21H ;系統(tǒng)功能調(diào)用,將x+y的和z以單字符形式在顯 ;示屏上顯示出來 movah,4ch ;送功能號(hào) int21h ;系統(tǒng)功能調(diào)用,返回DOS狀態(tài)code1endsendstart2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)29da2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)92六、匯編程序的設(shè)計(jì)過程1、分析問題確定算法2、繪制程序流程圖(要求同學(xué)們從現(xiàn)在開始編寫程序前養(yǎng)成先繪制流程圖的習(xí)慣)3、編寫代碼2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)30六、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)93七、匯編程序基本設(shè)計(jì)方法1、簡單程序
作業(yè)2、分支程序3、循環(huán)程序4、子程序2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)31七、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)941、簡單程序
簡單程序是指順序結(jié)構(gòu)程序,在程序中不包含任何轉(zhuǎn)移類指令。執(zhí)行時(shí)按指令的先后次序從第一條開始逐條執(zhí)行,直至程序結(jié)束。
例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)321、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)95例題1、有X,Y兩個(gè)16位數(shù)3456H和0ABCDH,求兩數(shù)之和,并將結(jié)果送到Z單元。解:①編寫流程圖2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)33例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)96例題程序清單
DATA SEGMENTX DW 3456HY DW 0ABCDHZ DW 0DATA ENDS ;設(shè)置數(shù)據(jù)段,取名DATA
CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA ;取數(shù)碼段DATA段址至AX MOVDS,AX ;段地址送DS LEASI,X ;將X的有效地址送S1 LEADI,Y ;將Y的有效地址送D1 MOVAX,[SI] ;將X的值送AX ADDAX,[DI] ;AX+Y的值送回AX MOVZ,AX ;將AX的值送到存儲(chǔ)單元Z MOVAH,4CH ;設(shè)置功能號(hào)
INT 21H ;系統(tǒng)功能調(diào)用,返回DOSCODEENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)34例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)97作業(yè)P.1262、4、5、7、122022/11/10第4章匯編語言及匯編程序設(shè)計(jì)35作業(yè)2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)982、分支程序
分支程序就是利用轉(zhuǎn)移指令,控制計(jì)算機(jī)執(zhí)行某段程序或不執(zhí)行某段程序。兩路分支多路分支例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)362、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)99例題1、內(nèi)存中有一個(gè)8位帶符號(hào)數(shù),求其絕對(duì)值,并將結(jié)果放回原處。答:編寫流程圖程序清單2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)37例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)100例題程序清單DATA2SEGMENT MDB05H ;第二個(gè)程序換成-5,即0fbhDATA2ENDSCODE2SEGMENT ASSUMECS:CODE2,DS:DATA2START: MOVAX,DATA2MOVDS,AX ;送段地址至DS LEASI,M ;取M的地址指針
MOVAL,[SI] ;取帶符號(hào)數(shù) ANDAL,AL ;判斷符號(hào)位
JNSDONE ;SF=0,轉(zhuǎn)移到DONE NEGAL ;SF=1,AL<0,AL求補(bǔ)(即0-AL)DONE:MOV[SI],AL ;絕對(duì)值送回原內(nèi)存單元
MOVDL,[SI]
ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該數(shù)值
MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)38例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)101例題2、編寫程序?qū)崿F(xiàn)函數(shù)。1(當(dāng)X>0)Y=0(當(dāng)X=0)9(當(dāng)X<0)解:編寫程序清單程序清單2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)39例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)102例題程序清單_數(shù)據(jù)段DATAXYSEGMENTXDB8FH ;另外兩組分別是7FH,00HYDB?DATAXYENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)40例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)103例題程序清單_代碼段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART:MOVAX,DATAXY MOVDS,AX ;送段地址 LEASI,X ;取X的指針 MOVAL,[SI] ;將X的值送AL ANDAL,AL ;自身與,取符號(hào)標(biāo)志位
JNSOTHER ;SF=0,轉(zhuǎn)移到OTHER MOVY,09H ;SF=1,則X<0 JMPDONEOTHER:JNZPLUS ;ZF=0轉(zhuǎn)移到PLUS MOVY,00H ;ZF=1,則X=0 JMPDONEPLUS: MOVY,01H ;SF=0,ZF=0,則X>0DONE: MOVDL,Y ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示Y的值
MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)41例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)1043、循環(huán)程序
循環(huán)程序就是控制計(jì)算機(jī)反復(fù)執(zhí)行一段指令序列的程序結(jié)構(gòu)。非零次循環(huán)結(jié)構(gòu)零次循環(huán)結(jié)構(gòu)例題2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)423、2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)1051、統(tǒng)計(jì)字節(jié)數(shù)據(jù)Z的1的個(gè)數(shù),將結(jié)果放在RESULT內(nèi)。解:編寫流程圖例題程序清單2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)432022/11/11第4章匯編語言及匯編程序設(shè)計(jì)106例題程序清單——數(shù)據(jù)段DATAXYSEGMENT XDB0FFH ;第二個(gè)程序換成-5,即0fbhRESULTDB?DATAXYENDS2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)44例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)107例題程序清單—代碼段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART: MOVAX,DATAXY MOVDS,AX ;送段地址至DS XORBL,BL ;累加器BL清0
MOVCX,08H ;循環(huán)次數(shù)送CX LEASI,X ;取X的指針 MOVAL,[SI] ;取X送ALSUM:SHRAL,1 ;邏輯右移1位 JNCNONE ;CF=0,轉(zhuǎn)移到NONE INCBL ;CF=1,BL+1→BLNONE: LOOPSUM MOVRESULT,BL;統(tǒng)計(jì)值送RESULT內(nèi)存單元
MOVDL,RESULT ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該統(tǒng)計(jì)數(shù)值 MOVAH,4CH INT21HCODEENDSENDSTART2022/11/10第4章匯編語言及匯編程序設(shè)計(jì)45例題2022/11/11第4章匯編語言及匯編程序設(shè)計(jì)1084、子程序一個(gè)程序中,當(dāng)在不同的地方需要多次使用某段程序時(shí),我們常將這段程序單獨(dú)編寫成一個(gè)程序段,稱為子程序/過程。(1)子程序的定義格式(2)子程序
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新建車載液晶廣告機(jī)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2024-2030年新零售產(chǎn)業(yè)市場深度分析及前景趨勢與投資研究報(bào)告
- 2024年度企業(yè)風(fēng)險(xiǎn)管理培訓(xùn)項(xiàng)目委托合同3篇
- 2024-2030年數(shù)控齒輪倒角機(jī)公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國永適特行業(yè)發(fā)展趨勢及競爭調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國大型儲(chǔ)料式塑料中空成型機(jī)項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2030年臺(tái)式空氣殺菌設(shè)備公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年全球及中國高風(fēng)險(xiǎn)檢查手套行業(yè)供需現(xiàn)狀及前景趨勢預(yù)測報(bào)告
- 2024-2030年全球及中國透明緩存行業(yè)發(fā)展動(dòng)態(tài)及前景規(guī)劃分析報(bào)告
- 2024-2030年全球及中國粘合劑定量分配機(jī)行業(yè)銷售渠道及盈利前景預(yù)測報(bào)告
- 浙江省紹興市2025屆高三上學(xué)期一模地理試題 含解析
- 安全與急救學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 人教 九下 歷史 第五單元《社會(huì)主義的發(fā)展與挫折》課件
- 醫(yī)療器械注冊專員培訓(xùn)
- 金屬冶煉知識(shí)培訓(xùn)
- 2024-2025學(xué)年度廣東省春季高考英語模擬試卷(解析版) - 副本
- 新疆喀什地區(qū)八年級(jí)上學(xué)期期末英語試題(含答案)
- 商會(huì)內(nèi)部管理制度
- 2024年物業(yè)轉(zhuǎn)讓協(xié)議書范本格式
- 《建筑力學(xué)》期末機(jī)考資料
- 南水北調(diào)江蘇水源公司2024年校園招聘高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評(píng)論
0/150
提交評(píng)論