第4章匯編語言程序設計1.1_第1頁
第4章匯編語言程序設計1.1_第2頁
第4章匯編語言程序設計1.1_第3頁
第4章匯編語言程序設計1.1_第4頁
第4章匯編語言程序設計1.1_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1mov ax,12hcall displayjmp 1234h2345源程序的編譯程序源程序的編譯程序匯編程序匯編程序匯編語言匯編語言源程序源程序機器語言機器語言目標程序目標程序6notepad等 等 等 等 目前都把上述的軟件集成在統(tǒng)一的環(huán)境下,以方便用戶使用。78堆棧段數(shù)據(jù)段代碼段真指令90000:03ff環(huán)境與代碼運行環(huán)境與代碼運行ffff:0堆棧段堆棧段數(shù)據(jù)段數(shù)據(jù)段代碼段代碼段cs:ipdsss:sp系統(tǒng)起始運行程序系統(tǒng)起始運行程序中斷向量區(qū)中斷向量區(qū)(系統(tǒng)專用)(系統(tǒng)專用)棧底最多4個活動段分段結構分段結構es1011121314注釋不能加程序的匯編,不生成目標程序,只為閱讀方便。

2、15匯編語言的一個實例: hello.asm hello db hello, world!,0dh,0ah assume cs:prog,ds:datastart: mov ax,data mov ds,ax lea dx,hello;取字符串首地址 mov ah,9 int 21h;顯示字符串 mov ah,4ch int 21h;退回dos名字標號1617如如 start : mov ax, data jmp/call start hello db 06h,45h,44hptr18如如 start : mov ax, dataptr1920注:變量要事先定義才能使用變量類型應與指令要求的操

3、作數(shù)類型相符。例:mov bl,v1; 要求v1應該是字節(jié)屬性的變量。變量定義后,變量名只對應這個數(shù)據(jù)區(qū)的首地址,若有這個數(shù)據(jù)區(qū)有若干個數(shù)據(jù)項時,其地址要改變。指令中的操作數(shù)的段基地址不直接表示出來,是默認的。在使用變量時,其段屬性應與其所指的段寄存器相符,若不相符,要加上段超越。21如如 start : mov ax, 22232425注意注意:seg、offset只能對符號地址操作只能對符號地址操作mov ax , seg bxmov bx , offset si26例:例:var dw 1,2,3,4,5 type 取取length 取所定義取所定義的長度的長度size 取所定義存儲區(qū)的

4、字節(jié)數(shù)取所定義存儲區(qū)的字節(jié)數(shù) (=type * length)27length和和size運算符的具體運算規(guī)則是:如果變量運算符的具體運算規(guī)則是:如果變量是用重復操作符是用重復操作符dup定義的,那么運算符定義的,那么運算符length的運的運算結果是外層算結果是外層dup的給定值的給定值 (即外層重復次數(shù)),如(即外層重復次數(shù)),如果沒有用果沒有用dup定義的變量,運算結果總是定義的變量,運算結果總是1。 而運算符而運算符size是是length和和type兩個運算結果的乘積。兩個運算結果的乘積。 【例例】取出變量占存儲單元個數(shù)。取出變量占存儲單元個數(shù)。 datasegment a dbab

5、cdef bdw10dup(1,2dup(2) dataends mov ax,length a;1ax mov bx,lengthb;10bx 28 size a = length a*type a = 1 size b = length b*type b = 20若buffer存儲區(qū)是用如下偽指令定義: buffer dw 200 dup(0) 則: type buffer 等于2 length buffer等于200 size buffer等于4002930317)其它運算符方括號“ ” 指令中用方括號表示存儲器操作數(shù),方括號的內(nèi)容表示操作數(shù)的偏移地址例:mov ax,1000h段重設運

6、算符“:”它跟在段寄存器名之后,表示段重設,用來指定一個存儲器操作數(shù)的段屬性而不管其原來的隱含的段是什么。例:mov ax,es:di32333435n變量名為用戶自定義標識符,表示操作數(shù)首元素的邏輯地址;用這個符號表示地址,常稱為符號地址n變量名可以沒有。這種情況,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,無符號地址n設置變量名是為了方便存取它指示的存儲單元變量名363738394005h10h00h01hfchffhfbhffh00h00h0ah41strhello注意注意: :下面兩個定義的不同之處:dbab ;41h在低字節(jié),42h在高字節(jié)(先a后b)dw ab ;42h在低字節(jié),41h在高字節(jié)

