編寫完整的匯編程序

第一個(gè)完整的匯編程序

  • 前面的實(shí)驗(yàn)都是利用Debug程序進(jìn)行模擬測(cè)試的,并沒(méi)有編寫一個(gè)完整的匯編程序

  • 使用匯編語(yǔ)言編寫一個(gè)完整的程序,步驟大致如下
    編寫源代碼,文件名拓展名為.asm
    編譯、鏈接(可以使用微軟的MASM編譯器)
    調(diào)試、運(yùn)行


匯編語(yǔ)言的組成

源程序 -> 可執(zhí)行

調(diào)試可執(zhí)行程序

偽指令 - segment、ends、end

退出程序

中斷

  • 中斷是由于軟件的或硬件的信號(hào),使得CPU暫停當(dāng)前的任務(wù),轉(zhuǎn)而去執(zhí)行另一段子程序
  • 也就是說(shuō),在程序運(yùn)行過(guò)程中,系統(tǒng)出現(xiàn)了一個(gè)必須由CPU立即處理的情況,此時(shí),CPU暫時(shí)中止當(dāng)前程序的執(zhí)行轉(zhuǎn)而處理這個(gè)新情況的過(guò)程就叫做中斷

中斷的分類

  • 硬中斷(外中斷),由外部設(shè)備(比如網(wǎng)卡、硬盤)隨機(jī)引發(fā)的,比如當(dāng)網(wǎng)卡收到數(shù)據(jù)包的時(shí)候,就會(huì)發(fā)出一個(gè)中斷
  • 軟中斷(內(nèi)中斷),由執(zhí)行中斷指令產(chǎn)生的,可以通過(guò)程序控制觸發(fā)

從本質(zhì)上來(lái)講,中斷是一種電信號(hào),當(dāng)設(shè)備有某種事件發(fā)生時(shí),它就會(huì)產(chǎn)生中斷,通過(guò)總線把電信號(hào)發(fā)送給中斷控制器。如果中斷的線是激活的,中斷控制器就把電信號(hào)發(fā)送給處理器的某個(gè)特定引腳。處理器于是立即停止自己正在做的事,跳到中斷處理程序的入口點(diǎn),進(jìn)行中斷處理

  • 可以通過(guò)指令int n產(chǎn)生中斷

    • n是中斷碼,內(nèi)存中有一張中斷向量表,用來(lái)存放中斷碼對(duì)應(yīng)中斷處理程序的入口地址
    • CPU在接收到中斷信號(hào)后,暫停當(dāng)前正在執(zhí)行的程序,跳轉(zhuǎn)到中斷碼對(duì)應(yīng)的中斷向量表地址處,去執(zhí)行中斷處理程序
  • 常見中斷

    • int 10h用于執(zhí)行BIOS中斷
    • int 3是“斷點(diǎn)中斷”,用于調(diào)試程序
    • int 21h用于執(zhí)行DOS系統(tǒng)功能調(diào)用,AH寄存器存儲(chǔ)功能號(hào)

DOS系統(tǒng)功能調(diào)用

  • 由DOS提供的一組實(shí)現(xiàn)特殊功能的子程序供程序員
  • 在編寫自己的程序時(shí)調(diào)用,以減輕編程的工作量
  • 涉及屏幕顯示、文件管理、I/O管理等等
  • 每個(gè)子程序都有一個(gè)功能號(hào),所有的功能調(diào)用的格式都是一致的。調(diào)用的步驟大致如下:

*系統(tǒng)功能號(hào)送到寄存器AH中;
*入口參數(shù)送到指定的寄存器中;
*用INT 21H指令執(zhí)行功能調(diào)用;
*根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。


emu8086常用快捷鍵

  • F5:調(diào)試運(yùn)行

  • F4:重新加載

  • F8:下一步(單步執(zhí)行)

  • F9:直接一步到位運(yùn)行整個(gè)程序

  • Ctrl + F8:跳過(guò)前面代碼,斷點(diǎn)到單擊選中的代碼那行

  • 注意:emu8086的語(yǔ)法檢查并非100%嚴(yán)格(比較嚴(yán)謹(jǐn)?shù)倪€是使用MASM進(jìn)行編譯)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容