




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第匯編語言上機過程匯編語言上機過程第匯編語言程序結構匯編語言程序結構第指示性語句指示性語句第匯編語言程序舉例匯編語言程序舉例第BIOS和和DOS功能調用功能調用第匯編語言程序設計匯編語言程序設計一、匯編語言上機過程一、匯編語言上機過程上機環(huán)境上機環(huán)境硬件硬件系統(tǒng)軟件系統(tǒng)軟件應用軟件應用軟件操作系統(tǒng):操作系統(tǒng):DOS系統(tǒng)系統(tǒng)編輯器編輯器:EDIT.exe編程序編程序:MASM.exe連接程序連接程序:LINK.exe調試程序:調試程序:DEBUG.exe用戶開發(fā)的程序:用戶開發(fā)的程序:ABC.exe等等CPU、存儲器、存儲器(ROM、RAM)、I/O接口、輸入、輸出設備接口、輸入、輸出設備匯編語
2、言上機過程匯編語言上機過程D:EDITABC.asmD:MASMABC;有語法錯,回有語法錯,回EDIT下改該程序下改該程序D:LINKABC;有錯,回在有錯,回在EDIT下改程序下改程序D:ABC運行結果錯,回運行結果錯,回EDIT下改程序下改程序或在或在DEBUG下調試,找原因。下調試,找原因。D:DEBUGABC.exe編輯源程序編輯源程序 EDITABC.ASM匯編源程序匯編源程序 MASM ABC.ASM形成目標程序形成目標程序 ABC.OBJ連接目標程序連接目標程序LINKABC.OBJ有連接錯誤信息有連接錯誤信息? ?形成可執(zhí)行程序形成可執(zhí)行程序 ABC.EXE裝入可執(zhí)行程序到內
3、存裝入可執(zhí)行程序到內存 , ,并執(zhí)行并執(zhí)行D:subABC下一程序下一程序用用DEBUG調試可執(zhí)行程序調試可執(zhí)行程序D:sub DEBUGABC.EXE找到原因找到原因YNYNNYN有匯編錯誤信息有匯編錯誤信息 ? ?Y運行結果正確運行結果正確 ? ?用用DEBUG調試程序查錯調試程序查錯 ? ?二、匯編語言程序結構二、匯編語言程序結構一、程序結構一、程序結構l程序由數條語句構成,每條語句占一行。程序由數條語句構成,每條語句占一行。指令性語句指令性語句(指令語句指令語句)指示性語句指示性語句(偽指令語句偽指令語句)l分段結構分段結構程序按段編寫程序按段編寫,與與8088內存分段編址相對應。內存
4、分段編址相對應。每段由偽操作每段由偽操作SEGMENT開始、由開始、由ENDS結束。結束。l程序最后為程序最后為END結束語句,后跟一啟動地址。結束語句,后跟一啟動地址。啟動地址指示程序開始執(zhí)行的第一條語句。啟動地址指示程序開始執(zhí)行的第一條語句。l程序中設有返回程序中設有返回DOS的功能。的功能。使程序執(zhí)行完后返回使程序執(zhí)行完后返回DOS系統(tǒng)的命令接受狀態(tài)。系統(tǒng)的命令接受狀態(tài)。l程序中用到內存操作數時程序中用到內存操作數時,應按操作數的尋址方式應按操作數的尋址方式,給相應的段寄存器賦值給相應的段寄存器賦值;匯編語言程序結構例一匯編語言程序結構例一movs.asm;實現(xiàn)數據傳送功能實現(xiàn)數據傳送功
5、能aaSEGMENT;數據段數據段1str1DBHello!aaENDSbbSEGMENT;數據段數據段2str2DB6dup(?)bbENDSccSEGMENT;代碼段代碼段ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4CHINT21H;返回返回DOSccENDSENDstart;指示程序結束指示程序結束程序可由多個段構成,至少有一個代碼段程序可由多個段構成,至少有一個代碼段;匯編語言程序結構例二(子程結構
6、)匯編語言程序結構例二(子程結構)scans.asm;用二進制顯示中斷向量表中(用二進制顯示中斷向量表中(0:00:3FFH)數據)數據D0H的個數的個數keyEQU0D0H;用符號表示常量用符號表示常量(關鍵字關鍵字)codeSEGMENT;代碼段開始代碼段開始ASSUMECS:codebegin:MOVAX,0000HMOVDS,AXMOVSI,0000HMOVCX,0400HMOVBX,0MOVAL,keynext:CMPSI,ALJNZpointINCBXpoint:INCSILOOPnextCALLdisplay;調用顯示子程調用顯示子程MOVAH,4CH;返回返回DOSINT21H
7、;用二進制顯示用二進制顯示BX內容子程內容子程displayPROCMOVCX,16rotate:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,2HINT21HLOOProtateRET;子程返回子程返回displayENDPcodeENDS;代碼段結束代碼段結束ENDbegin;指示程序結束和指示程序結束和;程序入口程序入口二、語句結構二、語句結構名名字字:助助記記符符操操作作數數,;注注釋釋名名字字項項助助記記符符項項操操作作數數項項注注釋釋項項dataSEGMENT;數據段數據段varDB?dataENDScodeSEGMENT;代碼段代碼段ASSUMEC
8、S:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstart例:例:名名字字: 助助記記符符 操操作作數數, ;注注釋釋名名字字項項 助助記記符符項項 操操作作數數項項 注注釋釋項項1.名字項名字項l據語句功能的不同,據語句功能的不同,名字項可用來表示段名、變量名、名字項可用來表示段名、變量名、標號、過程名以及常量名等。標號、過程名以及常量名等。dataSEGMENT;數據段數據段varDB?dataENDScodeSEGMENT;代碼段代碼段ASSUMECS:code,DS:dat
9、astart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstartl名字項用一個符號表示。名字項用一個符號表示。 對符號的規(guī)定對符號的規(guī)定:由字符由字符AZ,az,09及符號及符號、$、下劃線、下劃線_等組成,等組成,最長最長31個字符,超出部分忽略。個字符,超出部分忽略。不能用數字打頭,以免與十六進制數相混。不能用數字打頭,以免與十六進制數相混。不使用匯編程序中的保留字。不使用匯編程序中的保留字。(如指令的助記符等如指令的助記符等)對定義的符號不區(qū)分大小寫。對定義的符號不區(qū)分大小寫。名名字字: 助助記記符符 操操
10、作作數數, ;注注釋釋名名字字項項 助助記記符符項項 操操作作數數項項 注注釋釋項項名名字字: 助助記記符符 操操作作數數, ;注注釋釋名名字字項項 助助記記符符項項 操操作作數數項項 注注釋釋項項2.助記符項助記符項助記符可以是指令、偽操作中的助記符。助記符可以是指令、偽操作中的助記符。對于指令對于指令,匯編程序將其翻譯成機器語言指令。,匯編程序將其翻譯成機器語言指令。MOVAX,100B80001對于偽操作對于偽操作,匯編程序據其要求的功能進行處理。,匯編程序據其要求的功能進行處理。dataSEGMENTdata與一段值對應與一段值對應stringDBTsinghuastring與一內存地
11、址對應與一內存地址對應3操作數項操作數項l操作數給出參與操作的數或數所在的地方。操作數給出參與操作的數或數所在的地方。l操作數多于一個時,用逗號分開。操作數多于一個時,用逗號分開。l操作數可以是操作數可以是常數常數、寄存器、存儲器操作數、寄存器、存儲器操作數、標號名、過程名或標號名、過程名或表達式表達式等。等。名名字字: 助助記記符符 操操作作數數, ;注注釋釋名名字字項項 助助記記符符項項 操操作作數數項項 注注釋釋項項常數常數給出具體的數據。可以是數字常量或字符常量。給出具體的數據。可以是數字常量或字符常量。數字默認十進制,也可加數字默認十進制,也可加D表示十進制數。表示十進制數。如如12
12、34D,1234數字后加數字后加B表示二進制數。表示二進制數。如如1010B數字后加數字后加H表示十六進制數。表示十六進制數。如如1234H字符常量,用單引號表示。字符常量,用單引號表示。如如1234匯編時,用字符對應的匯編時,用字符對應的ASCII表示。表示。如如31H,32H,33H,34H例例 data1DB12,34,56;十進制;十進制data2DB12H,34H,56H;十六進制;十六進制MOVAL,G;字符;字符stringDB1234;字符串;字符串lA、B、C、D、E、F開頭的十六進制數前面加開頭的十六進制數前面加0,與與H結尾的標識符區(qū)別。結尾的標識符區(qū)別。如如寄存器名寄存
13、器名AH、BH、CH、DH變量名變量名abcdH等等例例 movAL,0AHmovAL,AHmovBX,0abcdH4注釋項注釋項l由分號引出,用來說明語句或程序的功能。由分號引出,用來說明語句或程序的功能。匯編程序對分號后的內容不做處理。匯編程序對分號后的內容不做處理。l作用:作用:注釋程序,增強程序可讀性。注釋程序,增強程序可讀性??煞旁谡Z句最前,暫時注釋某語句,調試程序用。可放在語句最前,暫時注釋某語句,調試程序用。例例 、;MOVAH,2;顯示提示信息顯示提示信息;MOVDL,A;INT21H 、名名字字: 助助記記符符 操操作作數數, ;注注釋釋名名字字項項 助助記記符符項項 操操作
14、作數數項項 注注釋釋項項第三節(jié)第三節(jié)指示性語句指示性語句/第四節(jié)第四節(jié)匯編語言程序舉例匯編語言程序舉例一、一、程序開始和結束程序開始和結束二、二、段定義段定義三、三、變量定義變量定義四、四、ASSUME語句語句匯編語言程序匯編語言程序舉例一舉例一了解了解DOS的返回,裝入功能的返回,裝入功能五、五、表達式及表達式中的操作符表達式及表達式中的操作符匯編語言程序例二匯編語言程序例二六、六、過程定義過程定義(第五節(jié)程序設計介紹第五節(jié)程序設計介紹)七、七、等值定義等值定義(第五節(jié)程序設計介紹第五節(jié)程序設計介紹)匯編語言程序例三匯編語言程序例三(第五節(jié)程序設計介紹第五節(jié)程序設計介紹)指示性語句與指令性語
15、句:指示性語句與指令性語句:l指令性語句指令性語句是用指令系統(tǒng)中的指令構成的語句。是用指令系統(tǒng)中的指令構成的語句。例例MOVAX,BXl指示性語句指示性語句是指示匯編程序進行匯編的操作。是指示匯編程序進行匯編的操作。例例 MOVAX,4+8中的中的+codeSEGMENT中的中的SEGMENTMOVBX,OFFSETstring中的中的OFFSETl指示性語句與指令性語句區(qū)別指示性語句與指令性語句區(qū)別一個程序經匯編,連接和裝入內存后,在執(zhí)行程序之前:一個程序經匯編,連接和裝入內存后,在執(zhí)行程序之前:指示性語句的功能已經完成,故又稱偽操作。指示性語句的功能已經完成,故又稱偽操作。而指令性語句的功
16、能尚未完成,需控制而指令性語句的功能尚未完成,需控制CPU去執(zhí)行,才能完成。去執(zhí)行,才能完成。aaSEGMENT;數據段數據段1str1DBHello!aaENDSbbSEGMENT;數據段數據段2str2DB6dup(?)bbENDSccSEGMENT;代碼段代碼段ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,bbMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:masmDEBUGhello2.exe-U:查看代碼段查看代碼
17、段12A0:0000FCCLD12A0:0001B89E12MOVAX,129E12A0:00048ED8MOVDS,AX12A0:00068D360000LEASI,000012A0:000AB89F12MOVAX,129F12A0:000D8EC0MOVES,AX12A0:000F8D3E0000LEADI,000012A0:0013B90600MOVCX,000612A0:0016F3REPZ12A0:0017A4MOVSB12A0:0018B44CMOVAH,4C12A0:001ACD21INT21、-D129E:0L10;查看數據段查看數據段1的內容的內容129E:000048656
18、C6C6F210000-0000000000000000Hello!.-D129F:0L10;查看數據段查看數據段2的內容的內容129F:00000000000000000000-0000000000000000.- -數據傳送源程序數據傳送源程序hello2.asm程序經匯編、連接后,裝入內存的情況如下:程序經匯編、連接后,裝入內存的情況如下:常用偽操作介紹常用偽操作介紹一、一、程序開始和結束程序開始和結束二、二、段定義段定義三、三、變量定義變量定義四、四、ASSUME語句語句五、五、表達式中的操作符表達式中的操作符六、六、過程定義過程定義七、七、等值定義等值定義一一、模塊定義和程序結束偽操
19、作模塊定義和程序結束偽操作1.NAME和和TITLE偽操作偽操作格式格式NAME模塊名模塊名格式格式TITLE模塊名模塊名在源程序開始可用在源程序開始可用NAME或或TITLE為模塊命名為模塊命名,模塊名的作用是指示給連接程序進行連接用。模塊名的作用是指示給連接程序進行連接用。源程序中可無模塊定義,此時源文件名作為模塊名。源程序中可無模塊定義,此時源文件名作為模塊名。 2.END偽操作偽操作格式格式END啟動地址啟動地址作用是指示源程序到此結束。作用是指示源程序到此結束。匯編程序對匯編程序對END之后的語句不進行處理。之后的語句不進行處理。程序中所有有效語句應放在程序中所有有效語句應放在END
20、語句之前。語句之前。源程序中必須有源程序中必須有END結束語句。結束語句。匯編程序對無匯編程序對無END語句的源程序不進行處理語句的源程序不進行處理,只給出無只給出無END語句錯誤信息。語句錯誤信息。假設假設TEST.asm是一個無是一個無END語句的匯編語言源程序。語句的匯編語言源程序。其匯編結果如下其匯編結果如下:D:MASM TEST; Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.EndoffileencounteredoninputfileEndoff
21、ileencounteredoninputfile49968+421181Bytessymbolspacefree0WarningErrors0SevereErrorsD:由于沒有由于沒有END語句,匯編程序根本沒對源程序進行匯編,語句,匯編程序根本沒對源程序進行匯編,此時顯示警告性錯誤總數為此時顯示警告性錯誤總數為0,嚴重性錯誤總數為,嚴重性錯誤總數為0,用戶不要被此值的誤導用戶不要被此值的誤導。啟動地址可是一個標號或過程名啟動地址可是一個標號或過程名,指示程序的入口。指示程序的入口。程序裝入內存后,系統(tǒng)跳轉到入口處程序裝入內存后,系統(tǒng)跳轉到入口處,開始執(zhí)行程序。開始執(zhí)行程序。aaSEGME
22、NT;數據段數據段1str1DBHello!aaENDSbbSEGMENT;數據段數據段2str2DB6dup(?)bbENDSccSEGMENT;代碼段代碼段ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:masmDEBUGhello.exe- -U:查看代碼段查看代碼段129F:0000FCCLD129F:0001B89D12MOVAX,129D12
23、9F:00048ED8MOVDS,AX129F:00068D360000LEASI,0000129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、- -D129d:0l10;查看數據段查看數據段1的內容的內容129D:000048656C6C6F210000-0000000000000000Hello!.- -D129
24、e:0l10;查看數據段查看數據段2的內容的內容129E:00000000000000000000-0000000000000000.- -二、段定義偽操作二、段定義偽操作格式格式段名段名SEGMENT、段名段名ENDS段定義由偽操作段定義由偽操作SEGMENT開始開始、ENDS結束結束。其中:其中:SEGMENT和和ENDS必須成對出現(xiàn),必須成對出現(xiàn),且語句前必須有段名,且語句前必須有段名,段名必須相同段名必須相同。SEGMENT和和ENDS語句之間可以有指令和其他偽操作語句之間可以有指令和其他偽操作,表示存放在該段內存的變量、指令或其他偽操作對該段內存的處理表示存放在該段內存的變量、指令或
25、其他偽操作對該段內存的處理程序中可以定義多個段。程序中可以定義多個段。程序經匯編、連接及裝入內存后,段名為一具體的段值。程序經匯編、連接及裝入內存后,段名為一具體的段值。aaSEGMENT;數據段數據段1str1DBHello!aaENDSbbSEGMENT;數據段數據段2str2DB6dup(?)bbENDSccSEGMENT;代碼段代碼段ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,bbMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSEND
26、startD:masmDEBUGhello2.exe-U:查看代碼段查看代碼段12A0:0000FCCLD12A0:0001B89E12MOVAX,129E12A0:00048ED8MOVDS,AX12A0:00068D360000LEASI,000012A0:000AB89F12MOVAX,129F12A0:000D8EC0MOVES,AX12A0:000F8D3E0000LEADI,000012A0:0013B90600MOVCX,000612A0:0016F3REPZ12A0:0017A4MOVSB12A0:0018B44CMOVAH,4C12A0:001ACD21INT21、-D129
27、E:0L10;查看數據段查看數據段1的內容的內容129E:000048656C6C6F210000-0000000000000000Hello!.-D129F:0L10;查看數據段查看數據段2的內容的內容129F:00000000000000000000-0000000000000000.- -數據傳送源程序:程序經匯編、連接后,裝入內存的情況如下:數據傳送源程序:程序經匯編、連接后,裝入內存的情況如下:三、變量定義偽操作三、變量定義偽操作格式格式變量名變量名類型助記符類型助記符操作數操作數,操作數操作數,.用來定義程序中所用的內存操作數。用來定義程序中所用的內存操作數。其中其中變量名變量名指
28、示內存操作數的地址(符號地址)指示內存操作數的地址(符號地址)類型助記符類型助記符指示內存操作數的類型指示內存操作數的類型(字節(jié)、字、雙字等字節(jié)、字、雙字等)操作數操作數指示內存操作數的內容指示內存操作數的內容匯編程序將定義的操作數,按其類型分配內存單元數匯編程序將定義的操作數,按其類型分配內存單元數,順序存入變量名指向的內存單元中。順序存入變量名指向的內存單元中。常用的類型助記符有:常用的類型助記符有:DB指示其后的操作數為字節(jié)類型指示其后的操作數為字節(jié)類型DW指示其后的操作數為字類型指示其后的操作數為字類型DD指示其后的操作數為雙字類型指示其后的操作數為雙字類型例例1:定義賦初值的變量定義
29、賦初值的變量dataSEGMENTxxDB1,-1,0fcHyyDW1,-1,0fcHzzDD1,-1,0fcHdataENDSxxyyzz01FFFC0100FFFFFC0001000000FFFFFFFFFC0000001- -1FC1- -1FC1- -1FC例例2:定義字符串變量定義字符串變量(只能用只能用DB定義定義)dataSEGMENTstr1DBTsingHuastr2DBINPUT:,0dH,0aH,$dataENDS注意注意:3個及其以上的字符,個及其以上的字符,只能用只能用DB定義定義str1DWabcdstr2DDabcdstr1str25473696e67487561
30、494e5055543a0d0a24TsingHuaINPUT:0dH0aH$操作數可以是用操作數可以是用常量、表達式和常量、表達式和?表示。表示。常量和表達式常量和表達式表示內存操作數的初始值表示內存操作數的初始值,其值應在其定義的類型范圍內,否則匯編出錯。其值應在其定義的類型范圍內,否則匯編出錯。例例aaDB270bbDW80000用用?表示不置初始值的內存操作數。表示不置初始值的內存操作數。例例ccDB?可用可用DUP復制操作符復制操作符定義相同的操作數,其格式為定義相同的操作數,其格式為重復次數重復次數DUP(操作數操作數)例例eeDB3DUP(4)等價于等價于eeDB4,4,4dat
31、aSEGMENTxxDB1,-1,0FCHyyDW1,-1,0FCHzzDD1,-1,0FCHstrDBTsingHuabufDB4,?,4DUP(?)DBdataenddataENDScodeSEGMENTASSUMECS:codeASSUMEDS:datastart:MOVAX,dataMOVDS,AXLEABX,xxLEASI,yyLEADI,zzMOVAH,4CHINT21HcodeENDSENDstartD:MASMDEBUGvarible.exe- -U12A1:0000B89E12MOVAX,129E12A1:00038ED8MOVDS,AX12A1:00058D1E0000LE
32、ABX,000012A1:00098D360300LEASI,000312A1:000D8D3E0900LEADI,000912A1:00118D1E1500LEABX,001512A1:00158D361D00LEASI,001D12A1:0019B44CMOVAH,4C12A1:001BCD21INT2112A1:001DFF36243EPUSH3E24-D129E:0L30129E:000001FFFC0100FFFFFC-0001000000FFFFFF.129E:0010FFFC000000547369-6E67487561040000.TsingHua.129E:002000000
33、06461746165-6E64000000000000.dataend.129E:0030B89E128ED88D1E00-008D3603008D3E09.6.- -xxyyzzstrbufdataend段段名名data變變量量xx變變量量yy變變量量zz變變量量str變變量量buf例例4:在在DEBUG下查看變量存放情況。下查看變量存放情況。四、四、ASSUME偽操作偽操作格式格式ASSUME段寄存器:段名段寄存器:段名,段寄存器段寄存器:段名段名,其中其中段寄存器段寄存器為為CS、DS、ES、SS中的一個中的一個段名段名為用偽操作為用偽操作SEGMENT定義過的段名定義過的段名例例 A
34、SSUMECS:cc,DS:aaASSUME偽操作的作用偽操作的作用指示匯編程序指令中用到的標號、過程及變量所在的段。指示匯編程序指令中用到的標號、過程及變量所在的段。其中其中對標號、過程必須用對標號、過程必須用CS段寄存器指示段寄存器指示對變量可用對變量可用CS、DS、ES、SS段寄存器指示段寄存器指示若未用若未用ASSUME語句指示指令中用到的標號、語句指示指令中用到的標號、過程和變量所在的段過程和變量所在的段,匯編程序將給出錯誤信息。匯編程序將給出錯誤信息。ASSUME語句只起指示作用,并無實際的操作。語句只起指示作用,并無實際的操作。在程序中引用定義的變量做內存操作數時,在程序中引用定
35、義的變量做內存操作數時,需按尋址方式用傳送指令(如需按尋址方式用傳送指令(如MOV)給相應的段寄存器賦值給相應的段寄存器賦值。例例用程序實現(xiàn)用程序實現(xiàn)1234H+5678Hvalueresult341278560000dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給給DS賦值賦值MOVDS,AXMOVAX,value;取數取數ADDAX,value+2;兩數相加兩數相加MOVresult,AX;保存結果保存結果MOVAH,4CH;返回返回DOSINT2
36、1HcodeENDSENDstart注釋掉注釋掉ASSUME語句,其匯編結果:語句,其匯編結果:dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENT;ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVAX,valueADDAX,value+2MOVresult,AXMOVAH,4CHINT 21HcodeENDSENDstartD:MASMMASMassume;Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp19
37、81,1988.Allrightsreserved.assume.ASM(8):MissingorunreachableCSassume.ASM(10):Cannotaddresswithsegmentregisterassume.ASM(11):Cannotaddresswithsegmentregisterassume.ASM(12):Cannotaddresswithsegmentregister49872+421341Bytessymbolspacefree0WarningErrors4SevereErrorsD:MASM程序中有程序中有ASSUME語句,經匯編,連接和裝入內存后的情況
38、:語句,經匯編,連接和裝入內存后的情況:dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給給DS賦值賦值MOVDS,AXMOVAX,value;取數取數ADDAX,value+2;兩數相加兩數相加MOVresult,AX;保存結果保存結果MOVAH,4CH;返回返回DOSINT21HcodeENDSD:MASMDEBUGassume.exe- -R;查看程序執(zhí)行前各寄存器查看程序執(zhí)行前各寄存器AX=0000BX=0000CX=0023DX=0000SP=
39、0000BP=0000SI=0000DI=0000DS=1295ES=1295SS=12A5CS=12A6IP=0000NVUPEIPLNZNAPONC12A6:0000B8A512MOVAX,12A5- -U;查看在內存的程序查看在內存的程序12A6:0000B8A512MOVAX,12A512A6:00038ED8MOVDS,AX12A6:0005A10000MOVAX,000012A6:000803060200ADDAX,000212A6:000CA30400MOV0004,AX12A6:000FB44CMOVAH,4C12A6:0011CD21INT21、-注意:注意: 程序裝入內存后
40、,執(zhí)行程序前,程序裝入內存后,執(zhí)行程序前,當前的當前的DS值并非程序定義的值并非程序定義的data段值,段值,1295不等于不等于12A5思考:思考:如果上例中沒有如果上例中沒有MOVDS,AX程序執(zhí)行的結果會怎樣?程序執(zhí)行的結果會怎樣?D:MASMDEBUGassume.exe- -R; ;查看程序執(zhí)行前各寄存器查看程序執(zhí)行前各寄存器AX=0000BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000DS=1295ES=1295SS=12A5CS=12A6IP=0000NVUPEIPLNZNAPONC12A6:0000B8A512MOVAX,12A
41、5- -U; ;查看在內存的程序查看在內存的程序12A6:0000B8A512MOVAX,12A512A6:0003A10000MOVAX,000012A6:000603060200ADDAX,000212A6:000AA30400MOV0004,AX12A6:000DB44CMOVAH,4C12A6:000FCD21INT21、dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給給DS賦值賦值;MOVDS,AXMOVAX,value;取數取數ADDAX,
42、value+2;兩數相加兩數相加MOVresult,AX;保存結果保存結果MOVAH,4CH;返回返回DOSINT21HcodeENDS結論:結論:1.ASSUME語句只起指示作用語句只起指示作用,沒有賦值作用沒有賦值作用2.程序中用到內存操作數時,程序中用到內存操作數時,應按操作數的尋址方式應按操作數的尋址方式,給相應的段寄存器賦值給相應的段寄存器賦值。第三節(jié)第三節(jié)指示性語句指示性語句/第四節(jié)第四節(jié)匯編語言程序舉例匯編語言程序舉例一、一、程序開始和結束程序開始和結束二、二、段定義段定義三、三、變量定義變量定義四、四、ASSUME語句語句匯編語言程序匯編語言程序舉例一舉例一了解了解DOS的返回
43、,裝入功能的返回,裝入功能五、五、表達式及表達式中的操作符表達式及表達式中的操作符匯編語言程序例二匯編語言程序例二六、六、過程定義過程定義(第五節(jié)程序設計介紹第五節(jié)程序設計介紹)七、七、等值定義等值定義(第五節(jié)程序設計介紹第五節(jié)程序設計介紹)匯編語言程序例三匯編語言程序例三(第五節(jié)程序設計介紹第五節(jié)程序設計介紹)匯編語言程序匯編語言程序舉例一舉例一例例將將BL寄存器的內容按二進制形式顯示出來寄存器的內容按二進制形式顯示出來10100110(BL)MOVCX,8;顯示字符個數為顯示字符個數為8next:SHLBL,1;將顯示位移至將顯示位移至CF中中JCone;CF=1?MOVDL,30H;CF
44、=0,將將0的的ASCII放在放在DL中中JMPexitone:MOVDL,31H;CF=1,將將1的的ASCII放在放在DL中中exit:MOVAH,2INT21H;調用調用DOS功能顯示功能顯示DECCX;循環(huán)次數減循環(huán)次數減1JNZnext;判斷是否結束判斷是否結束 、3130313030313130codeSEGMENTASSUMECS:codestart:.codeENDSENDstartMOVCX,8;顯示字符個數為顯示字符個數為8next:SHLBL,1;將顯示位移至將顯示位移至CF中中JCone;CF=1?MOVDL,30H;CF=0,將將0的的ASCII放在放在DL中中JMP
45、exitone:MOVDL,31H;CF=1,將將1的的ASCII放在放在DL中中exit:MOVAH,2INT21H;調用調用DOS功能顯示功能顯示DECCX;循環(huán)次數減循環(huán)次數減1JNZnext;判斷是否結束判斷是否結束D:MASMSBL; 匯編成匯編成ShowBL.objMicrosoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.48912+447243Bytessymbolspacefree0WarningErrors0SevereErrorsD:LINKSBL; 連
46、接成連接成ShowBL.exeMicrosoft(R)OverlayLinkerVersion3.61Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.LINK:warningL4021:nostacksegmentD:SBL 裝載并執(zhí)行裝載并執(zhí)行ShowBL.exe請猜想執(zhí)行的結果?請猜想執(zhí)行的結果?D:DEBUGSBL.exe ;用用DEBUG裝入程序裝入程序-U 0B5E:0000B90800MOVCX,00080B5E:0003D0E3SHLBL,10B5E:00057205JB000C0B5E:0007B230MOVDL,300
47、B5E:0009EB03JMP000E0B5E:000B90NOP0B5E:000CB231MOVDL,310B5E:000EB402MOVAH,020B5E:0010CD21INT210B5E:001249DECCX0B5E:001375EEJNZ00030B5E:001509E8ORAX,BP0B5E:001796XCHGSI,AX0B5E:001800F8ADDAL,BH0B5E:001AB262MOVDL,620B5E:001CFFFF ? DIFFFF ? DI0B5E:001DEB0AJMP0029-hello.exe用戶程序用戶程序與用戶程序相連的與用戶程序相連的內存內容被看作內
48、存內容被看作程序時程序時死機死機復習復習DOS系統(tǒng)的啟動過程系統(tǒng)的啟動過程執(zhí)行用戶程序后,執(zhí)行用戶程序后,若要返回若要返回DOS狀態(tài),狀態(tài),即在屏幕上出現(xiàn)即在屏幕上出現(xiàn)DOS提示符,提示符,等待輸入新的命令,等待輸入新的命令,應在用戶程序的最后安排應在用戶程序的最后安排完成此功能的程序段。完成此功能的程序段。F FF FF FF F: :0 00 00 00 0H H1243?ROM系系統(tǒng)統(tǒng)檢檢測測程程序序IO.SYS模模塊塊COMMAND.COMMSDOS.SYS模模塊塊用用戶戶程程序序空空 間間引引導導程程序序1KB 中中斷斷向向量量表表RAM內內 存存ROM BIOSDOSIO.SYSC
49、OMMAND.COMMSDOS.SYS引引導導程程序序磁磁 盤盤EDIT.EXEMASM.EXELINK.EXEDEBUG.exe應應用用程程序序其其他他系系統(tǒng)統(tǒng)程程序序h he el ll lo o. .a as sm mh he el ll lo o. .o ob bj jh he el ll lo o. .e ex xe e通常采用調用通常采用調用DOS系統(tǒng)功能完成系統(tǒng)功能完成。調用調用DOS系統(tǒng)的系統(tǒng)的4CH功能功能,返回返回DOS方法:方法:在要返回在要返回DOS處,安排指令:處,安排指令:MOVAH,4CHINT21H執(zhí)行完執(zhí)行完4CH的功能調用,即返回的功能調用,即返回DOS。例
50、例codeSEGMENTASSUMECS:codestart:、;程序主體部分程序主體部分、MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstartcodeSEGMENTASSUMECS:codestart:.MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstartMOVCX,8;顯示字符個數為顯示字符個數為8next:SHLBL,1;將顯示位移至將顯示位移至CF中中JCone;CF=1?MOVDL,30H;CF=0,將將0的的ASCII放在放在DL中中JMPexitone:MOVDL,31H;CF=1,將將1的的ASCII放在放在DL中中exit:
51、MOVAH,2INT21H;調用調用DOS功能顯示功能顯示DECCX;循環(huán)次數減循環(huán)次數減1JNZnext;判斷是否結束判斷是否結束MOVBL,53H;設置一個測試設置一個測試53hD:MASMShowBL;匯編成匯編成ShowBL.objMicrosoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.48912+447243Bytessymbolspacefree0WarningErrors0SevereErrorsD:LINKShowBL;連接成連接成ShowBL.exeMi
52、crosoft(R)OverlayLinkerVersion3.61Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.LINK:warningL4021:nostacksegmentD:ShowBL裝載并執(zhí)行裝載并執(zhí)行ShowBL.exe01010011D:masmD:DEBUGShowBL.exe ;用用DEBUG裝入程序裝入程序-U 0B5E:0000B90800MOVCX,00080B5E:0003D0E3SHLBL,10B5E:00057205JB000C0B5E:0007B230MOVDL,300B5E:0009EB03JMP0
53、00E0B5E:000B90NOP0B5E:000CB231MOVDL,310B5E:000EB402MOVAH,020B5E:0010CD21INT210B5E:001249DECCX0B5E:001375EEJNZ00030B5F:0015B44CMOVAH,4C0B5F:0017CD21INT21-codeSEGMENTASSUMECS:codestart:;程序主體部分程序主體部分.MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstart一個完整匯編程序的基本框架一個完整匯編程序的基本框架:DOS的裝入功能的裝入功能(又稱又稱EXEC系統(tǒng)功能系統(tǒng)功能)l可執(zhí)行文件
54、可執(zhí)行文件.exe,應裝入內存方能執(zhí)行。應裝入內存方能執(zhí)行。由由DOS的裝入功能完成。的裝入功能完成。l在在DOS的提示符后輸入可執(zhí)行文件的文件名,的提示符后輸入可執(zhí)行文件的文件名,按回車鍵,按回車鍵,DOS系統(tǒng)即調用裝入功能系統(tǒng)即調用裝入功能,將可執(zhí)行程序裝入內存。將可執(zhí)行程序裝入內存。內內 存存256KB ROM0000:0000H0040:0000H A000:0000H C800:0000H FE00:0000HFE00:1FFFH H640KB RAM 基基本本內內存存顯顯示示器器顯顯示示緩緩存存區(qū)區(qū)ROM BIOS系系統(tǒng)統(tǒng)檢檢測測程程序序IO.SYS 模模塊塊COMMAND.COM
55、常常駐駐模模塊塊MSDOS.SYS 模模塊塊用用戶戶程程序序空空間間COMMAND.COM暫暫駐駐模模塊塊DOS 工工作作區(qū)區(qū)BIOS 工工作作區(qū)區(qū)1KB 中中斷斷向向量量表表128KB RAM 保保留留區(qū)區(qū)DOS其其他他系系統(tǒng)統(tǒng)程程序序磁磁 盤盤應應用用程程序序IO.SYSCOMMAND.COMMSDOS.SYS引引導導程程序序EDIT.EXEMASM.EXELINK.EXEDEBUG.exehello.asmhello.objhello.exescans.asmscans.objscans.exe完成以下操作:完成以下操作:確定內存可用部分確定內存可用部分,以便存放要執(zhí)行的以便存放要執(zhí)行的
56、.exe文件。文件。建立程序段前綴建立程序段前綴PSP(ProgramSegmentPrefix) 程序段前綴大小程序段前綴大小100H,即即256個字節(jié)。個字節(jié)。存放進程間的控制信息。存放進程間的控制信息。PSP最開始的兩個字節(jié)最開始的兩個字節(jié)CD20,是一條是一條INT20H指令。指令。裝入可執(zhí)行程序裝入可執(zhí)行程序.exe0000:0000H可可用用內內存存空空間間內內 存存FFFF:0000HROM BIOS系系統(tǒng)統(tǒng)檢檢測測程程序序 COMMAND.COMDOS 系系統(tǒng)統(tǒng)1KB 中中斷斷向向量量表表 CD20 、 、 、 、 、 、 、 、 、 hello.exexxxx:0000Hxx
57、xx:00FFH程程序序段段前前綴綴用用戶戶程程序序DOS的裝入功能的裝入功能修改以下寄存器的值修改以下寄存器的值DS、ES設置為設置為程序段前綴所在內存的段值;程序段前綴所在內存的段值;(DS)=xxxxH(ES)=xxxxHSS、SP設置為設置為由連接程序傳過來的值;由連接程序傳過來的值;CS、IP設置為設置為程序的入口地址,程序的入口地址,即偽操作即偽操作END后跟的后跟的符號名對應的物理地址;符號名對應的物理地址;此時此時CS:IP指向用戶程序,指向用戶程序,開始執(zhí)行用戶程序。開始執(zhí)行用戶程序。0000:0000H可可用用內內存存空空間間內內 存存FFFF:0000HROM BIOS系
58、系統(tǒng)統(tǒng)檢檢測測程程序序 COMMAND.COMDOS 系系統(tǒng)統(tǒng)1KB 中中斷斷向向量量表表 CD20 、 、 、 、 、 、 、 、 、 hello.exexxxx:0000Hxxxx:00FFH程程序序段段前前綴綴CS:IPD:DEBUGShowBL.exe-R ; ;查看當前寄存器內容查看當前寄存器內容AX=0000BX=0000CX=001BDX=0000SP=0000BP=0000SI=0000DI=0000DS=0B51ES=0B51SS=0B61CS=0B61IP=0000NVUPEIPLNZNAPONC0B61:0000B353MOVBL,53-U ; ;查看程序代碼查看程序代碼
59、0B61:0000B353MOVBL,530B61:0002B90800MOVCX,0008.0B61:0017B44CMOVAH,4C0B61:0019CD21INT21-DDS:0L20 ; ;查看此時數據段內容查看此時數據段內容( (程序段前綴程序段前綴) )0B51:0000CD20FF9F009AF0FE-1DF04F035A058A030B51:00105A0517035A054905-0101010002FFFFFF-UDS:0L5 ; ;反匯編當前數據段內容反匯編當前數據段內容( (程序段前綴程序段前綴) )0B51:0000CD20INT200B51:0002FF9F009A
60、CALLFARBX+9A00-在在DEBUG下查看下查看ShowBL.exe的裝入情況的裝入情況: :-R ; ;查看當前寄存器內容查看當前寄存器內容AX=0000BX=0000CX=001BDX=0000SP=0000BP=0000SI=0000DI=0000DS=0B51ES=0B51SS=0B61CS=0B61IP=0000NVUPEIPLNZNAPONCB353MOVBL,53 - UCS:0 ; ;查看程序查看程序 0B61:0000B353MOVBL,530B61:0002B90800MOVCX,00080B61:0005D0E3SHLBL,10B61:00077205JB000E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 IEC 60670-1:2024 RLV EN Boxes and enclosures for electrical accessories for household and similar fixed electrical installations - Part 1: General requirements
- 2025年度電商渠道拓展與營銷合作合同范本
- 2025年度個人住房按揭貸款合同范本-@-1
- 2025年度肉羊屠宰加工企業(yè)戰(zhàn)略合作框架合同4篇
- 班級歷史文化月活動計劃
- 2025年理發(fā)、美容服務合作協(xié)議書
- 以消費者為中心的品牌策略計劃
- 幼兒園園所文化建設的教研活動計劃
- 推動護理??瓢l(fā)展與提升的策略計劃
- 教學目標達成情況分析計劃
- 班組建設考核制度
- 部編版語文四年級下冊全冊大單元整體作業(yè)設計
- 2023屆廣東省深圳市寶安區(qū)數學六年級第二學期期末聯(lián)考試題含解析
- 產品銷售保密協(xié)議書
- 收養(yǎng)人撫養(yǎng)教育被收養(yǎng)人能力的證明
- 機械制圖習題集第6版習題及答案
- 創(chuàng)傷嚴重程度(ISS)評分表(完整版)
- 施工升降機的安裝步驟
- 損傷控制性手術
- 熱工儀表校驗方案
- 孚能科技(贛州)股份有限公司新員工入職考試附答案
評論
0/150
提交評論