版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2014/076.4 8086微處理器匯編程序設(shè)計(jì)微處理器匯編程序設(shè)計(jì) 程序設(shè)計(jì)語(yǔ)言按照形式與功能的不同可分為三種,程序設(shè)計(jì)語(yǔ)言按照形式與功能的不同可分為三種,即機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言即機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言。 匯編源程序需翻譯成機(jī)器語(yǔ)言,變成可執(zhí)行文件,機(jī)器匯編源程序需翻譯成機(jī)器語(yǔ)言,變成可執(zhí)行文件,機(jī)器才能執(zhí)行,這個(gè)翻譯過(guò)程叫才能執(zhí)行,這個(gè)翻譯過(guò)程叫匯編匯編。高級(jí)語(yǔ)言中稱(chēng)該過(guò)程為高級(jí)語(yǔ)言中稱(chēng)該過(guò)程為“解釋解釋”或或“編譯編譯”。執(zhí)行翻譯。執(zhí)行翻譯的程序稱(chēng)為的程序稱(chēng)為“匯編程序匯編程序”。.ASM.OBJ.EXE編譯編譯連接連接匯編匯編(編譯編譯)程序:程序: MASM.EXE2
2、014/076.4.1 8086微處理器匯編偽指令微處理器匯編偽指令1、偽指令的語(yǔ)句格式、偽指令的語(yǔ)句格式1 1)標(biāo)號(hào))標(biāo)號(hào) 目標(biāo)名后面不能用冒號(hào)目標(biāo)名后面不能用冒號(hào)“:”,標(biāo)號(hào)名可以是,標(biāo)號(hào)名可以是常量名、常量名、變量名、過(guò)程名、結(jié)構(gòu)名、記錄名變量名、過(guò)程名、結(jié)構(gòu)名、記錄名等。標(biāo)號(hào)名表示一個(gè)常等。標(biāo)號(hào)名表示一個(gè)常量或存儲(chǔ)器量或存儲(chǔ)器地址地址。2014/072)偽指令)偽指令 如定義數(shù)據(jù)偽指令如定義數(shù)據(jù)偽指令DB,DW,DD;段定義偽指令;段定義偽指令SEGMENT;定義過(guò)程偽指令;定義過(guò)程偽指令PROC;。它們是偽指令。它們是偽指令語(yǔ)句要求匯編程序完成的具體操作命令。語(yǔ)句要求匯編程序完成的具
3、體操作命令。3)操作數(shù))操作數(shù) 操作數(shù)可以是一個(gè)操作數(shù)可以是一個(gè)常數(shù)(二進(jìn)制、十進(jìn)制、十六進(jìn)制常數(shù)(二進(jìn)制、十進(jìn)制、十六進(jìn)制等)、字符串、常量名、變量名、標(biāo)號(hào)等)、字符串、常量名、變量名、標(biāo)號(hào)、一些專(zhuān)用的符號(hào)、一些專(zhuān)用的符號(hào)(如(如BYTE,F(xiàn)AR,PARA等)。等)。4)注釋?zhuān)┳⑨?必須以分號(hào)為開(kāi)始,它的作用與指令語(yǔ)句的注釋字段必須以分號(hào)為開(kāi)始,它的作用與指令語(yǔ)句的注釋字段相同。相同。2014/072、常數(shù)、變量和標(biāo)號(hào)、常數(shù)、變量和標(biāo)號(hào)1 1)常數(shù))常數(shù) 常數(shù)是沒(méi)有任何屬性的常數(shù)是沒(méi)有任何屬性的純數(shù)值純數(shù)值。2 2)變量)變量 變量是代表存放在某些存儲(chǔ)單元的數(shù)據(jù),常以變量變量是代表存放在某些
4、存儲(chǔ)單元的數(shù)據(jù),常以變量名的形式出現(xiàn)在程序中,它可以認(rèn)為是存放數(shù)據(jù)的名的形式出現(xiàn)在程序中,它可以認(rèn)為是存放數(shù)據(jù)的存儲(chǔ)單存儲(chǔ)單元地址元地址。3 3)標(biāo)號(hào))標(biāo)號(hào) 標(biāo)號(hào)是一條標(biāo)號(hào)是一條指令目標(biāo)代碼的地址指令目標(biāo)代碼的地址,它常作為轉(zhuǎn)移指,它常作為轉(zhuǎn)移指令(含子程序調(diào)用指令)的操作數(shù)。令(含子程序調(diào)用指令)的操作數(shù)。 2014/073、運(yùn)算符、運(yùn)算符1)SEG 功能是求符號(hào)名所在段的段基址。功能是求符號(hào)名所在段的段基址。2)OFFSET 功能是求符號(hào)名所在段的偏移地址。功能是求符號(hào)名所在段的偏移地址。3)TYPE 功能是獲得符號(hào)名類(lèi)型值。功能是獲得符號(hào)名類(lèi)型值。4)SIZE 功能是獲得為符號(hào)名分配的字
5、節(jié)數(shù)。功能是獲得為符號(hào)名分配的字節(jié)數(shù)。5)PTR 功能是定義符號(hào)名為新類(lèi)型。功能是定義符號(hào)名為新類(lèi)型。2014/07名字名字 EQUEQU 表達(dá)式表達(dá)式名字名字 = = 表達(dá)式表達(dá)式 給名字定義一個(gè)值或其他符號(hào)名或一條可執(zhí)行語(yǔ)句,凡給名字定義一個(gè)值或其他符號(hào)名或一條可執(zhí)行語(yǔ)句,凡是出現(xiàn)該名字的地方就用定義的數(shù)據(jù)替代。是出現(xiàn)該名字的地方就用定義的數(shù)據(jù)替代。 用用EQU賦值的名字賦值的名字不能重新賦值不能重新賦值,但,但可用可用PURGE釋放釋放后重新定義。后重新定義。例:例: TIMES TIMES EQU 50EQU 50 BUF DB BUF DB TIMES TIMES DUP(?)DUP
6、(?) ALPHAALPHA EQU 256 EQU 256 BETA = BETA = ALPHAALPHA-2-21 1)等價(jià)定義偽指令)等價(jià)定義偽指令4、偽指令、偽指令2014/071. DB:定義字節(jié),其后的每個(gè)操作數(shù)占有一個(gè)字節(jié)單元,定義字節(jié),其后的每個(gè)操作數(shù)占有一個(gè)字節(jié)單元,連續(xù)存放。連續(xù)存放。BUFFER DB 2, 3, 505H03H02HBUFFER2. DW:定義字,其后的每個(gè)操作數(shù)定義字,其后的每個(gè)操作數(shù)占有兩個(gè)字節(jié);占有兩個(gè)字節(jié);BUF DW 2, 3, 505H00H00H03H00H02HBUF2 2)內(nèi)存數(shù)據(jù)定義偽指令)內(nèi)存數(shù)據(jù)定義偽指令2014/073. DD
7、: 定義雙字,其后每個(gè)操作數(shù)占定義雙字,其后每個(gè)操作數(shù)占4個(gè)字節(jié)。個(gè)字節(jié)。4. 若僅保留單元,不初始化,用若僅保留單元,不初始化,用 ? 代替初值;代替初值; 若數(shù)據(jù)重復(fù),用若數(shù)據(jù)重復(fù),用 n DUP( )代替,代替,n為重復(fù)次數(shù)。為重復(fù)次數(shù)。STRING DD 2, 3, 5ARRAY DB 100 DUP(?) 保留保留100個(gè)字節(jié),首地址為個(gè)字節(jié),首地址為ARRAY,不初始化,不初始化,即即100個(gè)字節(jié)內(nèi)均為隨機(jī)值。個(gè)字節(jié)內(nèi)均為隨機(jī)值。2014/073 3)段定義偽指令)段定義偽指令 SEGMENT 定位定位 組合組合 類(lèi)別類(lèi)別 屬性屬性 ;段體;段體 ENDS注意注意:1.1.完整段定
8、義由完整段定義由SEGMENTSEGMENT和和ENDSENDS這一對(duì)偽指令實(shí)現(xiàn)這一對(duì)偽指令實(shí)現(xiàn)2.2.指令后的指令后的4 4個(gè)關(guān)鍵字個(gè)關(guān)鍵字用于確定段的各種用于確定段的各種屬性屬性3.3.如不指定,則采用默認(rèn)參數(shù);如不指定,則采用默認(rèn)參數(shù);用途:用途: 在匯編語(yǔ)言程序中定義邏輯段,指定段的名稱(chēng)和范圍,在匯編語(yǔ)言程序中定義邏輯段,指定段的名稱(chēng)和范圍,并指明段的定位類(lèi)型、組合類(lèi)型及類(lèi)別。并指明段的定位類(lèi)型、組合類(lèi)型及類(lèi)別。1. 段定義段定義 SEGMENT/ENDS 2014/07 定位類(lèi)型:定位類(lèi)型:規(guī)定邏輯段的起始地址要求。規(guī)定邏輯段的起始地址要求。方方 式式PARAPARA:邏輯段地址從段
9、邊界開(kāi)始邏輯段地址從段邊界開(kāi)始BYTEBYTE:邏輯段地址從字節(jié)邊界開(kāi)始邏輯段地址從字節(jié)邊界開(kāi)始WORDWORD:邏輯段地址從字邊界開(kāi)始邏輯段地址從字邊界開(kāi)始PAGEPAGE:邏輯段地址從頁(yè)邊界開(kāi)始邏輯段地址從頁(yè)邊界開(kāi)始以上以上4 4種邊界如下所示:種邊界如下所示: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PAGEPAGE 0 0 0 0 0 0 0 0 PARAPARA 0 0 WORDWORD BYTEBYTE2014/07 組合類(lèi)型:組合類(lèi)型: 規(guī)定本段與其他段的關(guān)系規(guī)定本段與其他段的關(guān)系NONENONE: 與其他段在邏輯上沒(méi)有關(guān)系。與其他段在邏輯上沒(méi)有關(guān)系。PU
10、BLICPUBLIC:與其它同名、同類(lèi)別的段相鄰地連在一起。與其它同名、同類(lèi)別的段相鄰地連在一起。STACKSTACK: 此段為堆棧段,連接方式與此段為堆棧段,連接方式與PUBLICPUBLIC相同。相同。 類(lèi)別:類(lèi)別: 需用單引號(hào)括起來(lái),凡是類(lèi)型名相同的段在連接時(shí)需用單引號(hào)括起來(lái),凡是類(lèi)型名相同的段在連接時(shí)均按先后順序連接起來(lái)。均按先后順序連接起來(lái)。 屬性類(lèi)型:屬性類(lèi)型:規(guī)定規(guī)定16位段或位段或32位段。位段。 注意:注意:大多數(shù)大多數(shù)MASMMASM程序使用程序使用 codecode、datadata和和stackstack來(lái)分別指名代碼段、數(shù)據(jù)段和堆棧段。來(lái)分別指名代碼段、數(shù)據(jù)段和堆棧段
11、。2014/07ASSUME :NOTHING ;取消段性質(zhì)的;取消段性質(zhì)的規(guī)定。規(guī)定。4 4)指定段址偽指令)指定段址偽指令 ASSUME ASSUME ASSUME :,:功能功能:告訴匯編程序在匯編時(shí),:告訴匯編程序在匯編時(shí),段寄存器段寄存器CS:DS:SS:和和ES:應(yīng)具有的應(yīng)具有的符號(hào)段基址符號(hào)段基址,但是段寄存器,但是段寄存器實(shí)際值實(shí)際值(CS除外)還要有傳送指令在執(zhí)行程序時(shí)賦值。除外)還要有傳送指令在執(zhí)行程序時(shí)賦值。 ASSUME CS: CODE,DS: DATA,SS: STACK 2014/07 過(guò)程名過(guò)程名 PROC NEAR/FAR RET 過(guò)程名過(guò)程名 ENDP 功能
12、:把具有獨(dú)立功能的程序段定義為過(guò)程功能:把具有獨(dú)立功能的程序段定義為過(guò)程, ,供其它程序調(diào)用。供其它程序調(diào)用。 對(duì)過(guò)程的調(diào)用要使用對(duì)過(guò)程的調(diào)用要使用CALL語(yǔ)句,如:語(yǔ)句,如: CALL 過(guò)程名過(guò)程名 如果在過(guò)程定義中沒(méi)有寫(xiě)明是如果在過(guò)程定義中沒(méi)有寫(xiě)明是NEAR過(guò)程或過(guò)程或FAR過(guò)程,則過(guò)程,則匯編器將這個(gè)過(guò)程默認(rèn)為匯編器將這個(gè)過(guò)程默認(rèn)為NEAR過(guò)程。過(guò)程。5 5)過(guò)程定義偽指令)過(guò)程定義偽指令2014/076 6)模塊定義偽指令)模塊定義偽指令1. 模塊開(kāi)始模塊開(kāi)始偽指令偽指令格式:格式:NAME 模塊名模塊名功能:功能:指明程序模塊的開(kāi)始,并指出模塊名,一般取源程序文指明程序模塊的開(kāi)始,并
13、指出模塊名,一般取源程序文件名為模塊名。件名為模塊名。2. 模塊結(jié)束模塊結(jié)束偽指令偽指令格式:格式:END 啟動(dòng)標(biāo)號(hào)或過(guò)程名啟動(dòng)標(biāo)號(hào)或過(guò)程名功能功能:告訴匯編程序源文件結(jié)束,并給出執(zhí)行程序的入口位置。:告訴匯編程序源文件結(jié)束,并給出執(zhí)行程序的入口位置。2014/07例:例:MYDATA SEGMENT ; 定義數(shù)據(jù)段起始語(yǔ)句定義數(shù)據(jù)段起始語(yǔ)句 ; 定義數(shù)據(jù)定義數(shù)據(jù)MYDATA ENDS; 定義數(shù)據(jù)段終止語(yǔ)句定義數(shù)據(jù)段終止語(yǔ)句MYCODE SEGMENT ; 定義代碼段起始語(yǔ)句定義代碼段起始語(yǔ)句ASSUME CS:MYCODE,DS:MYDATA; 約定段寄存器和段的關(guān)系約定段寄存器和段的關(guān)系S
14、TART: MOV AX,MYDATA; 裝填相應(yīng)的段寄存器裝填相應(yīng)的段寄存器MOV DS,AX ; 完成所需功能的程序段完成所需功能的程序段MYCODE ENDS; 定義代碼段終止語(yǔ)句定義代碼段終止語(yǔ)句END START; 程序結(jié)束程序結(jié)束2014/071. 定位定位偽指令偽指令格式格式:ORG 功能功能:把以下語(yǔ)句定義的內(nèi)存數(shù)據(jù)或程序,從表達(dá)式指定的:把以下語(yǔ)句定義的內(nèi)存數(shù)據(jù)或程序,從表達(dá)式指定的起點(diǎn)(偏移地址)開(kāi)始連續(xù)存放,直至遇到新的起點(diǎn)(偏移地址)開(kāi)始連續(xù)存放,直至遇到新的ORG指指令。表達(dá)式值是一個(gè)令。表達(dá)式值是一個(gè)無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)2. 列表列表偽指令偽指令格式格式:PAGE 行數(shù)
15、,行字?jǐn)?shù)行數(shù),行字?jǐn)?shù)功能功能:為列表文件定義每頁(yè)行數(shù)(:為列表文件定義每頁(yè)行數(shù)(10255)和每行字符)和每行字符數(shù)(數(shù)(60132),默認(rèn)值是),默認(rèn)值是66行,行,80列列7)其它偽指令)其它偽指令2014/07在匯編程序中,如果用戶(hù)程序要與輸入輸在匯編程序中,如果用戶(hù)程序要與輸入輸出設(shè)備打交道,就要調(diào)用現(xiàn)成的程序,出設(shè)備打交道,就要調(diào)用現(xiàn)成的程序,這些程序這些程序是是DOS系統(tǒng)的一部分,隨著系統(tǒng)的一部分,隨著DOS系統(tǒng)駐留內(nèi)存,系統(tǒng)駐留內(nèi)存,用戶(hù)需要按照這些程序要求的接口格式調(diào)用。用戶(hù)需要按照這些程序要求的接口格式調(diào)用。 返回操作的用返回操作的用DOS系統(tǒng)調(diào)用中斷指令:系統(tǒng)調(diào)用中斷指令:
16、INT 21H,在用戶(hù)程序結(jié)束時(shí),用下面兩條指令:,在用戶(hù)程序結(jié)束時(shí),用下面兩條指令: MOV AH, 4CH INT 21H6.4.2 DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用2014/07 8086指令系統(tǒng)中,每執(zhí)行一條軟中斷指令指令系統(tǒng)中,每執(zhí)行一條軟中斷指令I(lǐng)NT n,就,就調(diào)用一個(gè)相應(yīng)的中斷服務(wù)程序。當(dāng)調(diào)用一個(gè)相應(yīng)的中斷服務(wù)程序。當(dāng)n=51FH時(shí),調(diào)用時(shí),調(diào)用BIOS中的服務(wù)程序,當(dāng)中的服務(wù)程序,當(dāng)n=203FH時(shí),調(diào)用時(shí),調(diào)用DOS中的服中的服務(wù)程序。其中,務(wù)程序。其中,INT 21H是一個(gè)具有多種功能的服務(wù)程序,是一個(gè)具有多種功能的服務(wù)程序,一般稱(chēng)之為一般稱(chēng)之為DOS系統(tǒng)功能調(diào)用。系統(tǒng)功能
17、調(diào)用。1、DOS軟中斷軟中斷 DOS軟中斷功能見(jiàn)表軟中斷功能見(jiàn)表6-16,矢量號(hào)為,矢量號(hào)為20H27H。2014/07地址(地址(矢量號(hào)矢量號(hào)(中斷名稱(chēng)中斷名稱(chēng)地址(地址(矢量號(hào)(矢量號(hào)(中斷名稱(chēng)中斷名稱(chēng)00除以零除以零6018常駐常駐41單步單步6419引導(dǎo)程序入口引導(dǎo)程序入口82不可屏蔽不可屏蔽681A時(shí)間調(diào)用時(shí)間調(diào)用C3斷點(diǎn)斷點(diǎn)6C1B鍵盤(pán)鍵盤(pán)104溢出溢出701C定時(shí)器報(bào)時(shí)定時(shí)器報(bào)時(shí)145打印屏幕打印屏幕741D顯示器參數(shù)表顯示器參數(shù)表186保留保留781E軟盤(pán)參數(shù)表軟盤(pán)參數(shù)表1D7保留保留7C1F字符點(diǎn)陣結(jié)構(gòu)參數(shù)表字符點(diǎn)陣結(jié)構(gòu)參數(shù)表208定時(shí)器定時(shí)器8020程序結(jié)束,返回程序結(jié)束,
18、返回249鍵盤(pán)鍵盤(pán)8421DOS28A保留保留8822結(jié)束地址結(jié)束地址2CB串口串口8C23CTRL-BREAK30C串口串口9024標(biāo)準(zhǔn)錯(cuò)誤出口地址標(biāo)準(zhǔn)錯(cuò)誤出口地址34D硬盤(pán)硬盤(pán)9425絕對(duì)磁盤(pán)讀絕對(duì)磁盤(pán)讀38E軟盤(pán)軟盤(pán)9826絕對(duì)磁盤(pán)寫(xiě)絕對(duì)磁盤(pán)寫(xiě)3CF打印機(jī)打印機(jī)9C27程序結(jié)束,駐留內(nèi)存程序結(jié)束,駐留內(nèi)存4010視頻顯示視頻顯示A028為為4411設(shè)備配置檢查調(diào)用設(shè)備配置檢查調(diào)用10040保留保留4812存儲(chǔ)器容量檢查調(diào)用存儲(chǔ)器容量檢查調(diào)用18060為用戶(hù)軟中斷保留為用戶(hù)軟中斷保留4C13軟盤(pán)軟盤(pán)1A068不用不用5014通信通信20080BASIC5415盒式磁帶盒式磁帶21886BA
19、SIC5816鍵盤(pán)鍵盤(pán)3C4F1未用未用5C17打印機(jī)打印機(jī) 2014/07在匯編程序中最常用的是在匯編程序中最常用的是INT 21H中斷入口,中斷入口,也稱(chēng)為也稱(chēng)為DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用。這個(gè)中斷入口中有許多。這個(gè)中斷入口中有許多小程序,每個(gè)小程序都被編上號(hào),固定完成某一種小程序,每個(gè)小程序都被編上號(hào),固定完成某一種功能,調(diào)用時(shí)有一定的格式,因?yàn)閷?duì)某一個(gè)小程序功能,調(diào)用時(shí)有一定的格式,因?yàn)閷?duì)某一個(gè)小程序而言,輸入條件而言,輸入條件(入口參數(shù)入口參數(shù))和輸出結(jié)果和輸出結(jié)果(出口參數(shù)出口參數(shù))的的格式都是固定的。用戶(hù)在使用時(shí),既要格式都是固定的。用戶(hù)在使用時(shí),既要給出小程序給出小程序的編
20、號(hào)的編號(hào)(AH),又要按照其提供的格式進(jìn)行調(diào)用,才,又要按照其提供的格式進(jìn)行調(diào)用,才能正確完成操作。能正確完成操作。2、DOS系統(tǒng)功能調(diào)用(系統(tǒng)功能調(diào)用(INT 21H)2014/071) 1) 在顯示器上顯示單個(gè)字符在顯示器上顯示單個(gè)字符(2(2號(hào)功能號(hào)功能) )功能功能:在屏幕的光標(biāo)處顯示單個(gè)字符:在屏幕的光標(biāo)處顯示單個(gè)字符入口參數(shù)入口參數(shù): 要顯示字符的要顯示字符的ASCIIASCII碼放在碼放在DLDL中中出口參數(shù)出口參數(shù): 無(wú)無(wú)MOV DL, MOV DL, A AMOV AH, 2MOV AH, 2INT 21HINT 21H; ; 提供調(diào)用功能號(hào)提供調(diào)用功能號(hào); ; 系統(tǒng)功能調(diào)用
21、系統(tǒng)功能調(diào)用; ; 在屏幕光標(biāo)處顯示字符在屏幕光標(biāo)處顯示字符A A運(yùn)行至此,屏幕上當(dāng)前光標(biāo)處顯示字符運(yùn)行至此,屏幕上當(dāng)前光標(biāo)處顯示字符A A2014/072) 2) 在屏幕上顯示字符串在屏幕上顯示字符串(9(9號(hào)功能號(hào)功能) )功能功能:在屏幕上當(dāng)前光標(biāo)處輸出存儲(chǔ)在內(nèi)存數(shù)據(jù)段的一串字:在屏幕上當(dāng)前光標(biāo)處輸出存儲(chǔ)在內(nèi)存數(shù)據(jù)段的一串字符串,該字符串以符串,該字符串以$ $結(jié)束。結(jié)束。入口參數(shù)入口參數(shù): DS:DXDS:DX指向欲顯示字符串的首址指向欲顯示字符串的首址出口參數(shù)出口參數(shù):無(wú):無(wú)DATA SEGMENTDATA SEGMENT STRING DB STRING DB I am a stu
22、dent.$DATA ENDSDATA ENDSMOV DX, OFFSET STRINGMOV DX, OFFSET STRINGMOV AH, 9MOV AH, 9INT 21HINT 21H; ; 指向字符串首址指向字符串首址; ; 提供調(diào)用功能號(hào)提供調(diào)用功能號(hào); ; 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用2014/073) 3) 帶顯示的鍵盤(pán)輸入帶顯示的鍵盤(pán)輸入(1(1號(hào)功能號(hào)功能) )功能功能:等待鍵盤(pán)輸入,直到按下一個(gè)鍵。:等待鍵盤(pán)輸入,直到按下一個(gè)鍵。入口參數(shù)入口參數(shù): 無(wú)無(wú)出口參數(shù)出口參數(shù): 鍵入鍵的鍵入鍵的ASCIIASCII碼放在碼放在ALAL中,并在屏幕上顯示中,并在屏幕上顯示該鍵。該
23、鍵。MOV AH, 1MOV AH, 1INT 21HINT 21HMOV 2000H, ALMOV 2000H, AL; ;提供調(diào)用功能號(hào)提供調(diào)用功能號(hào); ;系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用程序運(yùn)行到此程序運(yùn)行到此停下,等待用停下,等待用戶(hù)鍵盤(pán)輸入戶(hù)鍵盤(pán)輸入. .用戶(hù)從鍵盤(pán)鍵入的鍵的用戶(hù)從鍵盤(pán)鍵入的鍵的ASCIIASCII碼進(jìn)入碼進(jìn)入ALAL中中. .2014/074) 4) 不帶顯示的鍵盤(pán)輸入不帶顯示的鍵盤(pán)輸入(7(7號(hào)功能號(hào)功能) )功能功能:等待鍵盤(pán)輸入,直到按下一個(gè)鍵。:等待鍵盤(pán)輸入,直到按下一個(gè)鍵。入口參數(shù)入口參數(shù): 無(wú)無(wú)出口參數(shù)出口參數(shù): 鍵入鍵的鍵入鍵的ASCIIASCII碼放在碼放在
24、ALAL中,但在屏幕上沒(méi)有中,但在屏幕上沒(méi)有顯示,常用于輸入密碼。顯示,常用于輸入密碼。MOV AH, 7MOV AH, 7INT 21HINT 21HMOV 2000H, MOV 2000H, ALAL; ; 提供調(diào)用功能號(hào)提供調(diào)用功能號(hào); ; 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用程序運(yùn)行到此程序運(yùn)行到此停下,等待用停下,等待用戶(hù)鍵盤(pán)輸入戶(hù)鍵盤(pán)輸入用戶(hù)從鍵盤(pán)鍵入的鍵的用戶(hù)從鍵盤(pán)鍵入的鍵的ASCIIASCII碼進(jìn)入碼進(jìn)入ALAL中中該功能與1號(hào)功能類(lèi)似,只是輸入的字符不在屏幕上顯示。2014/075) 5) 字符串輸入字符串輸入(10(10號(hào)功能號(hào)功能) )功能功能:等待從鍵盤(pán)輸入一串字符到存儲(chǔ)區(qū)的數(shù)據(jù)段
25、,直到按下:等待從鍵盤(pán)輸入一串字符到存儲(chǔ)區(qū)的數(shù)據(jù)段,直到按下回車(chē)結(jié)束輸入?;剀?chē)結(jié)束輸入。入口參數(shù)入口參數(shù):DS:DXDS:DX指向接收字符串的內(nèi)存地址的首址,該地址的指向接收字符串的內(nèi)存地址的首址,該地址的第一個(gè)字節(jié)是第一個(gè)字節(jié)是由用戶(hù)設(shè)置由用戶(hù)設(shè)置的可輸入字符串的的可輸入字符串的最大字符數(shù)最大字符數(shù)( (含回車(chē)含回車(chē)) )出口參數(shù)出口參數(shù):存放輸入字符串存儲(chǔ)區(qū)的第二個(gè)字節(jié)是:存放輸入字符串存儲(chǔ)區(qū)的第二個(gè)字節(jié)是實(shí)際輸入的實(shí)際輸入的字符數(shù)字符數(shù)( (不含回車(chē)不含回車(chē)) ),實(shí)際輸入的字符串實(shí)際輸入的字符串從該存儲(chǔ)區(qū)的從該存儲(chǔ)區(qū)的第三個(gè)字第三個(gè)字節(jié)處開(kāi)始存放節(jié)處開(kāi)始存放。2014/07DATA S
26、EGMENT BUF DB 20, 20 DUP(?)DATA ENDS LEA DX, BUF MOV AH, 0AH INT 21H14H14H程序運(yùn)行到此停下,程序運(yùn)行到此停下,等待用戶(hù)鍵盤(pán)輸入等待用戶(hù)鍵盤(pán)輸入若輸入若輸入ABCD后后BUFBUFDXDX04H04H41H41H42H42H43H43H44H44H實(shí)際字符個(gè)數(shù)實(shí)際字符個(gè)數(shù)開(kāi)始存放開(kāi)始存放2014/076) 6) 程序結(jié)束,返回程序結(jié)束,返回DOS( 4CDOS( 4C號(hào)功能號(hào)功能 ) )功能功能:將控制權(quán)移交:將控制權(quán)移交DOSDOS。入口參數(shù)入口參數(shù):無(wú):無(wú)出口參數(shù)出口參數(shù):無(wú):無(wú)MOV AH, 4CHMOV AH, 4
27、CHINT 21HINT 21H2014/07在屏幕上顯示在屏幕上顯示W(wǎng)hats your name?,用戶(hù)輸入自己的名字,用戶(hù)輸入自己的名字#后顯示:后顯示:Welcome #。 DATA SEGMENT MEG DB Whats your name ?, 10,13,$ MEG1 DB Welcome $ BUF DB 30, ? ,30 DUP(0)DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS:DATAMAIN PROC FARSTART: MOV AX, DATA MOV DS, AX LEA DX, MEG MOV AH, 9 INT 21H L
28、EA DX, BUF MOV AH, 10 INT 21H LEA DX, MEG1 MOV AH, 9 INT 21H XOR BH, BH MOV BL, BUF+1 MOV BX+BUF+2, $ LEA DX, BUF+2 MOV AH, 9 INT 21H MOV AH, 4CH INT 21HMAIN ENDPCODE ENDS END START;輸出字符串輸出字符串;接受姓名接受姓名;輸出輸出Welcome;輸出姓名輸出姓名;返回返回DOS輸入緩沖區(qū)以輸入緩沖區(qū)以$結(jié)尾結(jié)尾顯示字符串后回車(chē)換行顯示字符串后回車(chē)換行2014/07 例:例:編程實(shí)現(xiàn)多字節(jié)加法,如編程實(shí)現(xiàn)多字節(jié)加法,
29、如 S=3B74AC60F8H+20D59E36C1HF8H60HACH74H3BHC1H36H9EHD5H20H被加數(shù)、和加數(shù)DATA1DATA2 2014/07CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX MOV CX, 5 MOV SI, 0 CLC LOOPER:MOV AL, DATA2SI ADC DATA1SI,AL INC SI DEC CX JNZ LOOPER MOV AH, 4CH INT 21HCODE ENDS END STARTDATA SEGMENT DATA1 DB 0F8H
30、, 60H, 0ACH, 74H, 3BH DATA2 DB 0C1H, 36H, 9EH, 0D5H, 20H DATA ENDS2014/07特點(diǎn)特點(diǎn):計(jì)算機(jī)執(zhí)行程序的方式是:計(jì)算機(jī)執(zhí)行程序的方式是“從頭到尾從頭到尾”逐條執(zhí)行逐條執(zhí)行指令語(yǔ)句,直至程序結(jié)束。指令語(yǔ)句,直至程序結(jié)束。1、 順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)例例: 內(nèi)存內(nèi)存10050H單元的內(nèi)容拆成兩段,每段單元的內(nèi)容拆成兩段,每段4位,并將它們位,并將它們分別存入內(nèi)存分別存入內(nèi)存10051H和和10052H單元;即單元;即10050H單元中的低單元中的低4位放入位放入10051H單元的低單元的低4位,位, 10050H單元中的
31、高單元中的高4位放入位放入10052H單元的低單元的低4位,而位,而10051H和和10052H單元的高單元的高4位均為零。位均為零。6.4.3 8086微處理器匯編程序設(shè)計(jì)微處理器匯編程序設(shè)計(jì)2014/07流程圖流程圖:2014/07程序程序:DATA SEGMENT ORG 50HData1 DB 7AHData2 DB ?Data3 DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATACODE ENDS ENDSTART ?2014/07程序程序:START: MOV AX, DATA MOV DS, AX LEASI, Data1;需拆字節(jié)
32、的指針(需拆字節(jié)的指針(SI)=50H MOVAL, SI;取一個(gè)字節(jié)取一個(gè)字節(jié)(AL) MOV BL,AL;(BL)(AL),內(nèi)容備份,內(nèi)容備份 ANDAL, 0FH;(AL)的前的前4位清位清0 LEASI, Data2;(SI)=51H MOVSI, AL;把得到的后把得到的后4位位(10051H) MOVAL, BL;再取出需拆字節(jié)再取出需拆字節(jié)(AL) MOVCL, 4 SHRAL, CL;邏輯右移邏輯右移4次,前次,前4位補(bǔ)位補(bǔ)0 LEASI, Data3;(SI)=52H MOVSI, AL;(10052H)(AL)2014/07 利用利用條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令,使程序執(zhí)行到某
33、一指令后,使程序執(zhí)行到某一指令后,根據(jù)條件(即上面運(yùn)算的情況)是否滿(mǎn)足,改變程根據(jù)條件(即上面運(yùn)算的情況)是否滿(mǎn)足,改變程序執(zhí)行的次序。序執(zhí)行的次序。特點(diǎn)特點(diǎn):先用比較指令、數(shù)據(jù)操作、位測(cè)指令等改:先用比較指令、數(shù)據(jù)操作、位測(cè)指令等改變標(biāo)志寄存器各個(gè)標(biāo)志位,然后用條件轉(zhuǎn)移指變標(biāo)志寄存器各個(gè)標(biāo)志位,然后用條件轉(zhuǎn)移指令進(jìn)行分支。令進(jìn)行分支。例:例:求求AX累加器和累加器和BX寄存器中兩個(gè)無(wú)符號(hào)數(shù)之寄存器中兩個(gè)無(wú)符號(hào)數(shù)之差的絕對(duì)值,結(jié)果放在內(nèi)存差的絕對(duì)值,結(jié)果放在內(nèi)存2800H單元中。單元中。 2、分支程序設(shè)計(jì)、分支程序設(shè)計(jì)2014/07開(kāi)始初始化:清除CFAX-BXAXAX-BX0?AX內(nèi)存(28
34、00H)和(2801H)單元BX-AXBXBX內(nèi)存(2800H)和(2801H)單元暫停是否流程圖流程圖:2014/07CODE SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AXCODE ENDS END CLC MOV CX, AX SUBAX, BX JCAA MOV DI, 2800H MOV DI, AXLP: JMPLPAA: SUBBX, CX MOVDI, 2800H MOVDI, BX;清除;清除CF;AX(AXBX),影響影響CF;CF=1轉(zhuǎn)轉(zhuǎn)AA去執(zhí)行(去執(zhí)行(AXBX);結(jié)果指針;結(jié)果指針DI2800H;結(jié)果送
35、到;結(jié)果送到2800H和和2801H單元單元;暫停;暫停;BX(BXCX) 2014/07例例:編制程序編制程序 從外設(shè)從外設(shè)71H端口端口中取一中取一個(gè)數(shù)個(gè)數(shù)M,判斷其值是否,判斷其值是否在在10和和20之間,即之間,即10M20。如果如果M20,則送,則送0FFH給給外設(shè)外設(shè)73H端口端口;如果如果M10,則送,則送00H給給外外設(shè)設(shè)73H;如果如果10M20,則送,則送88H給給外設(shè)外設(shè)73H 。開(kāi)始開(kāi)始暫停暫停輸出輸出BL值到值到73號(hào)外設(shè)去號(hào)外設(shè)去輸入輸入71號(hào)外號(hào)外設(shè)的值設(shè)的值 AL令令BL=88H令令BL=00H令令BL=0FFHAL值值 20AL值值 10是是是是否否否否LP1
36、LP22014/07START: IN AL,71H;將;將71H端口的字節(jié)讀入端口的字節(jié)讀入AL CLC;清除;清除CF CMP AL,10;ALAL10 JC Lw10;小于;小于10轉(zhuǎn)轉(zhuǎn)LP1 CMP AL,20;ALAL20 JC L10to20 ;10AL1,并,并且放在內(nèi)存且放在內(nèi)存2001H單元中,單元中,而數(shù)據(jù)塊本身是從而數(shù)據(jù)塊本身是從2002H單單元開(kāi)始存放的,最后,把找元開(kāi)始存放的,最后,把找出的最大值放出的最大值放到到2000H單元單元中,假設(shè)這段數(shù)據(jù)塊中的數(shù)中,假設(shè)這段數(shù)據(jù)塊中的數(shù)都是無(wú)符號(hào)的都是無(wú)符號(hào)的8位數(shù)。位數(shù)。開(kāi)始開(kāi)始暫停暫停SI=2001H,CL=SI00 A
37、L , SI SI+1修改指針修改指針SI SI+1是是否否CX CX-1CX=0AL SIAL值值 SIAL 2000H是是否否LP程序程序:ST : MOV SI,2001HMOV CX,SIINC SIMOV AL,00HLP:CLCCMP AL,SIJNCAAMOV AL,SIAA:INC SILOOPLPMOV 2000H,AL2014/07CALLRET4、子程序設(shè)計(jì)、子程序設(shè)計(jì) 1)子程序調(diào)用與返回)子程序調(diào)用與返回2014/072)子程序設(shè)計(jì)注意問(wèn)題)子程序設(shè)計(jì)注意問(wèn)題(1 1)現(xiàn)場(chǎng)保護(hù)和恢復(fù))現(xiàn)場(chǎng)保護(hù)和恢復(fù) 為避免沖突,應(yīng)在進(jìn)入過(guò)程時(shí),將該過(guò)程所用到的寄存器內(nèi)為避免沖突,應(yīng)在
38、進(jìn)入過(guò)程時(shí),將該過(guò)程所用到的寄存器內(nèi)容保護(hù)起來(lái),稱(chēng)為保護(hù)現(xiàn)場(chǎng)。而從過(guò)程返回主程序前,再將這些容保護(hù)起來(lái),稱(chēng)為保護(hù)現(xiàn)場(chǎng)。而從過(guò)程返回主程序前,再將這些寄存器的內(nèi)容恢復(fù),稱(chēng)為恢復(fù)現(xiàn)場(chǎng)。寄存器的內(nèi)容恢復(fù),稱(chēng)為恢復(fù)現(xiàn)場(chǎng)。 保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)通常分別用堆棧壓入指令和彈出指令來(lái)保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)通常分別用堆棧壓入指令和彈出指令來(lái)實(shí)現(xiàn)。例如:實(shí)現(xiàn)。例如:2014/07(2 2)參數(shù)傳遞:)參數(shù)傳遞:寄存器傳遞寄存器傳遞存儲(chǔ)單元(參數(shù)表)傳遞存儲(chǔ)單元(參數(shù)表)傳遞堆棧傳遞堆棧傳遞2014/07 例:例:AX寄存器中存放著寄存器中存放著4位十六進(jìn)制數(shù),將這位十六進(jìn)制數(shù),將這4位十六進(jìn)制數(shù)位十六進(jìn)制數(shù)分別轉(zhuǎn)換為相
39、應(yīng)的分別轉(zhuǎn)換為相應(yīng)的ASCII碼,并依次存放到碼,并依次存放到RESULT數(shù)組的數(shù)組的4個(gè)字節(jié)中,要求子程序方法實(shí)現(xiàn)。個(gè)字節(jié)中,要求子程序方法實(shí)現(xiàn)。DATA SEGMENT DA1 DW 3D7EH RESULT DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX, DATAMOV DS, AX2014/07MOV CX, 4LEA SI, DA1LEA DI, RESULTMOV BX, SINEXT:MOV AX, BXAND AL, 0FHCALL ASCMOV DI, ALINC DIPUSH CXMOV CX, 4SHR BX, CLPOP CXLOOP NEXT十六進(jìn)制轉(zhuǎn)換成十六進(jìn)制轉(zhuǎn)換成ASCII碼子程序碼子程序 ASC PROC CMP AL, 0AHJB PL30ADD AL, 07HPL30: ADD AL,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度門(mén)店合伙人激勵(lì)機(jī)制服務(wù)合同4篇
- 2025年度二零二五農(nóng)行個(gè)人二手房交易貸款合同2篇
- 2025年度綠色建筑節(jié)能改造工程合同(二零二五版)4篇
- 二零二五年度商業(yè)門(mén)面租賃合同范本-@-1
- 2025年度綠色生態(tài)餐廳檔口租賃合同樣本4篇
- 2025年度城市軌道交通鋼管材料供應(yīng)與承包合同協(xié)議書(shū)范本
- 2025版南海區(qū)創(chuàng)新創(chuàng)業(yè)人才居住就業(yè)支持合同4篇
- 2025版門(mén)面租賃合同消防安全及責(zé)任承擔(dān)4篇
- 二零二五年度外賣(mài)送餐服務(wù)合同書(shū)(含增值服務(wù))
- 二零二五年度年薪制工資與員工晉升合同模板
- 衛(wèi)生服務(wù)個(gè)人基本信息表
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專(zhuān)題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 廣東省湛江市廉江市2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2024年湖北省知名中小學(xué)教聯(lián)體聯(lián)盟中考語(yǔ)文一模試卷
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
- 交叉口同向可變車(chē)道動(dòng)態(tài)控制與信號(hào)配時(shí)優(yōu)化研究
- 燃?xì)庑袠I(yè)有限空間作業(yè)安全管理制度
- 數(shù)列練習(xí)題(含答案)基礎(chǔ)知識(shí)點(diǎn)
- 人教版(2024新版)七年級(jí)上冊(cè)英語(yǔ)期中+期末學(xué)業(yè)質(zhì)量測(cè)試卷 2套(含答案)
- 通用電子嘉賓禮薄
評(píng)論
0/150
提交評(píng)論