亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

第一個匯編程序

2024-06-28 13:23:06
字體:
來源:轉載
供稿:網友
第一個匯編程序

本文將開始編寫完整的匯編語言程序,用編譯器將它們編譯成為可執行文件(如:*.exe文件),在操作系統中運行。

本文地址:http://www.CUOXin.com/archimedes/p/assembly-first-PRogram.html,轉載請注明源地址。

1、一個源程序從寫出到執行的過程一個匯編語言程序從寫出到最終執行的簡要過程:

編寫--〉編譯--〉連接--〉執行

使用文本編輯器(如Edit、記事本等),用匯編語言編寫匯編源程序。使用匯編語言編譯程序對源程序文件中的源程序進行編譯,產生目標文件;再用連接程序對目標文件進行連接,生成可在操作系統中直接運行的可執行文件。可執行文件中包含兩部分內容:程序(從原程序中的匯編指令翻譯過來的機器碼)和數據(源程序中定義的數據)相關的描述信息(比如:程序有多大、要占多少內存空間等)在操作系統中,執行可執行文件中的程序。操作系統依照可執行文件中的描述信息,將可執行文件中的機器碼和數據加載入內存,并進行相關的初始化(比如:設置CS:ip指向第一條要執行的指令),然后由CPU執行程序。2、源程序

先看一段代碼:

assum cs:codesgcodesg segmentstart: mov ax,0123H          mov bx,0456H          add ax,bx          add ax,ax          mov ax,4c00h          int 21hcodesg endsend
segment和ends是一對成對使用的偽指令,這是在寫可被編譯器編譯的匯編程序時,必須要用到的一對偽指令。segment和ends的功能是定義一個段,segment說明一個段開始,ends 說明一個段結束。一個段必須有一個名稱來標識,使用格式為:

段名 segment

段名 ends

一個匯編程序是由多個段組成的,這些段被用來存放代碼、數據或當作??臻g來使用。一個有意義的匯編程序中至少要有一個段,這個段用來存放代碼。end 是一個匯編程序的結束標記,編譯器在編譯匯編程序的過程中,如果碰到了偽指令 end,就結束對源程序的編譯。如果程序寫完了,要在結尾處加上偽指令end 。否則,編譯器在編譯程序時,無法知道程序在何處結束。注意:不要搞混了end和ends。nassume:含義為“假設”。它假設某一段寄存器和程序中的某一個用 segment … ends 定義的段相關聯。通過assume說明這種關聯,在需要的情況下 ,編譯程序可以將段寄存器和某一個具體的段相聯系。程序經編譯連接后變為機器碼:標號:一個標號指代了一個地址。codesg:放在segment的前面,作為一個段的名稱,這個段的名稱最終將被編譯、連接程序處理為一個段的段地址。任務:編程運算 2^3
assume cs:abcabc segmentmov ax,2add ax,axadd ax,axabc endsend 

應該在程序的末尾添加返回的程序段。

mov ax,4c00Hint 21H

這兩條指令所實現的功能就是程序返回。

3、編輯源程序

進入DOS方式,運行edit,在其中編輯程序,如下圖所示:

4、編譯

進入DOS方式,進入 C:/masm 目錄,運行masm.exe。如果源程序文件不是以 asm 為擴展名的話,就要輸入它的全名。比如p1.txt。在輸入源程序文件名的時候一定要指明它所在的路徑。如果文件就在當前路徑下,只輸入文件名就可以。

輸入要編譯的源文件文件名后,按 Enter鍵。目標文件(*.obj)是我們對一個源程序進行編譯要得到的最終結果。編譯程序默認要輸出的目標文件名為1.obj,所以可以不必再另行指定文件名。

編譯程序提示輸入交叉引用文件的名稱。

這個文件同列表文件一樣,是編譯器將源程序編譯為目標文件過程中產生的中間結果??梢圆簧蛇@個文件,直接按 Enter 鍵即可。

一般來說,有兩類錯誤使我們得不到所期望的目標文件:

(1)我們程序中有“Severe Errors”;

(2)找不到所給出的源程序文件。

5、連接

在對源程序進行編譯得到目標文件后,我們需要對目標文件進行連接,從而得到可執行文件。繼續上面的過程,我們再將C:/masm/1.obj連接為C:/masm/1.exe。

進入DOS方式,進入C:/masm目錄,運行link.exe。如果目標文件不是以obj為擴展名的話,就要輸入它的全名。比如:p1.bin。在輸入目標文件名的時候,要注意指明它所在的路徑。這里,我們要連接的文件是當前路徑下1.obj,所以此處輸入“1”。

