版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第4章章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 本章要點(diǎn):本章要點(diǎn):p 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)p 源程序的匯編、連接與調(diào)試源程序的匯編、連接與調(diào)試p 分支程序設(shè)計(jì)技術(shù)分支程序設(shè)計(jì)技術(shù)p 循環(huán)程序設(shè)計(jì)技術(shù)循環(huán)程序設(shè)計(jì)技術(shù)p 子程序設(shè)計(jì)技術(shù)子程序設(shè)計(jì)技術(shù)p 綜合程序設(shè)計(jì)示例綜合程序設(shè)計(jì)示例本教案內(nèi)容本教案內(nèi)容第第4 4章章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)1.匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)2.源程序的匯編、連接與調(diào)試源程序的匯編、連接與調(diào)試3.分支程序設(shè)計(jì)技術(shù)分支程序設(shè)計(jì)技術(shù)4.循環(huán)程序設(shè)計(jì)技術(shù)循環(huán)程序設(shè)計(jì)技術(shù)5.子程序設(shè)計(jì)技術(shù)子程序設(shè)計(jì)技術(shù)6.綜合程序設(shè)計(jì)示例綜合程序設(shè)
2、計(jì)示例匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)算法算法 所謂算法,簡單地說就是計(jì)算機(jī)能所謂算法,簡單地說就是計(jì)算機(jī)能夠?qū)崿F(xiàn)的有限的解題步驟。我們知道,夠?qū)崿F(xiàn)的有限的解題步驟。我們知道,計(jì)算機(jī)只能進(jìn)行最基本的算術(shù)運(yùn)算和邏計(jì)算機(jī)只能進(jìn)行最基本的算術(shù)運(yùn)算和邏輯運(yùn)算,要完成較為復(fù)雜的運(yùn)算和控制輯運(yùn)算,要完成較為復(fù)雜的運(yùn)算和控制操作,必須選擇合適的算法,這是正確操作,必須選擇合適的算法,這是正確編程的基礎(chǔ)。編程的基礎(chǔ)。 若題目涉及到某種運(yùn)算,則必須寫若題目涉及到某種運(yùn)算,則必須寫出適合程序設(shè)計(jì)的正確算法,若題目要出適合程序設(shè)計(jì)的正確算法,若題目要完成的功能未涉及到運(yùn)算,也要寫出編完成的功能未涉及到運(yùn)算,也要寫出
3、編程思想。程思想。匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)設(shè)計(jì)流程設(shè)計(jì)流程 將提出的算法或編程思想用將提出的算法或編程思想用流程圖的方式畫出來。圖流程圖的方式畫出來。圖4.14.1給給出了流程圖中較為通用的幾種符出了流程圖中較為通用的幾種符號(hào)。號(hào)。匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)起始和終止框起始和終止框執(zhí)行框執(zhí)行框判斷框判斷框連接框連接框匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)圖圖4.1 4.1 流程圖符號(hào)流程圖符號(hào)根據(jù)流程圖編寫程序根據(jù)流程圖編寫程序 編寫程序是采用程序設(shè)計(jì)語言編寫程序是采用程序設(shè)計(jì)語言來實(shí)現(xiàn)上面已確定的算法,此過程來實(shí)現(xiàn)上面已確定的算法,此過程有些書上稱為編碼。本書所介紹的有些書上稱為編碼
4、。本書所介紹的是采用匯編語言編寫程序。采用匯是采用匯編語言編寫程序。采用匯編語言編寫程序應(yīng)注意以下幾個(gè)問編語言編寫程序應(yīng)注意以下幾個(gè)問題:題:匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)(1 1)必須詳細(xì)了解必須詳細(xì)了解cpucpu的編程模型、指令系統(tǒng)、的編程模型、指令系統(tǒng)、尋址方式及相關(guān)偽指令;尋址方式及相關(guān)偽指令;(2 2)必須進(jìn)行存儲(chǔ)空間和工作單元的合理分配;)必須進(jìn)行存儲(chǔ)空間和工作單元的合理分配;(3 3)多次使用的程序段可采用子程序或宏指令;)多次使用的程序段可采用子程序或宏指令;(4 4)盡可能用標(biāo)號(hào)或變量來代替絕對地址和常數(shù);)盡可能用標(biāo)號(hào)或變量來代替絕對地址和常數(shù);匯編語言程序設(shè)計(jì)匯編語言
5、程序設(shè)計(jì)程序的檢驗(yàn)程序的檢驗(yàn) 程序編寫好以后,必須經(jīng)過書程序編寫好以后,必須經(jīng)過書面檢查和上機(jī)調(diào)試,以便說明程序面檢查和上機(jī)調(diào)試,以便說明程序是否正確。檢驗(yàn)時(shí),應(yīng)預(yù)先選擇典是否正確。檢驗(yàn)時(shí),應(yīng)預(yù)先選擇典型數(shù)據(jù),檢查是否可以得到預(yù)期結(jié)型數(shù)據(jù),檢查是否可以得到預(yù)期結(jié)果。果。匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)編寫說明文件編寫說明文件 一個(gè)完整的軟件應(yīng)有相應(yīng)的說明文一個(gè)完整的軟件應(yīng)有相應(yīng)的說明文件,這不僅便于用戶使用,也便于對程件,這不僅便于用戶使用,也便于對程序的維護(hù)和擴(kuò)充。說明文件主要應(yīng)包括序的維護(hù)和擴(kuò)充。說明文件主要應(yīng)包括程序的功能和使用方法,程序的基本結(jié)程序的功能和使用方法,程序的基本結(jié)構(gòu)和所采
6、用的主要算法以及程序必要說構(gòu)和所采用的主要算法以及程序必要說明和注意事項(xiàng)等。明和注意事項(xiàng)等。匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 我們知道,我們知道,8086/8088 cpu8086/8088 cpu的地址空間是分段的地址空間是分段結(jié)構(gòu)的,程序中出現(xiàn)的數(shù)據(jù)與代碼以及程序中用到結(jié)構(gòu)的,程序中出現(xiàn)的數(shù)據(jù)與代碼以及程序中用到的堆棧都必須納入某個(gè)段中。那么,如何告訴匯編的堆棧都必須納入某個(gè)段中。那么,如何告訴匯編程序,源程序中的哪些內(nèi)容屬于數(shù)據(jù)段,哪些屬于程序,源程序中的哪些內(nèi)容屬于數(shù)據(jù)段,哪些屬于代碼段呢?這自然是由匯編系統(tǒng)中提供的偽指令來代碼段呢?這自然是由匯編系統(tǒng)中提供的偽指令來實(shí)現(xiàn)的。下面我們首
7、先介紹構(gòu)成完整程序的有關(guān)偽實(shí)現(xiàn)的。下面我們首先介紹構(gòu)成完整程序的有關(guān)偽指令。指令。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言源程序的完整結(jié)構(gòu)匯編語言源程序的完整結(jié)構(gòu) stack segment stack stack segment stack db 256 dup(?) db 256 dup(?) top label word top label word stack ends stack ends data1 segment data1 segment data1 ends data1 ends用用dbdb、dwdw等偽指令定義的段的實(shí)體等偽指令定義的段的實(shí)體匯編語言程序設(shè)計(jì)基礎(chǔ)匯編
8、語言程序設(shè)計(jì)基礎(chǔ) data2 segment data2 segment data2 ends data2 ends code segment code segment assume cs:code , ds:data1 assume cs:code , ds:data1 assume es:data2 , ss:stack assume es:data2 , ss:stack start: mov ax , data1 start: mov ax , data1 mov ds , ax mov ds , ax ;dsds初始化初始化 mov ax , data2mov ax , data2
9、mov es , ax mov es , ax ;eses初始化初始化用用dbdb、dwdw等偽指令定義的段的實(shí)體等偽指令定義的段的實(shí)體匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) mov ax , stack mov ax , stack mov ss , ax mov ss , ax ;ssss初始化初始化 mov sp , offset topmov sp , offset top mov ah,4ch mov ah,4ch int 21h int 21h ;程序結(jié)束,返回;程序結(jié)束,返回dosdos操作系統(tǒng)操作系統(tǒng) code ends code ends ;代碼段定義結(jié)束;代碼段定義結(jié)束
10、end start end start ;整個(gè)程序結(jié)束;整個(gè)程序結(jié)束. .用指令語句編寫的完成某一功能的用指令語句編寫的完成某一功能的程序體。程序體。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)1.1.段定義偽指令段定義偽指令格式:格式:段名段名 segment segment 定位類型定位類型組合類型組合類型類型類型 ; ;段定義開始偽指令段定義開始偽指令 指令語句或偽指令語句組成的段的實(shí)體指令語句或偽指令語句組成的段的實(shí)體段名段名 ends ;ends ;段定義結(jié)束偽指令段定義結(jié)束偽指令匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)段名:段名: 段名是所定義的段的名稱,其構(gòu)段名是所定義的段的名稱,其
11、構(gòu) 成規(guī)則與語句的名稱一樣。成規(guī)則與語句的名稱一樣。段名一但定義,就具備了以下段名一但定義,就具備了以下5 5個(gè)屬性。個(gè)屬性。段地址段地址段內(nèi)偏移地址段內(nèi)偏移地址定位類型定位類型組合類型組合類型類別類別匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 其中,格式中的定位類型、其中,格式中的定位類型、組合類型和類別外面的方括號(hào)不組合類型和類別外面的方括號(hào)不是語法符號(hào),它表示該項(xiàng)是可以是語法符號(hào),它表示該項(xiàng)是可以省略的。省略的。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)在段定義時(shí),在段定義時(shí),segmentsegment與與endsends必必須成對出現(xiàn)。須成對出現(xiàn)。segmentsegment與與ends
12、ends左邊的段名必左邊的段名必須一致。須一致。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)定位類型:定位類型: 告訴匯編程序(告訴匯編程序(masm.exemasm.exe)對)對該段匯編時(shí),該段的起始邊界的要該段匯編時(shí),該段的起始邊界的要求。其類型有求。其類型有pagepage、parapara、wordword、bytebyte四種。這四種類型的邊界地址四種。這四種類型的邊界地址的要求如下:的要求如下:匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)page=xxxx xxxx xxxx 0000 0000page=xxxx xxxx xxxx 0000 0000para=xxxx xxxx xxx
13、x xxxx 0000 para=xxxx xxxx xxxx xxxx 0000 ( (缺省型缺省型) )word=xxxx xxxx xxxx xxxx xxx0word=xxxx xxxx xxxx xxxx xxx0byte=xxxx xxxx xxxx xxxx xxxxbyte=xxxx xxxx xxxx xxxx xxxx 即它們的邊界地址(即它們的邊界地址(2020位地址)應(yīng)分位地址)應(yīng)分別可以被別可以被256256、1616、2 2、1 1除盡,分別稱為以除盡,分別稱為以頁、節(jié)、字、字節(jié)為邊界。頁、節(jié)、字、字節(jié)為邊界。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 在實(shí)際應(yīng)用中,
14、每個(gè)段的定位類型在實(shí)際應(yīng)用中,每個(gè)段的定位類型常選常選parapara(節(jié))型。(節(jié))型。因?yàn)槿暨x因?yàn)槿暨xpagepage(頁)(頁)型,將會(huì)使相鄰的段間有較大空間的浪型,將會(huì)使相鄰的段間有較大空間的浪費(fèi);而選費(fèi);而選wordword或或bytebyte型,又很難做到使型,又很難做到使一個(gè)段的偏移地址從一個(gè)段的偏移地址從0000h0000h開始。開始。 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)組合類型:組合類型: 告訴連接程序(告訴連接程序(link.exelink.exe)在進(jìn)行多模)在進(jìn)行多模塊目標(biāo)程序連接時(shí),該段與其它段連接的有塊目標(biāo)程序連接時(shí),該段與其它段連接的有關(guān)信息,如本段與其它段
15、是否組合為同一段;關(guān)信息,如本段與其它段是否組合為同一段;組合后,本段信息與其他段信息的關(guān)系如何組合后,本段信息與其他段信息的關(guān)系如何等。組合類型有以下等。組合類型有以下6 6種不同的類型:種不同的類型: 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)nonenone型:型:表示本段與不同模塊中的其它段表示本段與不同模塊中的其它段在邏輯上不發(fā)生關(guān)系。連接后各模塊中的在邏輯上不發(fā)生關(guān)系。連接后各模塊中的各段都有自己的段地址(也稱基地址)。各段都有自己的段地址(也稱基地址)。stackstack型:型:組合后的這個(gè)段用作堆棧。當(dāng)組合后的這個(gè)段用作堆棧。當(dāng)段定義中指明了段定義中指明了stackstack類
16、型后,說明堆棧類型后,說明堆棧段已經(jīng)確定,所以,在可執(zhí)行文件裝入內(nèi)段已經(jīng)確定,所以,在可執(zhí)行文件裝入內(nèi)存后段寄存器存后段寄存器ssss中已是該段的段地址,堆中已是該段的段地址,堆棧指針棧指針spsp已指向堆棧底。已指向堆棧底。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)publicpublic型型 commoncommon型型 atat表達(dá)式型表達(dá)式型 memorymemory型型匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)類別:類別: 類別可以使任何一個(gè)合法的名稱,類別可以使任何一個(gè)合法的名稱,但必須用單引號(hào)括起來。在多模塊程序但必須用單引號(hào)括起來。在多模塊程序設(shè)計(jì)中,連接時(shí),將把不同模塊中相同設(shè)計(jì)
17、中,連接時(shí),將把不同模塊中相同類別類別的各段在物理上相鄰地連接在的各段在物理上相鄰地連接在一起,其順序亦與一起,其順序亦與linklink時(shí)提供的各模塊時(shí)提供的各模塊順序一致。當(dāng)類別相同的各段的段名不順序一致。當(dāng)類別相同的各段的段名不同時(shí),它們連接后雖在同一物理段內(nèi),同時(shí),它們連接后雖在同一物理段內(nèi),但但匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)它們?nèi)圆粚儆谕欢?,也就是它們的段基址它們?nèi)圆粚儆谕欢?,也就是它們的段基址不相同。這樣做的一個(gè)好處是便于程序的固不相同。這樣做的一個(gè)好處是便于程序的固化。在編程時(shí),它們都是獨(dú)立的代碼段,各化。在編程時(shí),它們都是獨(dú)立的代碼段,各段有各自的段基址,但連接后
18、,他們卻在同段有各自的段基址,但連接后,他們卻在同一物理段,從而可以固化在一起。一物理段,從而可以固化在一起。 在單模塊程序設(shè)計(jì)中,類別可有可無。若在單模塊程序設(shè)計(jì)中,類別可有可無。若有,它只是告知程序閱讀者本段信息的含義。有,它只是告知程序閱讀者本段信息的含義。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)2.2.匯編語言源程序的完整結(jié)構(gòu)匯編語言源程序的完整結(jié)構(gòu) stack segment stack stack segment stack db 256 dup(?) db 256 dup(?) top label word top label word stack ends stack ends
19、 data1 segment data1 segment data1 ends data1 ends用用dbdb、dwdw等偽指令定義的段的實(shí)體等偽指令定義的段的實(shí)體匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) data2 segment data2 segment data2 ends data2 ends code segment code segment assume cs:code , ds:data1 assume cs:code , ds:data1 assume es:data2 , ss:stack assume es:data2 , ss:stack start: mov ax
20、, data1 start: mov ax , data1 mov ds , ax mov ds , ax ;dsds初始化初始化 mov ax , data2mov ax , data2 mov es , ax mov es , ax ;eses初始化初始化用用dbdb、dwdw等偽指令定義的段的實(shí)體等偽指令定義的段的實(shí)體匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) mov ax , stack mov ax , stack mov ss , ax mov ss , ax ;ssss初始化初始化 mov sp , offset topmov sp , offset top mov ah,4ch
21、mov ah,4ch int 21h int 21h ;程序結(jié)束,返回;程序結(jié)束,返回dosdos操作系統(tǒng)操作系統(tǒng) code ends code ends ;代碼段定義結(jié)束;代碼段定義結(jié)束 end start end start ;整個(gè)程序結(jié)束;整個(gè)程序結(jié)束. .用指令語句編寫的完成某一功能的用指令語句編寫的完成某一功能的程序體。程序體。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)3.3.labellabel偽指令偽指令 格式中的類型有格式中的類型有bytebyte、wordword、dworddword、結(jié)構(gòu)名、記錄名、結(jié)構(gòu)名、記錄名、nearnear、farfar共共7 7種種。前。前5 5種
22、屬種屬于變量的類型,后兩種是屬于標(biāo)號(hào)的類型。于變量的類型,后兩種是屬于標(biāo)號(hào)的類型。結(jié)構(gòu)和記錄是由偽指令定義的兩種數(shù)據(jù)類型結(jié)構(gòu)和記錄是由偽指令定義的兩種數(shù)據(jù)類型( (關(guān)于這兩種數(shù)據(jù)類型的定義在此就不在敘述,關(guān)于這兩種數(shù)據(jù)類型的定義在此就不在敘述,請參閱有關(guān)資料)。請參閱有關(guān)資料)。格式格式: : 名稱名稱 label label 類型類型匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 格式中的名稱就是語句的名稱,為一標(biāo)格式中的名稱就是語句的名稱,為一標(biāo)識(shí)符,若后面的類型是前識(shí)符,若后面的類型是前5 5種之一,那么該名種之一,那么該名稱就是變量名;當(dāng)類型為后兩種時(shí),該名稱稱就是變量名;當(dāng)類型為后兩種時(shí),
23、該名稱就是標(biāo)號(hào)。我們已經(jīng)知道,變量與標(biāo)號(hào)除具就是標(biāo)號(hào)。我們已經(jīng)知道,變量與標(biāo)號(hào)除具有類型屬性外,還具有段地址和偏移地址的有類型屬性外,還具有段地址和偏移地址的屬性,名稱的這兩個(gè)屬性就是匯編程序匯編屬性,名稱的這兩個(gè)屬性就是匯編程序匯編到該語句時(shí)語句所在的段地址和偏移地址。到該語句時(shí)語句所在的段地址和偏移地址。 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)如前面定義的堆棧段:如前面定義的堆棧段: stack segment stack stack segment stack db 256 dup(?) db 256 dup(?) top label word top label word stack
24、 ends stack ends 由于由于stackstack段內(nèi)的偏移地址開始為段內(nèi)的偏移地址開始為0000h0000h,段內(nèi)留出了段內(nèi)留出了256256個(gè)字節(jié)作為堆棧區(qū),因此匯編個(gè)字節(jié)作為堆棧區(qū),因此匯編到到toptop處時(shí),偏移地址為處時(shí),偏移地址為0100h0100h。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)匯編情況如下圖所示:匯編情況如下圖所示:256b256b堆棧區(qū)堆棧區(qū)ss:0000hss:0000htoptopss:00ffhss:00ffh0100h0100htoptop具有該單具有該單元的偏移地址元的偏移地址屬性,但不占屬性,但不占用該單元。用該單元。匯編語言程序設(shè)計(jì)基礎(chǔ)匯
25、編語言程序設(shè)計(jì)基礎(chǔ) 由于堆棧指針由于堆棧指針spsp初始化后要指向棧底初始化后要指向棧底+1+1單元,所以上述程序段中有:單元,所以上述程序段中有: mov ax , stack mov ax , stack mov ss , ax mov ss , ax mov sp , offset top mov sp , offset top此段程序完成對此段程序完成對ssss、spsp的初始化的初始化匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 又由于前面介紹組合類型時(shí),介紹了若又由于前面介紹組合類型時(shí),介紹了若某段定義時(shí),其組合類型選為某段定義時(shí),其組合類型選為stackstack型,系統(tǒng)型,系統(tǒng)默認(rèn)
26、該段為堆棧段。所以,在可執(zhí)行文件裝默認(rèn)該段為堆棧段。所以,在可執(zhí)行文件裝入內(nèi)存后,段寄存器入內(nèi)存后,段寄存器ssss中已是該段的段基址,中已是該段的段基址,堆棧指針堆棧指針spsp已指向堆棧底已指向堆棧底+1+1單元的偏移地址。單元的偏移地址。因此,在程序設(shè)計(jì)時(shí),程序段就不用給因此,在程序設(shè)計(jì)時(shí),程序段就不用給ssss、sp sp 初始化了。初始化了。 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) mov ax , stack mov ax , stack mov ss , ax mov ss , ax mov sp , offset top mov sp , offset top這段程序可以缺省
27、。這段程序可以缺省。即:即:匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) label label偽指令的功能是定義某變量名或標(biāo)偽指令的功能是定義某變量名或標(biāo)號(hào)的類型的。它雖具有段地址與偏移地址的號(hào)的類型的。它雖具有段地址與偏移地址的屬性,但它不占內(nèi)存單元。屬性,但它不占內(nèi)存單元。 例如:例如: barray label bytebarray label byte aarray dw 100 dup(?) aarray dw 100 dup(?)匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 上面定義了兩種類型的變量,上面定義了兩種類型的變量,barraybarray為為字節(jié)類型,字節(jié)類型,aarraya
28、array為字類型,它們的段和偏為字類型,它們的段和偏移地址屬性完全相同,都是下面保留的移地址屬性完全相同,都是下面保留的100100個(gè)個(gè)字空間的首地址,其目的是為了程序中可以字空間的首地址,其目的是為了程序中可以對這對這100100個(gè)字空間作兩種不同類型的操作。這個(gè)字空間作兩種不同類型的操作。這一點(diǎn)上,一點(diǎn)上,labellabel的作用與前面介紹的的作用與前面介紹的ptrptr操作操作符的作用相類似。符的作用相類似。 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)barraybarray100100個(gè)字空間個(gè)字空間aarrayaarray匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 當(dāng)需要對該當(dāng)需要對
29、該100100個(gè)字空間進(jìn)行字個(gè)字空間進(jìn)行字操作時(shí),可利用操作時(shí),可利用aarrayaarray字變量。如字變量。如下面指令格式是正確的。下面指令格式是正確的。 mov ax,aarraymov ax,aarray匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 當(dāng)需要對該當(dāng)需要對該100100個(gè)字空間進(jìn)行字節(jié)操個(gè)字空間進(jìn)行字節(jié)操作時(shí),可利用作時(shí),可利用brraybrray字節(jié)變量。如下面指字節(jié)變量。如下面指令格式是正確的。令格式是正確的。 mov al,barraymov al,barray mov al mov al ,byte ptr aarraybyte ptr aarray等效于等效于匯編語言
30、程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)4.assume4.assume偽指令偽指令 assume assume偽指令告訴匯編程序(偽指令告訴匯編程序(masm.exemasm.exe)在對源程序匯編時(shí),源程序中的段名與哪個(gè)在對源程序匯編時(shí),源程序中的段名與哪個(gè)段寄存器建立關(guān)系。這種關(guān)系只是一種承諾段寄存器建立關(guān)系。這種關(guān)系只是一種承諾關(guān)系,匯編程序?qū)υ闯绦騾R編時(shí),承認(rèn)這種關(guān)系,匯編程序?qū)υ闯绦騾R編時(shí),承認(rèn)這種關(guān)系,但段寄存器的值并未確定,用戶必須關(guān)系,但段寄存器的值并未確定,用戶必須在代碼段一開始用在代碼段一開始用movmov指令對指令對dsds、eses、ssss初始初始化?;?。匯編語言程序設(shè)計(jì)基
31、礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) start start:mov axmov ax,data1data1 mov ds mov ds,ax ax ;對;對dsds初始化初始化 mov axmov ax,data2data2 mov es mov es,ax ax ;對;對eses初始化初始化 mov axmov ax,stackstack mov ss mov ss,ax ax ;對;對ssss初始化初始化 如前面完整結(jié)構(gòu)程序中的下段程序:如前面完整結(jié)構(gòu)程序中的下段程序:匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 因?yàn)橐驗(yàn)閏scs不能做不能做dstdst,所以用戶不,所以用戶不能對能對cscs初始化,初始
32、化,cscs和和ipip的初始化是的初始化是系統(tǒng)賦給的,其方法見下面的系統(tǒng)賦給的,其方法見下面的endend偽指令介紹。偽指令介紹。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)5.end5.end偽指令偽指令 格式:格式: end end 表達(dá)式表達(dá)式 該偽指令標(biāo)志整個(gè)源程序的結(jié)束。它告該偽指令標(biāo)志整個(gè)源程序的結(jié)束。它告訴匯編程序匯編到此結(jié)束。所以,每個(gè)單獨(dú)訴匯編程序匯編到此結(jié)束。所以,每個(gè)單獨(dú)匯編的源程序的結(jié)尾必須有匯編的源程序的結(jié)尾必須有endend偽指令。格式偽指令。格式中的表達(dá)式是該程序運(yùn)行時(shí)的啟動(dòng)地址,它中的表達(dá)式是該程序運(yùn)行時(shí)的啟動(dòng)地址,它通常是可執(zhí)行語句的標(biāo)號(hào)。通常是可執(zhí)行語句的標(biāo)號(hào)。匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ)如前面完整結(jié)構(gòu)程序中的最后有:如前面完整結(jié)構(gòu)程序中的最后有: mov ahmov ah,4ch4ch int 21h int 21hc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州城市職業(yè)學(xué)院《DesignofMachineToolJig》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年浙江省安全員A證考試題庫
- 牡丹繁育研發(fā)觀光基地建設(shè)項(xiàng)目可行性研究報(bào)告-牡丹市場需求持續(xù)擴(kuò)大
- 貴陽人文科技學(xué)院《草地植物分子生物學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州應(yīng)用科技學(xué)院《創(chuàng)新創(chuàng)業(yè)論壇》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年河北省建筑安全員-C證(專職安全員)考試題庫
- 中國農(nóng)業(yè)-高考地理復(fù)習(xí)
- 《巖體力學(xué)性質(zhì)》課件
- 《心絞痛的家庭急救》課件
- 形式與政策-課程報(bào)告
- 《小學(xué)生良好書寫習(xí)慣培養(yǎng)的研究》中期報(bào)告
- 大學(xué)英語四級(jí)詞匯表(下載)
- 2025年四川成都市溫江區(qū)市場監(jiān)督管理局選聘編外專業(yè)技術(shù)人員20人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 手術(shù)室發(fā)生地震應(yīng)急預(yù)案演練
- 初中數(shù)學(xué)新課程標(biāo)準(zhǔn)(2024年版)
- 高職院校專業(yè)教師數(shù)字素養(yǎng)架構(gòu)與提升路徑
- 售后服務(wù)人員培訓(xùn)資料課件
- 2024-2030年中國薯?xiàng)l行業(yè)發(fā)展趨勢及投資盈利預(yù)測報(bào)告
- 生命智能學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 中華傳統(tǒng)文化之戲曲瑰寶學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 公路工程利用鋰渣技術(shù)規(guī)范 第一部分:路基工程-編制說明
評(píng)論
0/150
提交評(píng)論