編寫一個完整的匯編
- 匯編語言由2類指令組成
assume cs:code'
code segment
mov ax, 1122h
mov bx, 3344h
add ax, bx
mov ah, 4ch
int 21h
code ends
end
- 匯編指令
- 如mov、add锉矢、sub等
- 有對應(yīng)的機器指令梯嗽,可以被編譯為機器指令,最終被CPU執(zhí)行
- 偽指令
- 如assume沽损、 segment灯节、ends、end等
- 沒有對應(yīng)的機器指令绵估,由編譯器解析炎疆,最終不被CPU執(zhí)行
- 匯編指令
- 注釋以分號開頭
偽指令 - segment , ends , end
assume cs:code
code segment
mov ax, 1122h
mov bx, 3344h
add ax, bx
mov ah,4ch
int 21h
code ends
end
- segment和ends的作用是定義一個段,segment代表一個段的開始国裳,ends代表一個段的結(jié)束形入,使用格式為
段名 segment
:
段名 ends
一個有意義的匯編程序中,至少要有一個段作為代碼段存放代碼
-
assume
- 將用作代碼段的code段和CPU中的cs寄存器關(guān)聯(lián)起來
-
end
- 編譯器遇到end時缝左,就結(jié)束對源程序的編譯
下面2句代碼的作用是退出程序
mov ah,4ch
int 21h
- 也可以寫成
mov ax, 4c00h
int 21h
中斷
-
中斷
- 中斷是由于軟件的或硬件的信號亿遂,使得CPU暫停當(dāng)前的任務(wù)螟蒸,轉(zhuǎn)而去執(zhí)行另一段子程序
- 也就是說,在程序運行過程中崩掘,系統(tǒng)出現(xiàn)了一個必須由CPU立即處理的情況七嫌,此時,CPU暫時中止當(dāng)前程序的執(zhí)行轉(zhuǎn)而處理這個新情況的過程就叫做中斷
-
中斷的分類
- 硬中斷(外中斷)苞慢,由外部設(shè)備(比如網(wǎng)卡诵原、硬盤)隨機引發(fā)的,比如當(dāng)網(wǎng)卡收到數(shù)據(jù)包的時候挽放,就會發(fā)出一個中斷
- 軟中斷(內(nèi)中斷)绍赛,由執(zhí)行中斷指令產(chǎn)生的,可以通過程序控制觸發(fā)
從本質(zhì)上來講辑畦,中斷是一種電信號吗蚌,當(dāng)設(shè)備有某種事件發(fā)生時,它就會產(chǎn)生中斷纯出,通過總線把電信號發(fā)送給中斷控制器蚯妇。如果中斷的線是激活的,中斷控制器就把電信號發(fā)送給處理器的某個特定引腳暂筝。處理器于是立即停止自己正在做的事箩言,跳到中斷處理程序的入口點,進行中斷處理
-
可以通過指令int n產(chǎn)生中斷
- n是中斷碼焕襟,內(nèi)存中有一張中斷向量表陨收,用來存放中斷碼對應(yīng)中斷處理程序的入口地址
- CPU在接收到中斷信號后,暫停當(dāng)前正在執(zhí)行的程序鸵赖,跳轉(zhuǎn)到中斷碼對應(yīng)的中斷向量表地址處务漩,去執(zhí)行中斷處理程序
-
常見中斷
- int 10h用于執(zhí)行BIOS中斷
- int 3是“斷點中斷”,用于調(diào)試程序
- int 21h用于執(zhí)行DOS系統(tǒng)功能調(diào)用它褪,AH寄存器存儲功能號
DOS系統(tǒng)功能調(diào)用
- DOS系統(tǒng)功能調(diào)用
- 由DOS提供的一組實現(xiàn)特殊功能的子程序供程序員在編寫自己的程序時調(diào)用饵骨,以減輕編程的工作量
- 涉及屏幕顯示、文件管理列赎、I/O管理等等
- 每個子程序都有一個功能號宏悦,所有的功能調(diào)用的格式都是一致的镐确。調(diào)用的步驟大致如下:系統(tǒng)功能號送到寄存器AH中包吝;
- 入口參數(shù)送到指定的寄存器中;
- 用INT 21H指令執(zhí)行功能調(diào)用源葫;
- 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況诗越。
;----數(shù)據(jù)段---
data segment
string db 'Hello World!$'
data ends
mov ax, data
mov ds, ax ; 設(shè)置ds為數(shù)據(jù)段
mov ah, 9h ;功能號9h代表在屏幕顯示字符串mov dx, offset string ;ds:dx代表字符串地址
int 21h ;執(zhí)行DOS系統(tǒng)功能調(diào)用
emu8086常用快捷鍵
F5:調(diào)試運行
F4:重新加載
F8:下一步(單步執(zhí)行)
F9:直接一步到位運行整個程序
Ctrl + F8:跳過前面代碼,斷點到單擊選中的代碼那行
文章鏈接:http://www.reibang.com/p/3216291cdf87