




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)硬件技術(shù)基礎(chǔ)計(jì)算機(jī)硬件技術(shù)基礎(chǔ)2程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 v程序設(shè)計(jì)語(yǔ)言是專門(mén)為計(jì)算機(jī)編程所配置的語(yǔ)言。它們按照形式與功能的不同可分為: 機(jī)器語(yǔ)言(Machine Language) 匯編語(yǔ)言(Assembler Language) 高級(jí)語(yǔ)言(High Level Language)3機(jī)器語(yǔ)言v計(jì)算機(jī)能夠直接識(shí)別的數(shù)據(jù)是由二進(jìn)制數(shù)0和1組成的代碼。機(jī)器指令就是用二進(jìn)制代碼組成的指令,一條機(jī)器指令控制計(jì)算機(jī)完成一個(gè)基本操作。v用機(jī)器語(yǔ)言編寫(xiě)的程序是計(jì)算機(jī)惟一能夠直接識(shí)別并執(zhí)行的程序,而用其他語(yǔ)言編寫(xiě)的程序必須經(jīng)過(guò)翻譯才能變換成機(jī)器語(yǔ)言程序,所以,機(jī)器語(yǔ)言程序被稱為目標(biāo)程序。v機(jī)器語(yǔ)
2、言主要具有下列兩個(gè)特點(diǎn): 機(jī)器語(yǔ)言與機(jī)器密切相關(guān) 機(jī)器語(yǔ)言設(shè)計(jì)程序非常困難,但容易實(shí)現(xiàn)高性能程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 4匯編語(yǔ)言v為了克服機(jī)器語(yǔ)言的缺點(diǎn),人們采用助記符表示機(jī)器指令的操作碼,用變量代替操作數(shù)的存放地址等,這樣就形成了匯編語(yǔ)言。所以匯編語(yǔ)言是一種用符號(hào)書(shū)寫(xiě)的、基本操作與機(jī)器指令相對(duì)應(yīng)的、并遵循一定語(yǔ)法規(guī)則的計(jì)算機(jī)語(yǔ)言。v用匯編語(yǔ)言編寫(xiě)的程序稱為匯編源程序。 v匯編語(yǔ)言是一種符號(hào)語(yǔ)言,比機(jī)器語(yǔ)言容易理解和掌握,也容易調(diào)試和維護(hù)。但是,匯編語(yǔ)言源程序要翻譯成機(jī)器語(yǔ)言程序才可以由計(jì)算機(jī)執(zhí)行。這個(gè)翻譯的過(guò)程稱為“匯編”,這種把匯編源程序翻譯成目標(biāo)程序的語(yǔ)言加工程序稱為匯編程序。
3、程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 5高級(jí)語(yǔ)言v機(jī)器語(yǔ)言和匯編語(yǔ)言以外的程序設(shè)計(jì)語(yǔ)言統(tǒng)稱高級(jí)語(yǔ)言。其特點(diǎn)是更加接近自然語(yǔ)言和慣用的數(shù)學(xué)表達(dá)形式,與計(jì)算機(jī)硬件結(jié)構(gòu)無(wú)關(guān),因而便于使用,便于交流和推廣。v總之,高級(jí)語(yǔ)言編程效率高,但運(yùn)行效率低。v高級(jí)語(yǔ)言可分成編譯型和解釋型高級(jí)語(yǔ)言,分別使用編譯程序和解釋程序?qū)⒃闯绦蚍g成機(jī)器語(yǔ)言程序,然后交計(jì)算機(jī)執(zhí)行。程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 6語(yǔ)言匯編語(yǔ)言高級(jí)語(yǔ)言代碼效率高較低源程序可讀性較差好對(duì)硬件的依附性高低程序員硬件知識(shí)高較低應(yīng)用范圍較廣廣泛匯編語(yǔ)言和高級(jí)語(yǔ)言的比較:匯編語(yǔ)言和高級(jí)語(yǔ)言的比較:程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 71匯編程序匯編程序 匯
4、編是把匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言描述的目標(biāo)程序匯編是把匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言描述的目標(biāo)程序的過(guò)程。的過(guò)程。匯編程序是完成匯編任務(wù)的程序。匯編程序是完成匯編任務(wù)的程序。2連接程序連接程序 連接程序的主要功能是實(shí)現(xiàn)多個(gè)目標(biāo)文件及庫(kù)文件的連連接程序的主要功能是實(shí)現(xiàn)多個(gè)目標(biāo)文件及庫(kù)文件的連接,并完成浮動(dòng)地位的重定位。接,并完成浮動(dòng)地位的重定位。從匯編語(yǔ)言源程序到可執(zhí)行程序的生成過(guò)程如圖所示。從匯編語(yǔ)言源程序到可執(zhí)行程序的生成過(guò)程如圖所示。程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 8匯編語(yǔ)言程序開(kāi)發(fā)過(guò)程匯編語(yǔ)言程序開(kāi)發(fā)過(guò)程源程序源程序.asm.asm目標(biāo)程序目標(biāo)程序.obj.obj可執(zhí)行程序可執(zhí)行程序.ex
5、e.exe運(yùn)行結(jié)果運(yùn)行結(jié)果編輯編輯文本編輯器文本編輯器匯編匯編連接連接linklinkDOSDOS下執(zhí)行下執(zhí)行debugdebug執(zhí)行執(zhí)行masmmasm非編譯非編譯可執(zhí)行程序可執(zhí)行程序轉(zhuǎn)換轉(zhuǎn)換exe2binexe2bin程序設(shè)計(jì)語(yǔ)言概述程序設(shè)計(jì)語(yǔ)言概述 9匯編語(yǔ)言程序基本結(jié)構(gòu)匯編語(yǔ)言程序基本結(jié)構(gòu)說(shuō)明:說(shuō)明: 除代碼段外,其余段可缺省除代碼段外,其余段可缺??; 各種段均可有多個(gè),用匯編語(yǔ)各種段均可有多個(gè),用匯編語(yǔ)言指令可指定段與段寄存器關(guān)系,言指令可指定段與段寄存器關(guān)系,數(shù)據(jù)段數(shù)據(jù)段附加段附加段( (段寄存器不同段寄存器不同) ); 各段無(wú)順序要求;各段無(wú)順序要求; 通過(guò)通過(guò)ENDEND指明模
6、塊到此指明模塊到此結(jié)束結(jié)束, 程序從程序從“標(biāo)號(hào)標(biāo)號(hào)”處處開(kāi)始開(kāi)始執(zhí)行。執(zhí)行。數(shù)據(jù)段數(shù)據(jù)段堆棧段堆棧段附加段附加段代碼段代碼段END END 標(biāo)號(hào)標(biāo)號(hào)主模塊主模塊(1(1個(gè)個(gè)) )數(shù)據(jù)段數(shù)據(jù)段附加段附加段代碼段代碼段ENDEND從模塊從模塊(n(n個(gè)個(gè)) )堆棧段堆棧段8086/8088匯編源程序匯編源程序 10 匯編語(yǔ)言程序舉例:匯編語(yǔ)言程序舉例:DATA SEGMENTDATA SEGMENT BUF1 DB 34H BUF1 DB 34H BUF2 DB 2AH BUF2 DB 2AH SUM DB ? SUM DB ?DATA ENDSDATA ENDSSSEG SEGMENT STA
7、CKSSEG SEGMENT STACK DB 512 DUP(0) DB 512 DUP(0)SSEG ENDSSSEG ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE, DS:DATA SS:SSEG ASSUME CS:CODE, DS:DATA SS:SSEGSTART: MOV AX, DATASTART: MOV AX, DATA MOV DS, AX MOV DS, AX MOV AL, BUF1 MOV AL, BUF1 ADD AL, BUF2 ADD AL, BUF2 MOV SUM, AL MOV SUM, AL MOV AH, 4
8、CH MOV AH, 4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START8086/8088匯編源程序匯編源程序 118086/8088匯編源程序匯編源程序v匯編程序在結(jié)構(gòu)和語(yǔ)句格式上有以下幾個(gè)特點(diǎn): 匯編程序一般由若干段組成,每個(gè)段都有一個(gè)名字,以SEGMENT作為段的開(kāi)始,以ENDS作為段的結(jié)束,前面都要冠以相同的名字。從段的性質(zhì)上看,可分為代碼段、堆棧段、數(shù)據(jù)段和附加段4種。數(shù)據(jù)段存放原始數(shù)據(jù)和運(yùn)算結(jié)果,堆棧段用于存放堆棧數(shù)據(jù),代碼段存放實(shí)現(xiàn)CPU要執(zhí)行的指令。 匯編程序每一行只有一條語(yǔ)句,且不能超過(guò)128個(gè)字符。整個(gè)源程序必
9、須以END語(yǔ)句來(lái)結(jié)束,END后面的標(biāo)號(hào)表示該程序執(zhí)行時(shí)的起始地址。128086/8088匯編源程序匯編源程序v匯編語(yǔ)言語(yǔ)句的類型 匯編語(yǔ)言的語(yǔ)句可分為兩大類: 指令性語(yǔ)句 指令性語(yǔ)句是CPU要執(zhí)行的語(yǔ)句,匯編程序?qū)a(chǎn)生與它一一對(duì)應(yīng)的機(jī)器目標(biāo)代碼如 MOV DS,AX 指示性語(yǔ)句(又稱為偽指令語(yǔ)句) 指示性語(yǔ)句是只起說(shuō)明作用而不能執(zhí)行的語(yǔ)句,它在匯編時(shí)只提供一些定義符號(hào)、分配存儲(chǔ)單元等相關(guān)信息如 DATA SEGMENT13v匯編語(yǔ)言語(yǔ)句格式 指令性語(yǔ)句的格式 標(biāo)號(hào):前綴指令助記符操作數(shù)表;注釋 標(biāo)號(hào)方便轉(zhuǎn)移指令尋找轉(zhuǎn)移目標(biāo)地址 前綴配合其他指令 如串操作指令中的REP 助記符即具體指令 操作數(shù)
10、表是由逗號(hào)隔開(kāi)的多個(gè)操作數(shù) 注釋是說(shuō)明文字,提高程序可讀性 偽指令語(yǔ)句的格式 名字偽操作命令操作數(shù)表;注釋8086/8088匯編源程序匯編源程序 148086/8088匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式 v(1)常數(shù))常數(shù) 數(shù)值常數(shù):數(shù)值常數(shù):二二/八八/十十/十六進(jìn)制數(shù)分別以十六進(jìn)制數(shù)分別以B/Q/D(或缺省或缺省結(jié)尾字符結(jié)尾字符)/H結(jié)尾,如結(jié)尾,如001B、35Q、98D或或98、0A2H。 字符串常數(shù):字符串常數(shù):用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符,如用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符,如A、AB;字符用;字符用ASCII碼形式存儲(chǔ)。碼形式存儲(chǔ)。 應(yīng)用:應(yīng)用:作立即數(shù)、位移量、賦
11、初值用。作立即數(shù)、位移量、賦初值用。v(2)變量)變量 組成:組成:在除代碼段外的段中定義,只由名字組成。在除代碼段外的段中定義,只由名字組成。 屬性:屬性:段段 屬屬 性性變量變量(定義時(shí)定義時(shí))所在段的起始地址;所在段的起始地址; 偏移屬性偏移屬性變量與所在段起始地址間字節(jié)數(shù);變量與所在段起始地址間字節(jié)數(shù); 類型屬性類型屬性表明為它所保留的主存字節(jié)數(shù),表明為它所保留的主存字節(jié)數(shù), DB/DW/DD/DQ/DT對(duì)應(yīng)對(duì)應(yīng)1/2/4/8/10字節(jié)。字節(jié)。158086/8088匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式v(3)數(shù)字表達(dá)式)數(shù)字表達(dá)式 為常數(shù)、寄存器名、標(biāo)號(hào)為常數(shù)、寄存器名、標(biāo)
12、號(hào)/變量與運(yùn)算符的組合。變量與運(yùn)算符的組合。 運(yùn)算符運(yùn)算符有算術(shù)、邏輯、關(guān)系、數(shù)值返回、屬性有算術(shù)、邏輯、關(guān)系、數(shù)值返回、屬性5種。種。種類種類運(yùn)算符運(yùn)算符示例示例算術(shù)算術(shù)+ +、/ /、MODMODMOV AL,17/5 MOV AL,17/5 ;AL=3AL=3邏輯邏輯ANDAND、OROR、XORXOR、NOTNOTMOV AL,VAL AND 01HMOV AL,VAL AND 01H;AL=01AL=01或或00H00H關(guān)系關(guān)系EQEQ、NENE、LTLT、GTGT、LELE、GEGEMOV AX,DAT GT 0CH MOV AX,DAT GT 0CH ;=0FFFFH=0FFFF
13、HMOV AL,DAT LE 0CH MOV AL,DAT LE 0CH ;=00H=00H數(shù)值數(shù)值回送回送SEGSEG、OFFSETOFFSET、TYPETYPE、LENGTHLENGTH、SIZESIZE屬性屬性PTRPTR、SHORTSHORT、段操作符、段操作符、THISTHIS、HIGHHIGH、LOWLOW16v(4)數(shù)值返回運(yùn)算符)數(shù)值返回運(yùn)算符運(yùn)算符運(yùn)算符作用對(duì)象作用對(duì)象功能功能地址地址回送回送SEGSEG標(biāo)號(hào)或變量標(biāo)號(hào)或變量返回其所在段的返回其所在段的段基址值段基址值OFFSETOFFSET標(biāo)號(hào)或變量標(biāo)號(hào)或變量返回其相對(duì)段基址的返回其相對(duì)段基址的偏移量偏移量符號(hào)符號(hào)特征特征回
14、送回送TYPETYPE標(biāo)號(hào)或變量標(biāo)號(hào)或變量返回用數(shù)字表示的返回用數(shù)字表示的類型屬性類型屬性LENGTHLENGTH變量變量若變量用若變量用DUPDUP定義,則返回定義定義,則返回定義元元素個(gè)數(shù)素個(gè)數(shù),否則返回,否則返回1 1SIZESIZE變量變量返回用返回用DUPDUP定義的定義的存儲(chǔ)空間存儲(chǔ)空間(LENGTH(LENGTH* *TYPETYPE之積之積) )TYPETYPE對(duì)象種類對(duì)象種類TYPETYPE對(duì)象類型對(duì)象類型TYPETYPE運(yùn)算結(jié)果運(yùn)算結(jié)果變量變量DB/DW/DD/DQ/DTDB/DW/DD/DQ/DT1/2/4/8/101/2/4/8/10標(biāo)號(hào)標(biāo)號(hào)NEAR/FARNEAR/F
15、AR-1/-2-1/-28086/8088匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式17 例:例: D_SEG SEGMENTD_SEG SEGMENT NUM1 DB 10 DUP(10) NUM1 DB 10 DUP(10) ;數(shù)據(jù)定義;數(shù)據(jù)定義 NUM2 DW 20 DUP(0, 4 DUP(2)NUM2 DW 20 DUP(0, 4 DUP(2) NUM3 DB 10H, 5 DUP(?) NUM3 DB 10H, 5 DUP(?) NUM4 DB STRING NUM4 DB STRING D_SEG ENDS D_SEG ENDS ;假設(shè);假設(shè)DSDS指向指向D_SEGD_S
16、EG段段 MOV AX, MOV AX, NUM1 NUM1 ;等價(jià)于;等價(jià)于AX(DS)AX(DS) MOV BX, MOV BX, NUM2 NUM2 ;AXAX與與BXBX值相同值相同 MOV SI, MOV SI, NUM1 NUM1 ;NUM1NUM1相對(duì)于段的偏移量相對(duì)于段的偏移量SISI MOV DI, MOV DI, NUM2 NUM2 ;等價(jià)于;等價(jià)于LEA DI, NUM2LEA DI, NUM2 MOV AH, MOV AH, NUM2 NUM2 ;2AH2AH MOV BH, MOV BH, NUM2 NUM2 ;20BH20BH(指最外層參數(shù))(指最外層參數(shù)) MOV
17、 AL,MOV AL, NUM3 NUM3 ;1AL(1AL(指第一個(gè)參數(shù)指第一個(gè)參數(shù)) ) MOV CL, MOV CL, NUM2 NUM2 ;2020* *2CL2CL MOV CH, MOV CH, NUM4 NUM4 ;1 1* *1CH1CH8086/8088匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式18(5)屬性運(yùn)算符)屬性運(yùn)算符 PTRPTR格式:格式: PTRPTR 表達(dá)式表達(dá)式 PTRPTR功能:功能:用新類型取代表達(dá)式默認(rèn)的數(shù)據(jù)類型用新類型取代表達(dá)式默認(rèn)的數(shù)據(jù)類型 PTRPTR說(shuō)明:說(shuō)明: 表達(dá)式為表達(dá)式為MEMMEM操作數(shù)或變量時(shí),類型可為操作數(shù)或變量時(shí),類型可為
18、BYTEBYTE、WORDWORD、DWORDDWORD,表達(dá)式為標(biāo)號(hào)時(shí),類型可為,表達(dá)式為標(biāo)號(hào)時(shí),類型可為NEARNEAR、FARFAR; 僅改變數(shù)據(jù)類型屬性,且僅在本語(yǔ)句有效。僅改變數(shù)據(jù)類型屬性,且僅在本語(yǔ)句有效。 PTRPTR示例示例: DATA1 DB 10H, 20H, 30HDATA1 DB 10H, 20H, 30H DATA2 DW 0123H DATA2 DW 0123H MOV AX, MOV AX, WORD PTRWORD PTR DATA1 DATA1 ;(AX)2010H(AX)2010H MOV BL, MOV BL, BYTE PTRBYTE PTR DATA2
19、 DATA2 ;(BL)23H(BL)23H MOV MOV BYTE PTRBYTE PTRSI, 60H SI, 60H ;字節(jié)傳送;字節(jié)傳送 SUB SUB WORD PTRWORD PTRBX, 36H BX, 36H ;字?jǐn)?shù)據(jù)相減;字?jǐn)?shù)據(jù)相減 JMP JMP FAR PTRFAR PTR SUB_P1 SUB_P1 ;段間直接轉(zhuǎn)移;段間直接轉(zhuǎn)移 JMP JMP WORD PTRWORD PTRBX BX ;段內(nèi)間接轉(zhuǎn)移;段內(nèi)間接轉(zhuǎn)移8086/8088匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式19v(6)各運(yùn)算符的優(yōu)先級(jí))各運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符運(yùn)算符類別類別1 1()
20、()、LENGTHLENGTH、SIZESIZE數(shù)值回送運(yùn)算符數(shù)值回送運(yùn)算符2 2OFFSETOFFSET、SEGSEG、TYPETYPE、 PTRPTR屬性和數(shù)值回送運(yùn)屬性和數(shù)值回送運(yùn)算符算符3 3* *、/ /、MODMOD算術(shù)運(yùn)算符算術(shù)運(yùn)算符4 4+ +、- -算術(shù)運(yùn)算符算術(shù)運(yùn)算符5 5EQEQ、NENE、LTLT、GTGT、LELE、GEGE關(guān)系運(yùn)算符關(guān)系運(yùn)算符6 6NOTNOT邏輯運(yùn)算符邏輯運(yùn)算符7 7ANDAND邏輯運(yùn)算符邏輯運(yùn)算符8 8OROR、XORXOR邏輯運(yùn)算符邏輯運(yùn)算符8086/8088匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式匯編語(yǔ)言的數(shù)據(jù)項(xiàng)與表達(dá)式20處理器選擇偽指令 (8086無(wú)此指
21、令)數(shù)據(jù)定義偽指令段定義偽指令程序開(kāi)始和結(jié)束偽指令表達(dá)式賦值偽指令其他偽指令(地址計(jì)數(shù)、對(duì)準(zhǔn)等)過(guò)程定義偽指令8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 211 1、處理器選擇偽指令、處理器選擇偽指令 格式格式 : .8086 .8086 選擇選擇80868086指令系統(tǒng)指令系統(tǒng) .286 .286 選擇選擇8028680286指令系統(tǒng)指令系統(tǒng) .286P .286P 選擇保護(hù)方式下的選擇保護(hù)方式下的8028680286指令系統(tǒng)指令系統(tǒng) .386 .386 選擇選擇8038680386指令系統(tǒng)指令系統(tǒng) .386P .386P 選擇保護(hù)方式下的選擇保護(hù)方式下的8038680386指令系統(tǒng)
22、指令系統(tǒng) .486 .486 選擇選擇8048680486指令系統(tǒng)指令系統(tǒng) .486P .486P 選擇保護(hù)方式下的選擇保護(hù)方式下的8048680486指令系統(tǒng)指令系統(tǒng) .586 .586 選擇選擇PentiumPentium指令系統(tǒng)指令系統(tǒng) .586P .586P 選擇保護(hù)方式下選擇保護(hù)方式下PentiumPentium的指令系統(tǒng)的指令系統(tǒng)8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 222 2、數(shù)據(jù)定義偽指令、數(shù)據(jù)定義偽指令(1 1)數(shù)據(jù)定義)數(shù)據(jù)定義 格式:格式: 變量名變量名 類型定義符類型定義符 參數(shù)參數(shù),參數(shù)參數(shù) 操作:操作:為變量分配存儲(chǔ)空間,并置初值到存儲(chǔ)單元為變量分配存
23、儲(chǔ)空間,并置初值到存儲(chǔ)單元說(shuō)明:說(shuō)明: 變量類型變量類型數(shù)值變量和字符串變量;數(shù)值變量和字符串變量; 類型定義符類型定義符可為可為DB/DW/DD/DF/DQ/DT,表示每個(gè)參數(shù)占,表示每個(gè)參數(shù)占1/2/4/6/8/10字節(jié)存儲(chǔ)空間,字節(jié)存儲(chǔ)空間,字符串變量只能用字符串變量只能用DB類型定義類型定義; 參數(shù)參數(shù)可為常數(shù)、表達(dá)式、可為常數(shù)、表達(dá)式、?表達(dá)式、字符串、表達(dá)式、字符串、DUP表達(dá)式表達(dá)式 字符串用單引號(hào)括起來(lái),如字符串用單引號(hào)括起來(lái),如ABCDE DUP表達(dá)式格式:表達(dá)式格式:n DUP(參數(shù)參數(shù),參數(shù)參數(shù)), n表示重復(fù)次數(shù)。表示重復(fù)次數(shù)。8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言
24、的偽指令 23例:例: X1 DB 40H X1 DB 40H ;為;為X1X1分配分配1 1個(gè)字節(jié),初值個(gè)字節(jié),初值40H40H X2 DW 10 X2 DW 10* *10 10 ;為;為X2X2分配分配2 2個(gè)字節(jié),初值個(gè)字節(jié),初值100(0064H)100(0064H) X3 DB 10,20,30 X3 DB 10,20,30 ;為;為X3X3分配分配3 3個(gè)字節(jié),初值為個(gè)字節(jié),初值為10,20,3010,20,30 Y1 DB 20H,? Y1 DB 20H,? ;為;為Y1Y1分配分配2 2個(gè)字節(jié),第個(gè)字節(jié),第2 2個(gè)字節(jié)無(wú)初值個(gè)字節(jié)無(wú)初值 S1 DB S1 DB HELHEL
25、;S1S1占占3 3個(gè)字節(jié),值為個(gè)字節(jié),值為ASCIIASCII碼碼 S2 DB S2 DB H H, E E, L L ;S2S2與與S1S1相同相同 S3 DW S3 DW HEHE ;非字符串定義;非字符串定義 VAR1 DW 2 DUP(2,4),1476HVAR1 DW 2 DUP(2,4),1476H VAR2 DB 2 DUP(?,2 DUP VAR2 DB 2 DUP(?,2 DUP(A A,B B) )EEHHS3S3? ?AABBAABB? ?AABBAABBVAR2VAR202H02H00H00H04H04H00H00H02H02H00H00H04H04H00H00H76
26、H76H14H14HVAR1VAR1HHEELLS1S1大大小小8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 24(2 2)數(shù)據(jù)別名定義)數(shù)據(jù)別名定義 格式:格式: 變量或標(biāo)號(hào)變量或標(biāo)號(hào) LABEL LABEL 操作:操作:給變量給變量/ /標(biāo)號(hào)重新定義別名和改變標(biāo)號(hào)重新定義別名和改變別名屬性別名屬性 說(shuō)明:說(shuō)明:不分配新的存儲(chǔ)空間。不分配新的存儲(chǔ)空間。 示例示例1 1: BARRAY LABEL BYTEBARRAY LABEL BYTE ARRAY DW 100 DUP(0)ARRAY DW 100 DUP(0) ADD AL, ADD AL,BARRAYBARRAY4949 ;第;
27、第5050個(gè)字節(jié),個(gè)字節(jié),字節(jié)相加字節(jié)相加 ADD AX, ADD AX,ARRAYARRAY98 98 ;第;第50個(gè)字,個(gè)字,字相加字相加示例示例2 2: SUBPF LABEL FARSUBPF LABEL FAR SUBPSUBP: SUB AX,AXSUB AX,AX JMP JMP SUBPSUBP ;段內(nèi)段內(nèi) FARPRO PROC FAR FARPRO PROC FAR JMP JMP SUBPFSUBPF ;段間段間8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 253 3、段定義偽指令、段定義偽指令(1 1)段定義偽指令)段定義偽指令 格式:格式:段名段名 SEGMEN
28、TSEGMENT定位類型定位類型組合類型組合類型類別名類別名 ;語(yǔ)句體;語(yǔ)句體 段名段名 ENDSENDS 操作:操作:定義邏輯段定義邏輯段 說(shuō)明:說(shuō)明:代碼段的語(yǔ)句體為指令和偽指令,其它段為偽指令。代碼段的語(yǔ)句體為指令和偽指令,其它段為偽指令。 8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 268086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 a. a.定位類型:定位類型:指定當(dāng)前段起始地址的性質(zhì)指定當(dāng)前段起始地址的性質(zhì) PARAPARA 起始地址的低起始地址的低4 4位為位為0H0H,即,即1616的倍數(shù);的倍數(shù); PAGEPAGE 起始地址的低起始地址的低8 8位為位為00H,0
29、0H,即即256256的倍數(shù)的倍數(shù) BYTEBYTE 可從任意地址開(kāi)始可從任意地址開(kāi)始 WORDWORD 當(dāng)前段的起始地址為偶地址當(dāng)前段的起始地址為偶地址 27 b. b.組合類型:組合類型:指明程序連接時(shí),段的合并方法指明程序連接時(shí),段的合并方法 PRIVATEPRIVATE 不與其他模塊中任何段連接或重疊不與其他模塊中任何段連接或重疊 PUBLICPUBLIC 不同模塊中不同模塊中PUBLICPUBLIC類型的同名段類型的同名段連接連接在一起,在一起,形成一個(gè)單一的段形成一個(gè)單一的段( (段長(zhǎng)為段長(zhǎng)為) ) COMMONCOMMON 不同模塊中不同模塊中COMMONCOMMON類型的同名段
30、類型的同名段重疊重疊在一起,在一起,共享相同的存儲(chǔ)區(qū)共享相同的存儲(chǔ)區(qū)( (共享存儲(chǔ)區(qū)長(zhǎng)度為共享存儲(chǔ)區(qū)長(zhǎng)度為max)max) STACKSTACK 功能同功能同PUBLICPUBLIC,但新段為堆棧段,但新段為堆棧段(段長(zhǎng)為段長(zhǎng)為) 8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令28 c. c.類別名:類別名:指明程序連接時(shí),段間次序的確定方法指明程序連接時(shí),段間次序的確定方法 LINKLINK程序?qū)⒏髂K相同程序?qū)⒏髂K相同類別名類別名的各段依次序連續(xù)存放的各段依次序連續(xù)存放在內(nèi)存中,但各段相互獨(dú)立。在內(nèi)存中,但各段相互獨(dú)立。 8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令29 段定義
31、偽指令示例:段定義偽指令示例: D_SEG D_SEG SEGMENTSEGMENT DATADATA NUM1 DB 10 DUP(?) NUM1 DB 10 DUP(?) D_SEG D_SEG ENDSENDS S_SEG SEGMENT S_SEG SEGMENT PARAPARA STACK STACK DW 100 DUP(?) DW 100 DUP(?) S_SEG ENDS S_SEG ENDS E_SEG SEGMENT PARA E_SEG SEGMENT PARA DATADATA STRING DB HELLO STRING DB HELLO E_SEG ENDS E_
32、SEG ENDS ;連接;連接(LINK)(LINK)時(shí),時(shí),D_SEGD_SEG段與段與E_SEGE_SEG段是連續(xù)的段是連續(xù)的8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令30(2 2)指定段寄存器偽指令)指定段寄存器偽指令 格式:格式:ASSUME ASSUME 段寄存器段寄存器: :段名段名 ,段寄存器段寄存器: :段名段名 操作:操作:明確段和段寄存器的關(guān)系明確段和段寄存器的關(guān)系 說(shuō)明:說(shuō)明:代碼段代碼段必須至少有一個(gè)必須至少有一個(gè)ASSUMEASSUME語(yǔ)句,語(yǔ)句,ASSUMEASSUME可以可以出現(xiàn)在源程序中的任何地方;出現(xiàn)在源程序中的任何地方; 對(duì)同一段寄存器重復(fù)指定時(shí)最后
33、一個(gè)有效。對(duì)同一段寄存器重復(fù)指定時(shí)最后一個(gè)有效。8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令318086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令 a.CS a.CS的指定的指定 必須指定必須指定CSCS,最后一次指定必須在開(kāi)始執(zhí)行段中,最后一次指定必須在開(kāi)始執(zhí)行段中,且段名為開(kāi)始執(zhí)行段的段名。且段名為開(kāi)始執(zhí)行段的段名。 CS=ENDCS=END指令中標(biāo)號(hào)指令中標(biāo)號(hào)/ /過(guò)程名對(duì)應(yīng)的段過(guò)程名對(duì)應(yīng)的段 IP=ENDIP=END指令中標(biāo)號(hào)指令中標(biāo)號(hào)/ /過(guò)程名在段內(nèi)的偏移地址過(guò)程名在段內(nèi)的偏移地址32 b.DS b.DS、ESES的指定的指定 對(duì)對(duì)DSDS、ESES的的指定無(wú)效指定無(wú)效( (
34、文件加載后自動(dòng)指向程序前文件加載后自動(dòng)指向程序前綴綴) ),需要在程序中顯式賦值,需要在程序中顯式賦值( (指定指定) )。 程序前綴程序前綴(PSP)(PSP)用戶程序與命令行間的接口,占用戶程序與命令行間的接口,占256256字節(jié)字節(jié)程序前綴區(qū)程序前綴區(qū)程序區(qū)程序區(qū)EXEEXE文件加載后結(jié)構(gòu)文件加載后結(jié)構(gòu)CSCSIP=?IP=?DSDS、ESESSSSSSP=?SP=? 思考:思考:文件加載時(shí),如何得到文件加載時(shí),如何得到CSCS、SSSS值?值?文件頭文件頭裝入模塊裝入模塊EXEEXE文件結(jié)構(gòu)文件結(jié)構(gòu)格式化區(qū)格式化區(qū)重定位表重定位表程序程序代碼代碼重定位表重定位表代碼長(zhǎng)度,代碼長(zhǎng)度, 各
35、段各段 偏移地址、長(zhǎng)度等偏移地址、長(zhǎng)度等100H100H8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令33對(duì)對(duì)DSDS、ESES賦值賦值( (指定指定) )示例:示例: D_SEG SEGMENT D_SEG SEGMENT ;數(shù)據(jù)段;數(shù)據(jù)段 X DW ?, 4000H, 100 DUP(?)X DW ?, 4000H, 100 DUP(?) D_SEG ENDS D_SEG ENDS E_SEG SEGMENT E_SEG SEGMENT ;附加段;附加段 STRING DB EXAMPLESTRING DB EXAMPLE E_SEG ENDS E_SEG ENDS C_SEG SEG
36、MENT PARA CODE C_SEG SEGMENT PARA CODE ASSUME CS:C_SEG,DS:D_SEG,ES:E_SEG ASSUME CS:C_SEG,DS:D_SEG,ES:E_SEG START: START: MOV AX, D_SEG MOV AX, D_SEG MOV DS, AX MOV DS, AX ;數(shù)據(jù)段基址;數(shù)據(jù)段基址DSDS MOV AX, E_SEG MOV AX, E_SEG MOV ES, AX MOV ES, AX ;附加段基址;附加段基址ESES8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令34c.SSc.SS的指定的指定自動(dòng)指定自
37、動(dòng)指定當(dāng)有組合類型為當(dāng)有組合類型為STACKSTACK的段時(shí),的段時(shí),SSSS自動(dòng)指向該段;自動(dòng)指向該段; 此時(shí)用此時(shí)用ASSUMEASSUME指定指定SSSS時(shí),時(shí),SP=SP=段長(zhǎng);否則段長(zhǎng);否則SP=0000HSP=0000H自動(dòng)指定示例:自動(dòng)指定示例: S_SEG SEGMENT PARA STACK DW 100 DUP(?) S_SEG ENDS思考:思考:若有多個(gè)若有多個(gè)STACK屬性的堆棧段,結(jié)果如何?屬性的堆棧段,結(jié)果如何?缺省指定缺省指定當(dāng)無(wú)組合類型為當(dāng)無(wú)組合類型為STACK的段時(shí),無(wú)論是否用的段時(shí),無(wú)論是否用ASSUME設(shè)定,設(shè)定,SS自動(dòng)指向程序區(qū)開(kāi)始自動(dòng)指向程序區(qū)開(kāi)始
38、(SP=0000H);思考:思考:若未定義堆棧時(shí),使用堆棧的結(jié)果?若未定義堆棧時(shí),使用堆棧的結(jié)果?8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令35 顯式指定顯式指定使用使用MOV指令,使指令,使SS及及SP指向目的處。指向目的處。用指令賦值示例:用指令賦值示例: S_SEG SEGMENTS_SEG SEGMENT DW 100 DUP(?) DW 100 DUP(?) ST LABLE WORD ST LABLE WORD S_SEG ENDS S_SEG ENDS C_SEG SEGMENT PARA CODEC_SEG SEGMENT PARA CODE ASSUME CS:C_S
39、EG,SS:S_SEG,DS:NOTHING,ES:NOTHING ASSUME CS:C_SEG,SS:S_SEG,DS:NOTHING,ES:NOTHING START: START: MOV AX, S_SEG MOV AX, S_SEG ;填入段基址;填入段基址 MOV SS, AXMOV SS, AX LEA SP, ST LEA SP, ST ;填入棧頂指針;填入棧頂指針 C_SEG ENDSC_SEG ENDS END START END START思考:思考:若有若有STACK屬性的堆棧段,又用指令賦值后結(jié)果如何?屬性的堆棧段,又用指令賦值后結(jié)果如何?8086/8088匯編語(yǔ)言
40、的偽指令匯編語(yǔ)言的偽指令364 4、程序開(kāi)始和結(jié)束偽指令、程序開(kāi)始和結(jié)束偽指令(1 1)模塊命名偽指令)模塊命名偽指令 格式格式1 1:NAME NAME 模塊名模塊名 操作操作1 1:給源程序進(jìn)行模塊命名給源程序進(jìn)行模塊命名 說(shuō)明說(shuō)明1 1:若模塊名缺省,則自動(dòng)用程序名代替。若模塊名缺省,則自動(dòng)用程序名代替。 格式格式2 2:TITLE TITLE 標(biāo)題名標(biāo)題名 操作操作2 2:給源程序設(shè)置標(biāo)題給源程序設(shè)置標(biāo)題( (模塊命名模塊命名) ) 說(shuō)明說(shuō)明2 2:模塊名為標(biāo)題名的前模塊名為標(biāo)題名的前6 6個(gè)字符。個(gè)字符。 示例:示例: NAME MM1NAME MM1 或或TITLE ABCDEFG
41、H TITLE ABCDEFGH ;模塊名為;模塊名為ABCDEFABCDEF8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令37(2 2)程序開(kāi)始和結(jié)束偽指令)程序開(kāi)始和結(jié)束偽指令 格式:格式:END END 地址標(biāo)號(hào)地址標(biāo)號(hào) 操作:操作:表明該模塊到此結(jié)束,和整個(gè)應(yīng)用程序從地址表明該模塊到此結(jié)束,和整個(gè)應(yīng)用程序從地址標(biāo)號(hào)處開(kāi)始執(zhí)行標(biāo)號(hào)處開(kāi)始執(zhí)行 說(shuō)明:說(shuō)明:應(yīng)用程序只能有一個(gè)主模塊應(yīng)用程序只能有一個(gè)主模塊( (地址標(biāo)號(hào)不缺省地址標(biāo)號(hào)不缺省) ); 匯編程序不處理源程序中匯編程序不處理源程序中ENDEND后的信息。后的信息。應(yīng)用程序與源程序文件:應(yīng)用程序與源程序文件: 應(yīng)用程序可有多個(gè)源程
42、序文件;應(yīng)用程序可有多個(gè)源程序文件; 每個(gè)源程序文件只能為一個(gè)模塊每個(gè)源程序文件只能為一個(gè)模塊(在在NAME/TITLEEND間間); 所有模塊中只能有一個(gè)主模塊所有模塊中只能有一個(gè)主模塊(END后地址標(biāo)號(hào)不缺省后地址標(biāo)號(hào)不缺省); 每個(gè)模塊中可有多個(gè)段;每個(gè)模塊中可有多個(gè)段; 每個(gè)段的類型通過(guò)與段寄存器對(duì)應(yīng)或段組合類型定性。每個(gè)段的類型通過(guò)與段寄存器對(duì)應(yīng)或段組合類型定性。8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令385 5、表達(dá)式賦值偽指令、表達(dá)式賦值偽指令 格式:格式:名字名字 EQU EQU 表達(dá)式表達(dá)式 名字名字 = = 表達(dá)式表達(dá)式 操作:操作:為表達(dá)式取一個(gè)名字,供以后引用
43、為表達(dá)式取一個(gè)名字,供以后引用 說(shuō)明:說(shuō)明: 表達(dá)式可為常數(shù)、變量表達(dá)式可為常數(shù)、變量/ /標(biāo)號(hào)、指令助記符、字符串標(biāo)號(hào)、指令助記符、字符串 同一源程序中,用同一源程序中,用EQUEQU賦值的符號(hào)賦值的符號(hào)不能不能再次賦值,而用再次賦值,而用= =賦值的符號(hào)名可重復(fù)賦值。賦值的符號(hào)名可重復(fù)賦值。 賦值語(yǔ)句賦值語(yǔ)句不產(chǎn)生目標(biāo)代碼,也不占有存儲(chǔ)單元不產(chǎn)生目標(biāo)代碼,也不占有存儲(chǔ)單元( (匯編程序匯編程序掃描時(shí),用表達(dá)式替代符號(hào)掃描時(shí),用表達(dá)式替代符號(hào)) ),目的是方便更新和提高可讀性。,目的是方便更新和提高可讀性。 示例:示例: CONST CONST 100 100* *2 2 ;定義符號(hào)常數(shù);定
44、義符號(hào)常數(shù) ADDRS ADDRS BX+10 BX+10 ;為地址表達(dá)式定義名字;為地址表達(dá)式定義名字8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令396 6、地址計(jì)數(shù)器和對(duì)準(zhǔn)偽指令、地址計(jì)數(shù)器和對(duì)準(zhǔn)偽指令(1 1)地址計(jì)數(shù)器)地址計(jì)數(shù)器$ $ 功能:功能:保存當(dāng)前正在匯編的指令保存當(dāng)前正在匯編的指令( (或數(shù)據(jù)或數(shù)據(jù)) )的地址的地址 說(shuō)明:說(shuō)明:$ $為有效地址為有效地址EA(16EA(16位位) ); 可參加構(gòu)成表達(dá)式??蓞⒓訕?gòu)成表達(dá)式。 示例示例1 1:ARRAY DW 1,2,$+4,3,$+5ARRAY DW 1,2,$+4,3,$+5 示例示例2 2:BUFFER DB 1
45、,2,3,4,5BUFFER DB 1,2,3,4,5 COUNT EQU $-BUFFERCOUNT EQU $-BUFFER ;COUNTCOUNT的值為的值為BUFFERBUFFER的長(zhǎng)度的長(zhǎng)度 01010000020200007C7C00000303000081810000ARRAYARRAY0074H0074H0078H0078H007CH007CH8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令40(2 2)定位偽指令)定位偽指令 格式:格式:ORG ORG 表達(dá)式表達(dá)式 操作:操作:將表達(dá)式的值送入?yún)R編地址計(jì)數(shù)器將表達(dá)式的值送入?yún)R編地址計(jì)數(shù)器( (即命令匯即命令匯編程序從表達(dá)式
46、值位置生成目標(biāo)代碼編程序從表達(dá)式值位置生成目標(biāo)代碼) ) 說(shuō)明:說(shuō)明:若需相對(duì)若需相對(duì)$ $移動(dòng),則表達(dá)式移動(dòng),則表達(dá)式=$+=$+偏移量。偏移量。 示例:示例: D_SEG SEGMENT PARA DATAD_SEG SEGMENT PARA DATA ORG 10HORG 10H X DB 20H, 30H X DB 20H, 30H ORG $+5 ORG $+5 Y DB 40H, 50H Y DB 40H, 50H D_SEG ENDS D_SEG ENDS202030304040505010H10H17H17H00H00H8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令417
47、7、過(guò)程定義偽指令、過(guò)程定義偽指令 格式:格式:過(guò)程名過(guò)程名 PROC PROC 類型類型 ;過(guò)程體語(yǔ)句;過(guò)程體語(yǔ)句 RETRET 過(guò)程名過(guò)程名 ENDPENDP 操作:操作:定義過(guò)程,供調(diào)用定義過(guò)程,供調(diào)用 說(shuō)明:說(shuō)明: 可用可用CALLCALL或或ENDEND啟動(dòng)過(guò)程,用啟動(dòng)過(guò)程,用過(guò)程體中過(guò)程體中RETRET結(jié)束過(guò)程調(diào)用;結(jié)束過(guò)程調(diào)用; 類型有類型有NEARNEAR和和FARFAR兩種兩種( (缺省時(shí)為缺省時(shí)為NEARNEAR) ),分別表示可以進(jìn),分別表示可以進(jìn)行段內(nèi)和段間調(diào)用。行段內(nèi)和段間調(diào)用。8086/8088匯編語(yǔ)言的偽指令匯編語(yǔ)言的偽指令42順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)v結(jié)
48、構(gòu)化程序結(jié)構(gòu):結(jié)構(gòu)化程序結(jié)構(gòu): 順序結(jié)構(gòu)順序結(jié)構(gòu) 順序結(jié)構(gòu)是一種最簡(jiǎn)單、最基本的程序結(jié)構(gòu)。順序程序只由算術(shù)運(yùn)算和邏輯運(yùn)算指令構(gòu)成,程序是按指令順序逐條執(zhí)行的。 分支分支(多路分支多路分支)結(jié)構(gòu)結(jié)構(gòu) 先判斷條件,根據(jù)判斷結(jié)果轉(zhuǎn)向不同的分支。要用到條件測(cè)試和轉(zhuǎn)移指令。 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 能按一定規(guī)律,多次重復(fù)執(zhí)行的一串語(yǔ)句,這類程序叫循環(huán)程序43v流程圖符號(hào)表示流程圖符號(hào)表示 (1)起止框:表示程序的開(kāi)始和結(jié)束。 (2)判斷框 (3)處理框 (4)調(diào)用框 (5)指向線/流向線 (6)連接框起止框起止框順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)44【例1】求兩個(gè)字節(jié)數(shù)AA與BB之和,并將結(jié)果顯示出來(lái)。分析:兩
49、個(gè)字節(jié)數(shù)相加。該程序可采用順序程序,配合調(diào)用屏幕顯示的DOS功能即可。但顯示結(jié)果先要轉(zhuǎn)換成ASCII碼。順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)45DATA SEGMENTAA DB 20HBB DB 10HDATA ENDSSTA SEGMENT STACKDB 100 DUP(?)STA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STASTART: MOV AX,DATA ;將數(shù)據(jù)段地址送數(shù)據(jù)段寄存器 MOV DS,AX源程序:源程序:順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)46 MOV AL,AA ;求AA+BB ADD AL,BB MOV BL,AL ;保存
50、AL的計(jì)算結(jié)果 MOV CL,4 SHR AL,CL AND AL,0FH ;屏蔽高4位 ADD AL,30H ;計(jì)算高位數(shù)的ASCII值 MOV DL,AL ;DOS功能調(diào)用,顯示高位數(shù) MOV AH,02H INT 21H順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)47 MOV AL,BL ;計(jì)算結(jié)果送AL AND AL,0FH ;屏蔽高4位 ADD AL,30H ;計(jì)算低位數(shù)的ASCII值 MOV DL,AL ;顯示低位數(shù) MOV AH,02H INT 21H MOV AH,4CH ;返回DOS INT 21HCODE ENDS END START順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)48順序結(jié)構(gòu)程序設(shè)計(jì)
51、順序結(jié)構(gòu)程序設(shè)計(jì)【例2 】?jī)?nèi)存中自 TABLE 開(kāi)始的 10 個(gè)單元連續(xù)存放著 0 到 9 的平方值(稱為平方表)。從鍵盤(pán)輸入一位十進(jìn)制數(shù)X(0X9),查表求 X 的平方值,并把結(jié)果存入 Y 單元。49DATA SEGMENTTABLE DB 0,1,4,9,16,25,36,49,64,81 ;定義平方表Y DB ?DATA ENDSSTACK SEGMENT PARA STACK STACK DB 100 DUP (?) ;定義100個(gè)字節(jié)空間STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX
52、;置數(shù)據(jù)段寄存器順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)源程序:源程序:50MOV BX,OFFSET TABLEMOV AH,1INT 21H ;DOS功能調(diào)用的1號(hào)子功能是鍵盤(pán)輸入SUB AL,30H ;返回值為ASCII碼,存于AL中MOV AH,0ADD BX,AX ;查表MOV AL,BXMOV Y,AL ;平方數(shù)存Y單元MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)51順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)【例3 】?jī)?nèi)存中自 TABLE 開(kāi)始的 10 個(gè)單元連續(xù)存放著 0 到 9 的平方值(稱為平方表)。從鍵盤(pán)輸入一位十進(jìn)制數(shù)
53、X(0X9),查表求 X 的平方值,并把結(jié)果存入 Y 單元。(要求使用直接查表指令完成)52DATA SEGMENTTABLE DB 0,1,4,9,16,25,36,49,64,81 ;定義平方表Y DB ?DATA ENDS STACK SEGMENT PARA STACK STACK DB 100 DUP (?) ;定義100個(gè)字節(jié)空間STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;置數(shù)據(jù)段寄存器順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)源程序:源程序:53 MOV BX,OFFSET TABL
54、E MOV AH, 1 INT 21H ;DOS功能調(diào)用的1號(hào)子功能是鍵盤(pán)輸入 SUB AL, 30H ;返回值為ASCII碼,存于AL中 XLAT ;AL(BX)+(AL) MOV Y,AL ;平方數(shù)存Y單元 MOV AH,4CH ;返回DOS INT 21HCODE ENDSEND START順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)54分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)條件條件語(yǔ)句串語(yǔ)句串F FT T多路條件多路條件語(yǔ)句串語(yǔ)句串1 1語(yǔ)句串語(yǔ)句串n n條件條件F FT T語(yǔ)句串語(yǔ)句串1 1語(yǔ)句串語(yǔ)句串2 255 【例1】編程實(shí)現(xiàn)比較三個(gè)有符號(hào)雙字節(jié)數(shù)的大小,并將其中最大的數(shù)送入MAX單元。分析:該程
55、序要對(duì)內(nèi)存中的三個(gè)數(shù)進(jìn)行比較,并將其中最大的數(shù)送入MAX單元中。為此,采用分支結(jié)構(gòu)程序。流程圖為:分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)56分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)57源程序源程序:DATA SEGMENTaa DW 100Hbb DW -5cc DW 20MAX DW ?DATA ENDSSTA SEGMENT STACK DB 100 DUP (?)STA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)58START: MOV AX,DATA ;送數(shù)據(jù)段地址到數(shù)據(jù)段寄存器 MOV DS,AX MOV AX,aa
56、 CMP AX,bb ;比較a、b大小 JG L1 ;ab轉(zhuǎn)L1 MOV AX,bb CMP AX,cc ;比較b、c大小 JG L2 ;bc轉(zhuǎn)L2L: MOV AX,cc ;b=c,c送AX JMP L2 ;無(wú)條件轉(zhuǎn)移到L2L1: CMP AX,cc ;比較a、c大小 JNG L ;a0 0 當(dāng)X=0 -1 當(dāng)X0 【例2】求Y分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)61DATA SEGMENTXX DB -11 ;存放XYY DB ? ;存放YDATA ENDSSTACK SEGMENT PARA STACK STACK DB 100 DUP (0)STACK ENDSCODE SEGMENTAS
57、SUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;設(shè)置DS源程序源程序:分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)62 MOV AL,XX CMP AL,0 JGE BIGER ;X0 帶符號(hào)數(shù)比較指令 MOV AL,-1 ;X0,-1送入YY單元 JMP EQUL BIGER: JE EQUL ;ZF=1轉(zhuǎn)移 MOV AL,1 ;X 0,1送入YY單元EQUL: MOV YY,AL ;X=0, 0送入YY單元 MOV AH,4CH INT 21HCODE ENDSEND START分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)63 【例3】設(shè)字節(jié)單元N1、N2中存放
58、無(wú)符號(hào)數(shù) (1)若兩個(gè)均是偶數(shù),則分別加1后送D1 、D2中 (2)若兩個(gè)均是奇數(shù),則直接送D1 、D2中 (3)若一奇一偶,則把奇數(shù)送D1,偶數(shù)送D2中流程圖如下:分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)64AL(N1),AH(N2)AL(N1),AH(N2)(AL)(AL)0 000F FT T(AH)(AH)0 000AL(AL)+1,AH(AH)+1AL(AL)+1,AH(AH)+1AL (AH)AL (AH)D1(AL),D2(AH)D1(AL),D2(AH)T TF F分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)65 MOV AL,N1 MOV AH,N2 TEST AL,01H JNE ENDO ;
59、N1奇數(shù)轉(zhuǎn) TEST AH,01H JNE L1 ;N2奇數(shù)轉(zhuǎn) INC AL ;兩偶數(shù) INC AH JMP ENDOL1: XCHG AL,AH ;交換ENDO: MOV D1, AL ;存放結(jié)果 MOV D2, AH分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)源程序源程序:66 跳轉(zhuǎn)表法實(shí)現(xiàn)多路分支原理:跳轉(zhuǎn)表法實(shí)現(xiàn)多路分支原理: 跳轉(zhuǎn)表跳轉(zhuǎn)表是在某內(nèi)存區(qū)域順序排列的一組有規(guī)律的是在某內(nèi)存區(qū)域順序排列的一組有規(guī)律的語(yǔ)句串的入口地址。語(yǔ)句串的入口地址。 如是段內(nèi)分支,每個(gè)地址占兩個(gè)單元如是段內(nèi)分支,每個(gè)地址占兩個(gè)單元(IP(IP的值的值) ) 如是段間分支,每個(gè)地址占如是段間分支,每個(gè)地址占4 4個(gè)單元
60、個(gè)單元(CS:IP(CS:IP的值的值) )TABLETABLESUB3SUB3IPIPIPIPIPIPSUB2SUB2SUB1SUB1TABLETABLEIPIPCSCSIPIPCSCSSUB2SUB2SUB1SUB1段內(nèi)分支段內(nèi)分支段間分支段間分支分支結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)67功能:解決需要重復(fù)操作的問(wèn)題,如統(tǒng)計(jì)數(shù)據(jù)個(gè)數(shù)、多個(gè)字符傳送等。循環(huán)程序結(jié)構(gòu):(1)置循環(huán)初值部分。對(duì)循環(huán)工作部分涉及的寄存器或存儲(chǔ)單元設(shè)初值;使地址指針指向一個(gè)數(shù)據(jù)區(qū)的起始位置;設(shè)置循環(huán)次數(shù)或置循環(huán)結(jié)束條件等。(2)循環(huán)體部分也稱循環(huán)工作部分,是循環(huán)程序需重復(fù)執(zhí)行的部分,是循環(huán)程序的主體。(3)循環(huán)控制部分修改
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電池制造與個(gè)人便攜式電源考核試卷
- 外貿(mào)英語(yǔ)函電包裝課件
- 探秘?cái)?shù)學(xué)世界
- 四年級(jí)學(xué)習(xí)法探究
- 山西應(yīng)用科技學(xué)院《公共財(cái)政學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省南京鼓樓區(qū)重點(diǎn)達(dá)標(biāo)名校2024-2025學(xué)年初三下學(xué)期統(tǒng)練(七)語(yǔ)文試題含解析
- 天津市重點(diǎn)中學(xué)2025年高三核心模擬卷(下)歷史試題含解析
- 上饒師范學(xué)院《中藥鑒定學(xué)實(shí)驗(yàn)二》2023-2024學(xué)年第一學(xué)期期末試卷
- 四川財(cái)經(jīng)職業(yè)學(xué)院《籌資原理和技巧》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省滕州第七中學(xué)2025屆高三統(tǒng)一質(zhì)量檢測(cè)試題歷史試題試卷含解析
- 評(píng)職稱業(yè)績(jī)合同協(xié)議書(shū)
- 廣東省佛山2022-2023學(xué)年外研版八年級(jí)下學(xué)期英語(yǔ)期末模擬試卷(二)
- 四年級(jí)《爺爺?shù)臓敔攺哪睦飦?lái)》閱讀測(cè)評(píng)題
- 2020-2024年安徽省初中學(xué)業(yè)水平考試中考英語(yǔ)試卷(5年真題+答案解析)
- 2024年福建省泉州市中考二模地理試題
- 2024年重慶八中中考數(shù)學(xué)一模試卷
- MOOC 中國(guó)特色文化英語(yǔ)教學(xué)-蘇州大學(xué) 中國(guó)大學(xué)慕課答案
- 職業(yè)道德與法律說(shuō)課稿市公開(kāi)課一等獎(jiǎng)省賽課微課金獎(jiǎng)?wù)n件
- 《電力建設(shè)施工技術(shù)規(guī)范 第2部分:鍋爐機(jī)組》DLT 5190.2
- 新人教版八年級(jí)上冊(cè)數(shù)學(xué)期中考試試卷及答案-文檔
- 廣東省廣州市天河區(qū)2024年八年級(jí)下冊(cè)數(shù)學(xué)期末考試試題含解析
評(píng)論
0/150
提交評(píng)論