輸入要連接的目標文件名后,按Enter鍵??蓤绦形募俏覀儗σ粋€程序進行連接要得到的最終結果。連接程序默認要輸出的可執行文件名為 1.EXE ,所以可以不必再另行指定文件名。我們直接按 Enter 鍵,使用連接程序設定的可執行文件名。

映像文件是連接程序將目標文件連接為可執行文件過程中產生的中間結果。可以不生成這個文件,直接按 Enter 鍵即可。

連接程序提示輸入庫文件的名稱。

庫文件里包含了一些可以調用的子程序,如果我們的程序中調用了某一個庫文件中的子程序,就需要在連接的時候,將這個庫文件和我們的目標文件連接到一起,生成可執行文件。

如果沒有調用任何子程序,直接按Enter鍵即可。

連接的作用:

當源程序很大時,可以將它分為多個源程序文件來編譯,每個源程序編譯成為目標文件后,再用連接程序將它們連接到一起,生成一個可執行文件;

程序中調用了某個庫文件中的子程序,需要將這個庫文件和該程序生成的目標文件連接到一起,生成一個可執行文件;

一個源程序編譯后,得到了存有機器碼的目標文件,目標文件中的有些內容還不能直接用來生成可執行文件,連接程序將這此內容處理為最終的可執行信息。

所以,在只有一個源程序文件,而又不需要調用某個庫中的子程序的情況下,也必須用連接程序對目標文件進行處理,生成可執行文件。

6、以簡化的方式進行編譯和連接

我們編譯、連接的最終目的是用源程序文件生成可執行文件。在這個過程中所產生的中間文件都可以忽略。我們可以用一種較為簡捷的方式進行編譯、連接。

編譯:

連接:

7、1.exe的執行

現在,終于將我們的第一個匯編程序加工成了一個可在操作系統下執行的程序文件。1.exe的執行情況:

我們的程序沒有像顯示器輸出任何信息。程序只是做了一些將數據送入寄存器和加法的操作,而這些事情,我們不可能從顯示屏上看出來。程序執行完成后,返回,屏幕上再次出現操作系統的提示符。

8、可執行文件中的程序裝入內存并運行的原理

DOS中有一個程序command.com ,這個程序在 DOS 中稱為命令解釋器,也就是DOS系統的shell。

(1)我們在DOS中直接執行 1.exe 時,是正在運行的command將1.exe中的程序加載入內存。

(2)command設置CPU的CS:IP指向程序的第一條指令(即程序的入口),從而使程序得以運行。

(3)程序運行結束后,返回到command中,CPU繼續運行command。

匯編程序從寫出到執行的過程:

9、程序執行過程的跟蹤

為了觀察程序的運行過程 ,我們可以使用Debug。

Debug 可以將程序加載入內存,設置CS:IP指向程序的入口,但Debug并不放棄對CPU 的控制,這樣,我們就可以使用Debug 的相關命令來單步執行程序 ,查看每條指令指令的執行結果。

EXE文件中的程序的加載過程:

總結:

程序加載后,ds中存放著程序所在內存區的段地址,這個內存區的偏移地址為 0 ,則程序所在的內存區的地址為:ds:0;這個內存區的前256 個字節中存放的是PSP,dos用來和程序進行通信。

從 256字節處向后的空間存放的是程序。所以,我們從ds中可以得到PSP的段地址SA,PSP的偏移地址為 0,則物理地址為SA×16+0。

因為PSP占256(100H)字節,所以程序的物理地址是:

SA×16+0+256= SA×16+16×16=(SA+16)×16+0

可用段地址和偏移地址表示為:SA+10:0

用U命令查看一下其他指令:

用T命令但不執行程序中的每一條指令,并觀察每條指令的執行結果,到了 int 21,我們要用P命令執行:

int 21 執行后,顯示“Program terminated normally”,返回到Debug中。表示程序正常結束。

注意,要使用P命令執行int 21。

參考資料

