日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言学习——第四章 第一个汇编程序

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言学习——第四章 第一个汇编程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

編寫--> 編譯,鏈接 -->?執行

?

2、編譯,鏈接

使用匯編語言編譯程序(MASM.EXE)對源程序文件中的源程序進行編譯,產生目標文件;

再用連接程序(LINK.EXE)對目標文件進行連接,生成可在操作系統中直接運行的可執行文件。

?

3、可執行文件

可執行文件中包含兩部分內容:
程序(從原程序中的匯編指令翻譯過來的機器碼)和數據(源程序中定義的數據)
相關的描述信息(比如:程序有多大、要占多少內存空間等)

?

4、一個簡單的源程序

assume cs:codesg

codesg segment

start:

?????? MOV AX, 0123H

?????? MOV BX, 0456H

????? ADD AX, BX,

????? ADD AX, AX

// 程序返回

MOV? AX, 4C00H

INT 21H

codesg ends

end start

?

5、指令

1)匯編指令有對應的機器碼的指令,可以被編譯為機器指令,最終為CPU所執行。

2)偽指令。沒有對應的機器碼的指令,最終不被CPU所執行。

偽指令是由編譯器來執行的指令,編譯器根據偽指令來進行相關的編譯工作。

?

6、定義一個段

?segment和ends是一對成對使用的偽指令,這是在寫可被編譯器編譯的匯編程序時,必須要用到的一對偽指令。

?segment和ends的功能是定義一個段,segment說明一個段開始,ends 說明一個段結束。

一個段必須有一個名稱來標識,使用格式為:

段名 segment

段名 ends

?

7、End。

END是一個匯編程序的結束標記,編譯器在編譯匯編程序的過程中,如果碰到了偽指令 end,就結束對源程序的編譯。

如果程序寫完了,要在結尾處加上偽指令end 。否則,編譯器在編譯程序時,無法知道程序在何處結束。

?

8、程序返回
應該在程序的末尾添加返回的程序段。
??? mov ax,4c00H
??? int 21H
這兩條指令所實現的功能就是程序返回。

?

9、編譯和鏈接的作用

連接的作用有以下幾個:
1)當源程序很大時,可以將它分為多個源程序文件來編譯,

每個源程序編譯成為目標文件后,再用連接程序將它們連接到一起,生成一個可執行文件;

2)程序中調用了某個庫文件中的子程序,需要將這個庫文件和該程序生成的目標文件連接到一起,生成一個可執行文件;
3)一個源程序編譯后,得到了存有機器碼的目標文件,

目標文件中的有些內容還不能直接用來生成可執行文件,連接程序將這此內容處理為最終的可執行信息。

?

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

注意,對于連接的過程,可執行文件是我們要得到的最終結果。

?

10、程序的執行

程序最先以匯編指令的形式存在源程序中,經編譯、連接后轉變為機器碼,存儲在可執行文件中。

一個程序的執行必須由一個正在執行的程序對其進行調用。

在DOS中,可執行文件中的程序P1若要運行,必須有一個正在運行的程序P2 ,

將 P1 從可執行文件中加載入內存,將CPU的控制權交給它,P1才能得以運行;

當P1運行完畢后,應該將CPU的控制權交還給使它得以運行的程序P2。

?

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

編程->1.asm->編譯(masm) ->1.obj ->鏈接(link) ->加載->內存中的程序->CPU運行

?

11、程序執行過程的跟蹤?? debug 1.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。

?

到了 int 21,我們要用P命令執行:

int 21 執行后,顯示“Program terminated normally”,返回到Debug中。

表示程序正常結束。

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

?

個人總結: 這一章通過編寫第一個源程序,認識源程序從編寫到被執行的過程。

?

轉載于:https://www.cnblogs.com/bbsno1/p/3263049.html

總結

以上是生活随笔為你收集整理的汇编语言学习——第四章 第一个汇编程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。