版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第匯編語(yǔ)言上機(jī)過(guò)程匯編語(yǔ)言上機(jī)過(guò)程第匯編語(yǔ)言程序結(jié)構(gòu)匯編語(yǔ)言程序結(jié)構(gòu)第指示性語(yǔ)句指示性語(yǔ)句第匯編語(yǔ)言程序舉例匯編語(yǔ)言程序舉例第BIOS和和DOS功能調(diào)用功能調(diào)用第匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)一、匯編語(yǔ)言上機(jī)過(guò)程一、匯編語(yǔ)言上機(jī)過(guò)程上機(jī)環(huán)境上機(jī)環(huán)境硬件硬件系統(tǒng)軟件系統(tǒng)軟件應(yīng)用軟件應(yīng)用軟件操作系統(tǒng):操作系統(tǒng):DOS系統(tǒng)系統(tǒng)編輯器編輯器:EDIT.exe編程序編程序:MASM.exe連接程序連接程序:LINK.exe調(diào)試程序:調(diào)試程序:DEBUG.exe用戶開發(fā)的程序:用戶開發(fā)的程序:ABC.exe等等CPU、存儲(chǔ)器、存儲(chǔ)器(ROM、RAM)、I/O接口、輸入、輸出設(shè)備接口、輸入、輸出設(shè)備匯編語(yǔ)
2、言上機(jī)過(guò)程匯編語(yǔ)言上機(jī)過(guò)程D:EDITABC.asmD:MASMABC;有語(yǔ)法錯(cuò),回有語(yǔ)法錯(cuò),回EDIT下改該程序下改該程序D:LINKABC;有錯(cuò),回在有錯(cuò),回在EDIT下改程序下改程序D:ABC運(yùn)行結(jié)果錯(cuò),回運(yùn)行結(jié)果錯(cuò),回EDIT下改程序下改程序或在或在DEBUG下調(diào)試,找原因。下調(diào)試,找原因。D:DEBUGABC.exe編輯源程序編輯源程序 EDITABC.ASM匯編源程序匯編源程序 MASM ABC.ASM形成目標(biāo)程序形成目標(biāo)程序 ABC.OBJ連接目標(biāo)程序連接目標(biāo)程序LINKABC.OBJ有連接錯(cuò)誤信息有連接錯(cuò)誤信息? ?形成可執(zhí)行程序形成可執(zhí)行程序 ABC.EXE裝入可執(zhí)行程序到內(nèi)
3、存裝入可執(zhí)行程序到內(nèi)存 , ,并執(zhí)行并執(zhí)行D:subABC下一程序下一程序用用DEBUG調(diào)試可執(zhí)行程序調(diào)試可執(zhí)行程序D:sub DEBUGABC.EXE找到原因找到原因YNYNNYN有匯編錯(cuò)誤信息有匯編錯(cuò)誤信息 ? ?Y運(yùn)行結(jié)果正確運(yùn)行結(jié)果正確 ? ?用用DEBUG調(diào)試程序查錯(cuò)調(diào)試程序查錯(cuò) ? ?二、匯編語(yǔ)言程序結(jié)構(gòu)二、匯編語(yǔ)言程序結(jié)構(gòu)一、程序結(jié)構(gòu)一、程序結(jié)構(gòu)l程序由數(shù)條語(yǔ)句構(gòu)成,每條語(yǔ)句占一行。程序由數(shù)條語(yǔ)句構(gòu)成,每條語(yǔ)句占一行。指令性語(yǔ)句指令性語(yǔ)句(指令語(yǔ)句指令語(yǔ)句)指示性語(yǔ)句指示性語(yǔ)句(偽指令語(yǔ)句偽指令語(yǔ)句)l分段結(jié)構(gòu)分段結(jié)構(gòu)程序按段編寫程序按段編寫,與與8088內(nèi)存分段編址相對(duì)應(yīng)。內(nèi)存
4、分段編址相對(duì)應(yīng)。每段由偽操作每段由偽操作SEGMENT開始、由開始、由ENDS結(jié)束。結(jié)束。l程序最后為程序最后為END結(jié)束語(yǔ)句,后跟一啟動(dòng)地址。結(jié)束語(yǔ)句,后跟一啟動(dòng)地址。啟動(dòng)地址指示程序開始執(zhí)行的第一條語(yǔ)句。啟動(dòng)地址指示程序開始執(zhí)行的第一條語(yǔ)句。l程序中設(shè)有返回程序中設(shè)有返回DOS的功能。的功能。使程序執(zhí)行完后返回使程序執(zhí)行完后返回DOS系統(tǒng)的命令接受狀態(tài)。系統(tǒng)的命令接受狀態(tài)。l程序中用到內(nèi)存操作數(shù)時(shí)程序中用到內(nèi)存操作數(shù)時(shí),應(yīng)按操作數(shù)的尋址方式應(yīng)按操作數(shù)的尋址方式,給相應(yīng)的段寄存器賦值給相應(yīng)的段寄存器賦值;匯編語(yǔ)言程序結(jié)構(gòu)例一匯編語(yǔ)言程序結(jié)構(gòu)例一movs.asm;實(shí)現(xiàn)數(shù)據(jù)傳送功能實(shí)現(xiàn)數(shù)據(jù)傳送功
5、能aaSEGMENT;數(shù)據(jù)段數(shù)據(jù)段1str1DBHello!aaENDSbbSEGMENT;數(shù)據(jù)段數(shù)據(jù)段2str2DB6dup(?)bbENDSccSEGMENT;代碼段代碼段ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4CHINT21H;返回返回DOSccENDSENDstart;指示程序結(jié)束指示程序結(jié)束程序可由多個(gè)段構(gòu)成,至少有一個(gè)代碼段程序可由多個(gè)段構(gòu)成,至少有一個(gè)代碼段;匯編語(yǔ)言程序結(jié)構(gòu)例二(子程結(jié)構(gòu)
6、)匯編語(yǔ)言程序結(jié)構(gòu)例二(子程結(jié)構(gòu))scans.asm;用二進(jìn)制顯示中斷向量表中(用二進(jìn)制顯示中斷向量表中(0:00:3FFH)數(shù)據(jù))數(shù)據(jù)D0H的個(gè)數(shù)的個(gè)數(shù)keyEQU0D0H;用符號(hào)表示常量用符號(hào)表示常量(關(guān)鍵字關(guān)鍵字)codeSEGMENT;代碼段開始代碼段開始ASSUMECS:codebegin:MOVAX,0000HMOVDS,AXMOVSI,0000HMOVCX,0400HMOVBX,0MOVAL,keynext:CMPSI,ALJNZpointINCBXpoint:INCSILOOPnextCALLdisplay;調(diào)用顯示子程調(diào)用顯示子程MOVAH,4CH;返回返回DOSINT21H
7、;用二進(jìn)制顯示用二進(jìn)制顯示BX內(nèi)容子程內(nèi)容子程displayPROCMOVCX,16rotate:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,2HINT21HLOOProtateRET;子程返回子程返回displayENDPcodeENDS;代碼段結(jié)束代碼段結(jié)束ENDbegin;指示程序結(jié)束和指示程序結(jié)束和;程序入口程序入口二、語(yǔ)句結(jié)構(gòu)二、語(yǔ)句結(jié)構(gòu)名名字字:助助記記符符操操作作數(shù)數(shù),;注注釋釋名名字字項(xiàng)項(xiàng)助助記記符符項(xiàng)項(xiàng)操操作作數(shù)數(shù)項(xiàng)項(xiàng)注注釋釋項(xiàng)項(xiàng)dataSEGMENT;數(shù)據(jù)段數(shù)據(jù)段varDB?dataENDScodeSEGMENT;代碼段代碼段ASSUMEC
8、S:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstart例:例:名名字字: 助助記記符符 操操作作數(shù)數(shù), ;注注釋釋名名字字項(xiàng)項(xiàng) 助助記記符符項(xiàng)項(xiàng) 操操作作數(shù)數(shù)項(xiàng)項(xiàng) 注注釋釋項(xiàng)項(xiàng)1.名字項(xiàng)名字項(xiàng)l據(jù)語(yǔ)句功能的不同,據(jù)語(yǔ)句功能的不同,名字項(xiàng)可用來(lái)表示段名、變量名、名字項(xiàng)可用來(lái)表示段名、變量名、標(biāo)號(hào)、過(guò)程名以及常量名等。標(biāo)號(hào)、過(guò)程名以及常量名等。dataSEGMENT;數(shù)據(jù)段數(shù)據(jù)段varDB?dataENDScodeSEGMENT;代碼段代碼段ASSUMECS:code,DS:dat
9、astart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstartl名字項(xiàng)用一個(gè)符號(hào)表示。名字項(xiàng)用一個(gè)符號(hào)表示。 對(duì)符號(hào)的規(guī)定對(duì)符號(hào)的規(guī)定:由字符由字符AZ,az,09及符號(hào)及符號(hào)、$、下劃線、下劃線_等組成,等組成,最長(zhǎng)最長(zhǎng)31個(gè)字符,超出部分忽略。個(gè)字符,超出部分忽略。不能用數(shù)字打頭,以免與十六進(jìn)制數(shù)相混。不能用數(shù)字打頭,以免與十六進(jìn)制數(shù)相混。不使用匯編程序中的保留字。不使用匯編程序中的保留字。(如指令的助記符等如指令的助記符等)對(duì)定義的符號(hào)不區(qū)分大小寫。對(duì)定義的符號(hào)不區(qū)分大小寫。名名字字: 助助記記符符 操操
10、作作數(shù)數(shù), ;注注釋釋名名字字項(xiàng)項(xiàng) 助助記記符符項(xiàng)項(xiàng) 操操作作數(shù)數(shù)項(xiàng)項(xiàng) 注注釋釋項(xiàng)項(xiàng)名名字字: 助助記記符符 操操作作數(shù)數(shù), ;注注釋釋名名字字項(xiàng)項(xiàng) 助助記記符符項(xiàng)項(xiàng) 操操作作數(shù)數(shù)項(xiàng)項(xiàng) 注注釋釋項(xiàng)項(xiàng)2.助記符項(xiàng)助記符項(xiàng)助記符可以是指令、偽操作中的助記符。助記符可以是指令、偽操作中的助記符。對(duì)于指令對(duì)于指令,匯編程序?qū)⑵浞g成機(jī)器語(yǔ)言指令。,匯編程序?qū)⑵浞g成機(jī)器語(yǔ)言指令。MOVAX,100B80001對(duì)于偽操作對(duì)于偽操作,匯編程序據(jù)其要求的功能進(jìn)行處理。,匯編程序據(jù)其要求的功能進(jìn)行處理。dataSEGMENTdata與一段值對(duì)應(yīng)與一段值對(duì)應(yīng)stringDBTsinghuastring與一內(nèi)存地
11、址對(duì)應(yīng)與一內(nèi)存地址對(duì)應(yīng)3操作數(shù)項(xiàng)操作數(shù)項(xiàng)l操作數(shù)給出參與操作的數(shù)或數(shù)所在的地方。操作數(shù)給出參與操作的數(shù)或數(shù)所在的地方。l操作數(shù)多于一個(gè)時(shí),用逗號(hào)分開。操作數(shù)多于一個(gè)時(shí),用逗號(hào)分開。l操作數(shù)可以是操作數(shù)可以是常數(shù)常數(shù)、寄存器、存儲(chǔ)器操作數(shù)、寄存器、存儲(chǔ)器操作數(shù)、標(biāo)號(hào)名、過(guò)程名或標(biāo)號(hào)名、過(guò)程名或表達(dá)式表達(dá)式等。等。名名字字: 助助記記符符 操操作作數(shù)數(shù), ;注注釋釋名名字字項(xiàng)項(xiàng) 助助記記符符項(xiàng)項(xiàng) 操操作作數(shù)數(shù)項(xiàng)項(xiàng) 注注釋釋項(xiàng)項(xiàng)常數(shù)常數(shù)給出具體的數(shù)據(jù)??梢允菙?shù)字常量或字符常量。給出具體的數(shù)據(jù)??梢允菙?shù)字常量或字符常量。數(shù)字默認(rèn)十進(jìn)制,也可加數(shù)字默認(rèn)十進(jìn)制,也可加D表示十進(jìn)制數(shù)。表示十進(jìn)制數(shù)。如如12
12、34D,1234數(shù)字后加數(shù)字后加B表示二進(jìn)制數(shù)。表示二進(jìn)制數(shù)。如如1010B數(shù)字后加數(shù)字后加H表示十六進(jìn)制數(shù)。表示十六進(jìn)制數(shù)。如如1234H字符常量,用單引號(hào)表示。字符常量,用單引號(hào)表示。如如1234匯編時(shí),用字符對(duì)應(yīng)的匯編時(shí),用字符對(duì)應(yīng)的ASCII表示。表示。如如31H,32H,33H,34H例例 data1DB12,34,56;十進(jìn)制;十進(jìn)制data2DB12H,34H,56H;十六進(jìn)制;十六進(jìn)制MOVAL,G;字符;字符stringDB1234;字符串;字符串lA、B、C、D、E、F開頭的十六進(jìn)制數(shù)前面加開頭的十六進(jìn)制數(shù)前面加0,與與H結(jié)尾的標(biāo)識(shí)符區(qū)別。結(jié)尾的標(biāo)識(shí)符區(qū)別。如如寄存器名寄存
13、器名AH、BH、CH、DH變量名變量名abcdH等等例例 movAL,0AHmovAL,AHmovBX,0abcdH4注釋項(xiàng)注釋項(xiàng)l由分號(hào)引出,用來(lái)說(shuō)明語(yǔ)句或程序的功能。由分號(hào)引出,用來(lái)說(shuō)明語(yǔ)句或程序的功能。匯編程序?qū)Ψ痔?hào)后的內(nèi)容不做處理。匯編程序?qū)Ψ痔?hào)后的內(nèi)容不做處理。l作用:作用:注釋程序,增強(qiáng)程序可讀性。注釋程序,增強(qiáng)程序可讀性??煞旁谡Z(yǔ)句最前,暫時(shí)注釋某語(yǔ)句,調(diào)試程序用??煞旁谡Z(yǔ)句最前,暫時(shí)注釋某語(yǔ)句,調(diào)試程序用。例例 、;MOVAH,2;顯示提示信息顯示提示信息;MOVDL,A;INT21H 、名名字字: 助助記記符符 操操作作數(shù)數(shù), ;注注釋釋名名字字項(xiàng)項(xiàng) 助助記記符符項(xiàng)項(xiàng) 操操作
14、作數(shù)數(shù)項(xiàng)項(xiàng) 注注釋釋項(xiàng)項(xiàng)第三節(jié)第三節(jié)指示性語(yǔ)句指示性語(yǔ)句/第四節(jié)第四節(jié)匯編語(yǔ)言程序舉例匯編語(yǔ)言程序舉例一、一、程序開始和結(jié)束程序開始和結(jié)束二、二、段定義段定義三、三、變量定義變量定義四、四、ASSUME語(yǔ)句語(yǔ)句匯編語(yǔ)言程序匯編語(yǔ)言程序舉例一舉例一了解了解DOS的返回,裝入功能的返回,裝入功能五、五、表達(dá)式及表達(dá)式中的操作符表達(dá)式及表達(dá)式中的操作符匯編語(yǔ)言程序例二匯編語(yǔ)言程序例二六、六、過(guò)程定義過(guò)程定義(第五節(jié)程序設(shè)計(jì)介紹第五節(jié)程序設(shè)計(jì)介紹)七、七、等值定義等值定義(第五節(jié)程序設(shè)計(jì)介紹第五節(jié)程序設(shè)計(jì)介紹)匯編語(yǔ)言程序例三匯編語(yǔ)言程序例三(第五節(jié)程序設(shè)計(jì)介紹第五節(jié)程序設(shè)計(jì)介紹)指示性語(yǔ)句與指令性語(yǔ)
15、句:指示性語(yǔ)句與指令性語(yǔ)句:l指令性語(yǔ)句指令性語(yǔ)句是用指令系統(tǒng)中的指令構(gòu)成的語(yǔ)句。是用指令系統(tǒng)中的指令構(gòu)成的語(yǔ)句。例例MOVAX,BXl指示性語(yǔ)句指示性語(yǔ)句是指示匯編程序進(jìn)行匯編的操作。是指示匯編程序進(jìn)行匯編的操作。例例 MOVAX,4+8中的中的+codeSEGMENT中的中的SEGMENTMOVBX,OFFSETstring中的中的OFFSETl指示性語(yǔ)句與指令性語(yǔ)句區(qū)別指示性語(yǔ)句與指令性語(yǔ)句區(qū)別一個(gè)程序經(jīng)匯編,連接和裝入內(nèi)存后,在執(zhí)行程序之前:一個(gè)程序經(jīng)匯編,連接和裝入內(nèi)存后,在執(zhí)行程序之前:指示性語(yǔ)句的功能已經(jīng)完成,故又稱偽操作。指示性語(yǔ)句的功能已經(jīng)完成,故又稱偽操作。而指令性語(yǔ)句的功
16、能尚未完成,需控制而指令性語(yǔ)句的功能尚未完成,需控制CPU去執(zhí)行,才能完成。去執(zhí)行,才能完成。aaSEGMENT;數(shù)據(jù)段數(shù)據(jù)段1str1DBHello!aaENDSbbSEGMENT;數(shù)據(jù)段數(shù)據(jù)段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;查看數(shù)據(jù)段查看數(shù)據(jù)段1的內(nèi)容的內(nèi)容129E:000048656
18、C6C6F210000-0000000000000000Hello!.-D129F:0L10;查看數(shù)據(jù)段查看數(shù)據(jù)段2的內(nèi)容的內(nèi)容129F:00000000000000000000-0000000000000000.- -數(shù)據(jù)傳送源程序數(shù)據(jù)傳送源程序hello2.asm程序經(jīng)匯編、連接后,裝入內(nèi)存的情況如下:程序經(jīng)匯編、連接后,裝入內(nèi)存的情況如下:常用偽操作介紹常用偽操作介紹一、一、程序開始和結(jié)束程序開始和結(jié)束二、二、段定義段定義三、三、變量定義變量定義四、四、ASSUME語(yǔ)句語(yǔ)句五、五、表達(dá)式中的操作符表達(dá)式中的操作符六、六、過(guò)程定義過(guò)程定義七、七、等值定義等值定義一一、模塊定義和程序結(jié)束偽操
19、作模塊定義和程序結(jié)束偽操作1.NAME和和TITLE偽操作偽操作格式格式NAME模塊名模塊名格式格式TITLE模塊名模塊名在源程序開始可用在源程序開始可用NAME或或TITLE為模塊命名為模塊命名,模塊名的作用是指示給連接程序進(jìn)行連接用。模塊名的作用是指示給連接程序進(jìn)行連接用。源程序中可無(wú)模塊定義,此時(shí)源文件名作為模塊名。源程序中可無(wú)模塊定義,此時(shí)源文件名作為模塊名。 2.END偽操作偽操作格式格式END啟動(dòng)地址啟動(dòng)地址作用是指示源程序到此結(jié)束。作用是指示源程序到此結(jié)束。匯編程序?qū)R編程序?qū)ND之后的語(yǔ)句不進(jìn)行處理。之后的語(yǔ)句不進(jìn)行處理。程序中所有有效語(yǔ)句應(yīng)放在程序中所有有效語(yǔ)句應(yīng)放在END
20、語(yǔ)句之前。語(yǔ)句之前。源程序中必須有源程序中必須有END結(jié)束語(yǔ)句。結(jié)束語(yǔ)句。匯編程序?qū)o(wú)匯編程序?qū)o(wú)END語(yǔ)句的源程序不進(jìn)行處理語(yǔ)句的源程序不進(jìn)行處理,只給出無(wú)只給出無(wú)END語(yǔ)句錯(cuò)誤信息。語(yǔ)句錯(cuò)誤信息。假設(shè)假設(shè)TEST.asm是一個(gè)無(wú)是一個(gè)無(wú)END語(yǔ)句的匯編語(yǔ)言源程序。語(yǔ)句的匯編語(yǔ)言源程序。其匯編結(jié)果如下其匯編結(jié)果如下:D:MASM TEST; Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.EndoffileencounteredoninputfileEndoff
21、ileencounteredoninputfile49968+421181Bytessymbolspacefree0WarningErrors0SevereErrorsD:由于沒(méi)有由于沒(méi)有END語(yǔ)句,匯編程序根本沒(méi)對(duì)源程序進(jìn)行匯編,語(yǔ)句,匯編程序根本沒(méi)對(duì)源程序進(jìn)行匯編,此時(shí)顯示警告性錯(cuò)誤總數(shù)為此時(shí)顯示警告性錯(cuò)誤總數(shù)為0,嚴(yán)重性錯(cuò)誤總數(shù)為,嚴(yán)重性錯(cuò)誤總數(shù)為0,用戶不要被此值的誤導(dǎo)用戶不要被此值的誤導(dǎo)。啟動(dòng)地址可是一個(gè)標(biāo)號(hào)或過(guò)程名啟動(dòng)地址可是一個(gè)標(biāo)號(hào)或過(guò)程名,指示程序的入口。指示程序的入口。程序裝入內(nèi)存后,系統(tǒng)跳轉(zhuǎn)到入口處程序裝入內(nèi)存后,系統(tǒng)跳轉(zhuǎn)到入口處,開始執(zhí)行程序。開始執(zhí)行程序。aaSEGME
22、NT;數(shù)據(jù)段數(shù)據(jù)段1str1DBHello!aaENDSbbSEGMENT;數(shù)據(jù)段數(shù)據(jù)段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;查看數(shù)據(jù)段查看數(shù)據(jù)段1的內(nèi)容的內(nèi)容129D:000048656C6C6F210000-0000000000000000Hello!.- -D129
24、e:0l10;查看數(shù)據(jù)段查看數(shù)據(jù)段2的內(nèi)容的內(nèi)容129E:00000000000000000000-0000000000000000.- -二、段定義偽操作二、段定義偽操作格式格式段名段名SEGMENT、段名段名ENDS段定義由偽操作段定義由偽操作SEGMENT開始開始、ENDS結(jié)束結(jié)束。其中:其中:SEGMENT和和ENDS必須成對(duì)出現(xiàn),必須成對(duì)出現(xiàn),且語(yǔ)句前必須有段名,且語(yǔ)句前必須有段名,段名必須相同段名必須相同。SEGMENT和和ENDS語(yǔ)句之間可以有指令和其他偽操作語(yǔ)句之間可以有指令和其他偽操作,表示存放在該段內(nèi)存的變量、指令或其他偽操作對(duì)該段內(nèi)存的處理表示存放在該段內(nèi)存的變量、指令或
25、其他偽操作對(duì)該段內(nèi)存的處理程序中可以定義多個(gè)段。程序中可以定義多個(gè)段。程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值。程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值。aaSEGMENT;數(shù)據(jù)段數(shù)據(jù)段1str1DBHello!aaENDSbbSEGMENT;數(shù)據(jù)段數(shù)據(jù)段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;查看數(shù)據(jù)段查看數(shù)據(jù)段1的內(nèi)容的內(nèi)容129E:000048656C6C6F210000-0000000000000000Hello!.-D129F:0L10;查看數(shù)據(jù)段查看數(shù)據(jù)段2的內(nèi)容的內(nèi)容129F:00000000000000000000-0000000000000000.- -數(shù)據(jù)傳送源程序:程序經(jīng)匯編、連接后,裝入內(nèi)存的情況如下:數(shù)據(jù)傳送源程序:程序經(jīng)匯編、連接后,裝入內(nèi)存的情況如下:三、變量定義偽操作三、變量定義偽操作格式格式變量名變量名類型助記符類型助記符操作數(shù)操作數(shù),操作數(shù)操作數(shù),.用來(lái)定義程序中所用的內(nèi)存操作數(shù)。用來(lái)定義程序中所用的內(nèi)存操作數(shù)。其中其中變量名變量名指
28、示內(nèi)存操作數(shù)的地址(符號(hào)地址)指示內(nèi)存操作數(shù)的地址(符號(hào)地址)類型助記符類型助記符指示內(nèi)存操作數(shù)的類型指示內(nèi)存操作數(shù)的類型(字節(jié)、字、雙字等字節(jié)、字、雙字等)操作數(shù)操作數(shù)指示內(nèi)存操作數(shù)的內(nèi)容指示內(nèi)存操作數(shù)的內(nèi)容匯編程序?qū)⒍x的操作數(shù),按其類型分配內(nèi)存單元數(shù)匯編程序?qū)⒍x的操作數(shù),按其類型分配內(nèi)存單元數(shù),順序存入變量名指向的內(nèi)存單元中。順序存入變量名指向的內(nèi)存單元中。常用的類型助記符有:常用的類型助記符有:DB指示其后的操作數(shù)為字節(jié)類型指示其后的操作數(shù)為字節(jié)類型DW指示其后的操作數(shù)為字類型指示其后的操作數(shù)為字類型DD指示其后的操作數(shù)為雙字類型指示其后的操作數(shù)為雙字類型例例1:定義賦初值的變量定義
29、賦初值的變量dataSEGMENTxxDB1,-1,0fcHyyDW1,-1,0fcHzzDD1,-1,0fcHdataENDSxxyyzz01FFFC0100FFFFFC0001000000FFFFFFFFFC0000001- -1FC1- -1FC1- -1FC例例2:定義字符串變量定義字符串變量(只能用只能用DB定義定義)dataSEGMENTstr1DBTsingHuastr2DBINPUT:,0dH,0aH,$dataENDS注意注意:3個(gè)及其以上的字符,個(gè)及其以上的字符,只能用只能用DB定義定義str1DWabcdstr2DDabcdstr1str25473696e67487561
30、494e5055543a0d0a24TsingHuaINPUT:0dH0aH$操作數(shù)可以是用操作數(shù)可以是用常量、表達(dá)式和常量、表達(dá)式和?表示。表示。常量和表達(dá)式常量和表達(dá)式表示內(nèi)存操作數(shù)的初始值表示內(nèi)存操作數(shù)的初始值,其值應(yīng)在其定義的類型范圍內(nèi),否則匯編出錯(cuò)。其值應(yīng)在其定義的類型范圍內(nèi),否則匯編出錯(cuò)。例例aaDB270bbDW80000用用?表示不置初始值的內(nèi)存操作數(shù)。表示不置初始值的內(nèi)存操作數(shù)。例例ccDB?可用可用DUP復(fù)制操作符復(fù)制操作符定義相同的操作數(shù),其格式為定義相同的操作數(shù),其格式為重復(fù)次數(shù)重復(fù)次數(shù)DUP(操作數(shù)操作數(shù))例例eeDB3DUP(4)等價(jià)于等價(jià)于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中的一個(gè)中的一個(gè)段名段名為用偽操作為用偽操作SEGMENT定義過(guò)的段名定義過(guò)的段名例例 A
34、SSUMECS:cc,DS:aaASSUME偽操作的作用偽操作的作用指示匯編程序指令中用到的標(biāo)號(hào)、過(guò)程及變量所在的段。指示匯編程序指令中用到的標(biāo)號(hào)、過(guò)程及變量所在的段。其中其中對(duì)標(biāo)號(hào)、過(guò)程必須用對(duì)標(biāo)號(hào)、過(guò)程必須用CS段寄存器指示段寄存器指示對(duì)變量可用對(duì)變量可用CS、DS、ES、SS段寄存器指示段寄存器指示若未用若未用ASSUME語(yǔ)句指示指令中用到的標(biāo)號(hào)、語(yǔ)句指示指令中用到的標(biāo)號(hào)、過(guò)程和變量所在的段過(guò)程和變量所在的段,匯編程序?qū)⒔o出錯(cuò)誤信息。匯編程序?qū)⒔o出錯(cuò)誤信息。ASSUME語(yǔ)句只起指示作用,并無(wú)實(shí)際的操作。語(yǔ)句只起指示作用,并無(wú)實(shí)際的操作。在程序中引用定義的變量做內(nèi)存操作數(shù)時(shí),在程序中引用定
35、義的變量做內(nèi)存操作數(shù)時(shí),需按尋址方式用傳送指令(如需按尋址方式用傳送指令(如MOV)給相應(yīng)的段寄存器賦值給相應(yīng)的段寄存器賦值。例例用程序?qū)崿F(xiàn)用程序?qū)崿F(xiàn)1234H+5678Hvalueresult341278560000dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給給DS賦值賦值MOVDS,AXMOVAX,value;取數(shù)取數(shù)ADDAX,value+2;兩數(shù)相加兩數(shù)相加MOVresult,AX;保存結(jié)果保存結(jié)果MOVAH,4CH;返回返回DOSINT2
36、1HcodeENDSENDstart注釋掉注釋掉ASSUME語(yǔ)句,其匯編結(jié)果:語(yǔ)句,其匯編結(jié)果: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語(yǔ)句,經(jīng)匯編,連接和裝入內(nèi)存后的情況
38、:語(yǔ)句,經(jīng)匯編,連接和裝入內(nèi)存后的情況:dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給給DS賦值賦值MOVDS,AXMOVAX,value;取數(shù)取數(shù)ADDAX,value+2;兩數(shù)相加兩數(shù)相加MOVresult,AX;保存結(jié)果保存結(jié)果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;查看在內(nèi)存的程序查看在內(nèi)存的程序12A6:0000B8A512MOVAX,12A512A6:00038ED8MOVDS,AX12A6:0005A10000MOVAX,000012A6:000803060200ADDAX,000212A6:000CA30400MOV0004,AX12A6:000FB44CMOVAH,4C12A6:0011CD21INT21、-注意:注意: 程序裝入內(nèi)存后
40、,執(zhí)行程序前,程序裝入內(nèi)存后,執(zhí)行程序前,當(dāng)前的當(dāng)前的DS值并非程序定義的值并非程序定義的data段值,段值,1295不等于不等于12A5思考:思考:如果上例中沒(méi)有如果上例中沒(méi)有MOVDS,AX程序執(zhí)行的結(jié)果會(huì)怎樣?程序執(zhí)行的結(jié)果會(huì)怎樣?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; ;查看在內(nèi)存的程序查看在內(nèi)存的程序12A6:0000B8A512MOVAX,12A512A6:0003A10000MOVAX,000012A6:000603060200ADDAX,000212A6:000AA30400MOV0004,AX12A6:000DB44CMOVAH,4C12A6:000FCD21INT21、dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給給DS賦值賦值;MOVDS,AXMOVAX,value;取數(shù)取數(shù)ADDAX,
42、value+2;兩數(shù)相加兩數(shù)相加MOVresult,AX;保存結(jié)果保存結(jié)果MOVAH,4CH;返回返回DOSINT21HcodeENDS結(jié)論:結(jié)論:1.ASSUME語(yǔ)句只起指示作用語(yǔ)句只起指示作用,沒(méi)有賦值作用沒(méi)有賦值作用2.程序中用到內(nèi)存操作數(shù)時(shí),程序中用到內(nèi)存操作數(shù)時(shí),應(yīng)按操作數(shù)的尋址方式應(yīng)按操作數(shù)的尋址方式,給相應(yīng)的段寄存器賦值給相應(yīng)的段寄存器賦值。第三節(jié)第三節(jié)指示性語(yǔ)句指示性語(yǔ)句/第四節(jié)第四節(jié)匯編語(yǔ)言程序舉例匯編語(yǔ)言程序舉例一、一、程序開始和結(jié)束程序開始和結(jié)束二、二、段定義段定義三、三、變量定義變量定義四、四、ASSUME語(yǔ)句語(yǔ)句匯編語(yǔ)言程序匯編語(yǔ)言程序舉例一舉例一了解了解DOS的返回
43、,裝入功能的返回,裝入功能五、五、表達(dá)式及表達(dá)式中的操作符表達(dá)式及表達(dá)式中的操作符匯編語(yǔ)言程序例二匯編語(yǔ)言程序例二六、六、過(guò)程定義過(guò)程定義(第五節(jié)程序設(shè)計(jì)介紹第五節(jié)程序設(shè)計(jì)介紹)七、七、等值定義等值定義(第五節(jié)程序設(shè)計(jì)介紹第五節(jié)程序設(shè)計(jì)介紹)匯編語(yǔ)言程序例三匯編語(yǔ)言程序例三(第五節(jié)程序設(shè)計(jì)介紹第五節(jié)程序設(shè)計(jì)介紹)匯編語(yǔ)言程序匯編語(yǔ)言程序舉例一舉例一例例將將BL寄存器的內(nèi)容按二進(jìn)制形式顯示出來(lái)寄存器的內(nèi)容按二進(jìn)制形式顯示出來(lái)10100110(BL)MOVCX,8;顯示字符個(gè)數(shù)為顯示字符個(gè)數(shù)為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;調(diào)用調(diào)用DOS功能顯示功能顯示DECCX;循環(huán)次數(shù)減循環(huán)次數(shù)減1JNZnext;判斷是否結(jié)束判斷是否結(jié)束 、3130313030313130codeSEGMENTASSUMECS:codestart:.codeENDSENDstartMOVCX,8;顯示字符個(gè)數(shù)為顯示字符個(gè)數(shù)為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;調(diào)用調(diào)用DOS功能顯示功能顯示DECCX;循環(huán)次數(shù)減循環(huán)次數(shù)減1JNZnext;判斷是否結(jié)束判斷是否結(jié)束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請(qǐng)猜想執(zhí)行的結(jié)果?請(qǐng)猜想執(zhí)行的結(jié)果?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用戶程序用戶程序與用戶程序相連的與用戶程序相連的內(nèi)存內(nèi)容被看作內(nèi)
48、存內(nèi)容被看作程序時(shí)程序時(shí)死機(jī)死機(jī)復(fù)習(xí)復(fù)習(xí)DOS系統(tǒng)的啟動(dòng)過(guò)程系統(tǒng)的啟動(dòng)過(guò)程執(zhí)行用戶程序后,執(zhí)行用戶程序后,若要返回若要返回DOS狀態(tài),狀態(tài),即在屏幕上出現(xiàn)即在屏幕上出現(xiàn)DOS提示符,提示符,等待輸入新的命令,等待輸入新的命令,應(yīng)在用戶程序的最后安排應(yīng)在用戶程序的最后安排完成此功能的程序段。完成此功能的程序段。F FF FF FF F: :0 00 00 00 0H H1243?ROM系系統(tǒng)統(tǒng)檢檢測(cè)測(cè)程程序序IO.SYS模模塊塊COMMAND.COMMSDOS.SYS模模塊塊用用戶戶程程序序空空 間間引引導(dǎo)導(dǎo)程程序序1KB 中中斷斷向向量量表表RAM內(nèi)內(nèi) 存存ROM BIOSDOSIO.SYSC
49、OMMAND.COMMSDOS.SYS引引導(dǎo)導(dǎo)程程序序磁磁 盤盤EDIT.EXEMASM.EXELINK.EXEDEBUG.exe應(yīng)應(yīng)用用程程序序其其他他系系統(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通常采用調(diào)用通常采用調(diào)用DOS系統(tǒng)功能完成系統(tǒng)功能完成。調(diào)用調(diào)用DOS系統(tǒng)的系統(tǒng)的4CH功能功能,返回返回DOS方法:方法:在要返回在要返回DOS處,安排指令:處,安排指令:MOVAH,4CHINT21H執(zhí)行完執(zhí)行完4CH的功能調(diào)用,即返回的功能調(diào)用,即返回DOS。例
50、例codeSEGMENTASSUMECS:codestart:、;程序主體部分程序主體部分、MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstartcodeSEGMENTASSUMECS:codestart:.MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstartMOVCX,8;顯示字符個(gè)數(shù)為顯示字符個(gè)數(shù)為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;調(diào)用調(diào)用DOS功能顯示功能顯示DECCX;循環(huán)次數(shù)減循環(huán)次數(shù)減1JNZnext;判斷是否結(jié)束判斷是否結(jié)束MOVBL,53H;設(shè)置一個(gè)測(cè)試設(shè)置一個(gè)測(cè)試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一個(gè)完整匯編程序的基本框架一個(gè)完整匯編程序的基本框架:DOS的裝入功能的裝入功能(又稱又稱EXEC系統(tǒng)功能系統(tǒng)功能)l可執(zhí)行文件
54、可執(zhí)行文件.exe,應(yīng)裝入內(nèi)存方能執(zhí)行。應(yīng)裝入內(nèi)存方能執(zhí)行。由由DOS的裝入功能完成。的裝入功能完成。l在在DOS的提示符后輸入可執(zhí)行文件的文件名,的提示符后輸入可執(zhí)行文件的文件名,按回車鍵,按回車鍵,DOS系統(tǒng)即調(diào)用裝入功能系統(tǒng)即調(diào)用裝入功能,將可執(zhí)行程序裝入內(nèi)存。將可執(zhí)行程序裝入內(nèi)存。內(nèi)內(nèi) 存存256KB ROM0000:0000H0040:0000H A000:0000H C800:0000H FE00:0000HFE00:1FFFH H640KB RAM 基基本本內(nèi)內(nèi)存存顯顯示示器器顯顯示示緩緩存存區(qū)區(qū)ROM BIOS系系統(tǒng)統(tǒng)檢檢測(cè)測(cè)程程序序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)程程序序磁磁 盤盤應(yīng)應(yīng)用用程程序序IO.SYSCOMMAND.COMMSDOS.SYS引引導(dǎo)導(dǎo)程程序序EDIT.EXEMASM.EXELINK.EXEDEBUG.exehello.asmhello.objhello.exescans.asmscans.objscans.exe完成以下操作:完成以下操作:確定內(nèi)存可用部分確定內(nèi)存可用部分,以便存放要執(zhí)行的以便存放要執(zhí)行的
56、.exe文件。文件。建立程序段前綴建立程序段前綴PSP(ProgramSegmentPrefix) 程序段前綴大小程序段前綴大小100H,即即256個(gè)字節(jié)。個(gè)字節(jié)。存放進(jìn)程間的控制信息。存放進(jìn)程間的控制信息。PSP最開始的兩個(gè)字節(jié)最開始的兩個(gè)字節(jié)CD20,是一條是一條INT20H指令。指令。裝入可執(zhí)行程序裝入可執(zhí)行程序.exe0000:0000H可可用用內(nèi)內(nèi)存存空空間間內(nèi)內(nèi) 存存FFFF:0000HROM BIOS系系統(tǒng)統(tǒng)檢檢測(cè)測(cè)程程序序 COMMAND.COMDOS 系系統(tǒng)統(tǒng)1KB 中中斷斷向向量量表表 CD20 、 、 、 、 、 、 、 、 、 hello.exexxxx:0000Hxx
57、xx:00FFH程程序序段段前前綴綴用用戶戶程程序序DOS的裝入功能的裝入功能修改以下寄存器的值修改以下寄存器的值DS、ES設(shè)置為設(shè)置為程序段前綴所在內(nèi)存的段值;程序段前綴所在內(nèi)存的段值;(DS)=xxxxH(ES)=xxxxHSS、SP設(shè)置為設(shè)置為由連接程序傳過(guò)來(lái)的值;由連接程序傳過(guò)來(lái)的值;CS、IP設(shè)置為設(shè)置為程序的入口地址,程序的入口地址,即偽操作即偽操作END后跟的后跟的符號(hào)名對(duì)應(yīng)的物理地址;符號(hào)名對(duì)應(yīng)的物理地址;此時(shí)此時(shí)CS:IP指向用戶程序,指向用戶程序,開始執(zhí)行用戶程序。開始執(zhí)行用戶程序。0000:0000H可可用用內(nèi)內(nèi)存存空空間間內(nèi)內(nèi) 存存FFFF:0000HROM BIOS系
58、系統(tǒng)統(tǒng)檢檢測(cè)測(cè)程程序序 COMMAND.COMDOS 系系統(tǒng)統(tǒng)1KB 中中斷斷向向量量表表 CD20 、 、 、 、 、 、 、 、 、 hello.exexxxx:0000Hxxxx:00FFH程程序序段段前前綴綴CS:IPD:DEBUGShowBL.exe-R ; ;查看當(dāng)前寄存器內(nèi)容查看當(dāng)前寄存器內(nèi)容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 ; ;查看此時(shí)數(shù)據(jù)段內(nèi)容查看此時(shí)數(shù)據(jù)段內(nèi)容( (程序段前綴程序段前綴) )0B51:0000CD20FF9F009AF0FE-1DF04F035A058A030B51:00105A0517035A054905-0101010002FFFFFF-UDS:0L5 ; ;反匯編當(dāng)前數(shù)據(jù)段內(nèi)容反匯編當(dāng)前數(shù)據(jù)段內(nèi)容( (程序段前綴程序段前綴) )0B51:0000CD20INT200B51:0002FF9F009A
60、CALLFARBX+9A00-在在DEBUG下查看下查看ShowBL.exe的裝入情況的裝入情況: :-R ; ;查看當(dāng)前寄存器內(nèi)容查看當(dāng)前寄存器內(nèi)容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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024裝飾工程合同書范本
- 2024深圳市動(dòng)產(chǎn)拍賣行委托拍賣合同
- 2024學(xué)校臨時(shí)工合同書
- 2024年衛(wèi)星通信傳輸系統(tǒng)項(xiàng)目發(fā)展計(jì)劃
- 2024小產(chǎn)權(quán)合作建房合同范本
- 2024年三元催化凈化器項(xiàng)目合作計(jì)劃書
- 2024茶葉銷售合同范本
- 2024新運(yùn)輸合同格式
- 2024年礦山生態(tài)修復(fù)項(xiàng)目發(fā)展計(jì)劃
- 2024年地面發(fā)控系統(tǒng)設(shè)備項(xiàng)目建議書
- 水壓試驗(yàn)報(bào)告(帶曲線圖)
- Units68單元大單元教學(xué)設(shè)計(jì)課件英語(yǔ)七年級(jí)上冊(cè)
- 2023年CSCO尿路上皮癌診療指南
- 在高三學(xué)生月考總結(jié)表彰會(huì)上的講話
- 高價(jià)值醫(yī)療設(shè)備產(chǎn)品定價(jià)過(guò)程
- 保險(xiǎn)行業(yè)創(chuàng)說(shuō)會(huì)-課件
- 初中語(yǔ)文-江城子·密州出獵蘇軾教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 壓裂隊(duì)安全管理制度
- -讓生活更美好 作文批改評(píng)語(yǔ)
- 超星爾雅《百年風(fēng)流人物:曾國(guó)藩》課程完整答案
- 離線論文 關(guān)于科學(xué)思維方法在實(shí)際生活和工作中的應(yīng)用、意義
評(píng)論
0/150
提交評(píng)論