7、(先b后a)48h45h4ch4ch4fh注意注意:3個及其以上的個及其以上的字符,只能用字符,只能用db定義定義42434445定義定義引用引用4647和48邏輯段從一個節(jié)節(jié) (16個字節(jié)) 的邊界開始。即段的起始地址應能被16整除, 或這說段起始物理地址應為0h。默認類型邏輯段從字節(jié)字節(jié)邊界開始,即段可以從任何地址開始。邏輯段從字字邊界開始。即段的起始地址必須是偶數(shù)。邏輯段從頁頁邊界開始。256字節(jié)稱為一頁,故段的起始物理地址應為00h。也即:也即:page(頁邊界頁邊界) - 能被能被256除;除;para(段邊界段邊界) -能能被被16除除; word(字邊界字邊界) - (能被能被2

8、除除);byte (字節(jié)邊界字節(jié)邊界) 段名段名 segment 定位類型定位類型 組合類型組合類型 類別類別49 功能功能:用在具有多個模塊的程序中用在具有多個模塊的程序中,用于說明用于說明不同模塊中不同模塊中同名段同名段的組合方式,的組合方式,共共6種種: none : 本段與其它邏輯段不組合本段與其它邏輯段不組合 。 public: 所有此類型的同名段同名段組合成一個邏輯段,公用一個段地址,運行時裝入同一個物理段中,構成一個大的邏輯段。 stack : 專用于說明堆棧段,組合方式同public common : 所有此類型的同名段具有相同的起始地址(覆蓋),各個邏輯段重疊在一起,共享相同

9、的存儲區(qū)域。 memory :本邏輯段置于地址最高處,多個時取第一個,置于地址最高處,多個時取第一個,其余作為其余作為common at :使段地址是表達式所計算出來的16位值,cs除外。50【例例】有兩個模塊,各模塊段定義如下有兩個模塊,各模塊段定義如下模塊模塊1 1: data1data1segmentsegment para public para public data1data1m1m1db 45h dupdb 45h dup(0 0)data1data1endsendsdata2data2segment para common segment para common data2da

10、ta2n1 db 102h dupn1 db 102h dup(0 0)data2data2endsendsend end 模塊模塊2 2:data1data1segment para public segment para public data1data1m2m2db 104h dupdb 104h dup(11h11h)data1data1endsendsdata2data2segment para common segment para common data2data2n2n2db 105h dupdb 105h dup(0 0)data2data2endsendsdata3data

11、3segmentsegmentt1t1db 50 dupdb 50 dup(20h20h)data3data3endsendsendend51該段的定位組合方式示意圖如圖所示。該段的定位組合方式示意圖如圖所示。 5253例例: data1segment adb 1,2,3 data1ends code segment code ends5455 段定義偽操作:段定義偽操作:完整的段定義格式舉例完整的段定義格式舉例 data segment ; 定義數(shù)據(jù)段定義數(shù)據(jù)段 data ends;-extra segment ; 定義附加段定義附加段 extra ends;-code segment ;

12、定義代碼段定義代碼段 assume cs:code, ds:data, es:extrastart: mov ax, data mov ds, ax ; 段地址段地址 段寄存器段寄存器 code ends end start注注:匯編時匯編時,系統(tǒng)自動將代系統(tǒng)自動將代碼段的段地址裝入碼段的段地址裝入cs,不不用在程序中初始化用在程序中初始化,其它其它的段則要用指令把其初的段則要用指令把其初始化始化.56結論:結論:1. assume語句只起指示作用語句只起指示作用, 沒有賦值作用沒有賦值作用2. 程序中用到內(nèi)存操作數(shù)時,程序中用到內(nèi)存操作數(shù)時, 應按操作數(shù)的尋址方式應按操作數(shù)的尋址方式, 給相