《匯編語言》--王爽


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看欧美www| 久久久精品一区二区三区| 成人国产精品日本在线| 久久久97精品| 欧美日韩免费网站| 亚洲欧美国产另类| 欧美最猛性xxxxx(亚洲精品)| 欧美视频精品一区| 国产成一区二区| 亚洲精品资源美女情侣酒店| 午夜精品久久久久久久99黑人| 国产精品黄色影片导航在线观看| 日韩人在线观看| 国内免费久久久久久久久久久| 日韩有码在线观看| 国产亚洲日本欧美韩国| 亚洲福利在线播放| 精品国产31久久久久久| 国产成人免费av| 国产日韩换脸av一区在线观看| 中文字幕综合在线| 日韩av免费网站| 欧美刺激性大交免费视频| 日韩电影在线观看中文字幕| 国产精品一久久香蕉国产线看观看| 成人高h视频在线| 日本中文字幕不卡免费| 在线精品高清中文字幕| 精品国产一区二区三区四区在线观看| 97成人在线视频| 国产精品精品一区二区三区午夜版| www.欧美视频| 国产精品视频网站| 亚洲一品av免费观看| 亚洲成人网av| 中文字幕日韩欧美在线| 91精品国产综合久久男男| 成人精品视频99在线观看免费| 亚洲图片制服诱惑| 精品五月天久久| 亚洲国产毛片完整版| 色综合天天狠天天透天天伊人| 精品日韩视频在线观看| 性金发美女69hd大尺寸| 欧美日韩一区二区三区在线免费观看| 北条麻妃久久精品| 欧美成人精品不卡视频在线观看| 日韩欧美在线国产| 丝袜情趣国产精品| 亚洲欧美一区二区三区久久| 中文字幕欧美专区| 亚洲精品国产精品乱码不99按摩| 久久久女女女女999久久| 欧美日韩国产黄| 日韩av电影国产| 亚洲欧美日韩另类| 91av在线视频观看| 亚洲在线www| 久久久综合免费视频| 欧美黄色成人网| 日韩欧美国产中文字幕| 日韩在线观看免费高清完整版| 欧洲成人免费视频| 欧美日韩亚洲一区二| 在线观看国产精品91| 亚洲肉体裸体xxxx137| 日韩成人小视频| 国产精品高潮呻吟久久av无限| 国产在线精品一区免费香蕉| 日韩av手机在线看| 亚洲自拍另类欧美丝袜| 亚洲高清久久久久久| 91香蕉嫩草神马影院在线观看| 国产午夜精品全部视频在线播放| 成人性生交xxxxx网站| 中文日韩在线观看| 91爱视频在线| 久久99久久亚洲国产| 久久久女人电视剧免费播放下载| 国产一区二区三区免费视频| 亚洲国产精品va在线观看黑人| 欧美激情精品久久久久久大尺度| 中文精品99久久国产香蕉| 国产精品高潮呻吟久久av野狼| 日韩av在线免费观看一区| 日韩电影视频免费| 日韩视频亚洲视频| 中文字幕av日韩| 久久精视频免费在线久久完整在线看| 国产精品r级在线| 91网站免费观看| 国产精品久久久久久婷婷天堂| 亚洲欧洲一区二区三区在线观看| 欧美精品在线观看91| 日韩在线欧美在线| 亚洲国产精品99| 国产精品一区二区三区毛片淫片| 在线观看日韩www视频免费| 亚洲欧美国产va在线影院| 国产精品第2页| 成人国产精品av| 亚洲大胆美女视频| 欧美精品在线看| 日本国产一区二区三区| 色综合久久久888| 亚洲国产精品99| 日韩经典中文字幕在线观看| 亚洲一区二区三区四区在线播放| 亚洲国产日韩欧美综合久久| 亚洲精品videossex少妇| 中文欧美在线视频| 国产精品美乳在线观看| 韩国精品美女www爽爽爽视频| 国产成人avxxxxx在线看| 日韩精品亚洲视频| 亚洲视频日韩精品| 亚洲第一区在线观看| 欧美国产日韩二区| 夜夜躁日日躁狠狠久久88av| 96sao精品视频在线观看| 欧美视频在线观看免费| 国产成人综合亚洲| 理论片在线不卡免费观看| 欧美激情第6页| 国产亚洲aⅴaaaaaa毛片| 成人国产精品日本在线| 色综久久综合桃花网| 成人亚洲综合色就1024| 亚洲精品美女免费| 成人激情在线播放| 亚洲视频电影图片偷拍一区| www日韩中文字幕在线看| 国产精品入口日韩视频大尺度| 欧美性猛交丰臀xxxxx网站| 亚洲成人亚洲激情| 日韩av在线免费| 欧美日韩国产精品一区二区三区四区| 美乳少妇欧美精品| 国产精品日日摸夜夜添夜夜av| 亚洲综合第一页| xvideos亚洲人网站| 国产精品欧美日韩久久| 热门国产精品亚洲第一区在线| 日韩av在线天堂网| 久久久久国产视频| 成人国产精品日本在线| 亚洲欧美在线磁力| 久久手机免费视频| 搡老女人一区二区三区视频tv| 91极品女神在线| 91精品国产高清久久久久久久久| 国产精品狼人色视频一区| 亚洲精品久久久久久久久久久| 欧美日韩午夜剧场| 国产在线久久久| 亚洲人成77777在线观看网| 亚洲欧美激情一区| 一本色道久久88亚洲综合88| 欧美成人免费全部观看天天性色| 日韩动漫免费观看电视剧高清| 国产成人精品在线播放| 国模精品视频一区二区三区| 成人福利在线视频| 成人在线一区二区|