13、應的段寄存器賦值給相應的段寄存器賦值。57若為近調(diào)用,則類型可省58程序經(jīng)匯編、連接及裝入內(nèi)存后程序經(jīng)匯編、連接及裝入內(nèi)存后, 過程名為一具體的過程名為一具體的內(nèi)存地址內(nèi)存地址,指示子程序入口。,指示子程序入口。過程名常用作過程名常用作call調(diào)用指令的操作數(shù)調(diào)用指令的操作數(shù),子程的最后安排子程的最后安排ret返回指令,使執(zhí)行完子程后能返回調(diào)用處。返回指令,使執(zhí)行完子程后能返回調(diào)用處。59例例1 display proc ret ;near 屬性的過程對應段內(nèi)返回屬性的過程對應段內(nèi)返回 display endp例例2 display proc far ret ;far屬性的過程對應段間返回屬性

14、的過程對應段間返回 display endp60宏指令:宏指令:是源程序中具有獨立功能的一段程序代碼,是源程序中具有獨立功能的一段程序代碼,程序員事先根據(jù)需要自定義的程序員事先根據(jù)需要自定義的“指令指令“。此后在宏指令。此后在宏指令出現(xiàn)的地方,匯編程序自動把它們替換成相應的語句序出現(xiàn)的地方,匯編程序自動把它們替換成相應的語句序列。宏指令的使用過程為宏定義、宏調(diào)用。列。宏指令的使用過程為宏定義、宏調(diào)用。 1、宏定義、宏定義 格式:格式:宏指令名宏指令名 macro 形參形參,形參,形參 endm 61說明:說明: 宏指令名是為該宏定義所起的名字,可以象指宏指令名是為該宏定義所起的名字,可以象指令

15、助記符一樣出現(xiàn)在源程序中;令助記符一樣出現(xiàn)在源程序中; 形參間用逗號隔開,在宏指令調(diào)用時,形參被形參間用逗號隔開,在宏指令調(diào)用時,形參被實參依次取代,形參為可選項;實參依次取代,形參為可選項; macro表示宏定義開始,表示宏定義開始,endm表示宏定義結表示宏定義結束,二者之間的程序段稱為宏體。束,二者之間的程序段稱為宏體。 6263 上面宏定義中,x、y、z是形式參數(shù)。 調(diào)用宏dadd時可寫為: dadd data1,data2,sum 上面宏調(diào)用中,data1,data2,sum是實際參數(shù),由它們替換定義中的x、y、z,即形實結合形實結合。64call retcall call 相同=或

16、主程序+過程(子程序)主程序+宏定義宏擴展宏調(diào)用 與 過程(子程序)調(diào)用 異同點示意圖65 宏調(diào)用 與 過程(子程序)調(diào)用 異同點相同點: 都是一次定義,多次調(diào)用。不同點: 執(zhí)行形式執(zhí)行形式:宏命令偽指令由宏匯編程序在匯編過程中進行處理;而call、ret則是由cpu執(zhí)行的指令。 匯編結果匯編結果:宏命令偽指令匯編后被展開。 執(zhí)行速度執(zhí)行速度:宏命令執(zhí)行速度較快(因無調(diào)用轉(zhuǎn)移) 占用內(nèi)存占用內(nèi)存:宏指令簡化了源程序,但不能簡化目標程序,并不節(jié)省內(nèi)存單元; 使用過程可以節(jié)省代碼(源程序和目標程序)占用的內(nèi)存空間。666768(1) name 偽指令偽指令 格式:格式: name 模塊名模塊名在源

17、程序開始可用在源程序開始可用 name 模塊命名模塊命名,模塊名的模塊名的作用是指示給作用是指示給。 源程序中可無模塊定義,此時源文件名作為模塊名。源程序中可無模塊定義,此時源文件名作為模塊名。4.2.8模塊定義和連接偽指令模塊定義和連接偽指令69(2)模塊間通信偽指令)模塊間通信偽指令 在編寫規(guī)模較大的匯編語言源程序時,可以將整個程序在編寫規(guī)模較大的匯編語言源程序時,可以將整個程序劃分為幾個獨立的源程序,稱之為模塊。劃分為幾個獨立的源程序,稱之為模塊。 將各模塊分別進行匯編,生成各自的目標程序,最后將將各模塊分別進行匯編,生成各自的目標程序,最后將它們連接成為一個完整的可執(zhí)行程序。它們連接成為一個完整的可執(zhí)行程序。 各模塊之間可以相互進行符號訪問。各模塊之間可以相互進行符號訪問。 為了進行模塊之間連接和實現(xiàn)相互的符號訪問,以便進為了進行模塊之間連接和實現(xiàn)相互的符號訪問,以便進行變量傳送,通常使用以下

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論