新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 匯編入門學習筆記 (三) —— 第一個程序

        匯編入門學習筆記 (三) —— 第一個程序

        作者: 時間:2016-11-09 來源:網絡 收藏
        瘋狂的暑假學習之 匯編入門學習筆記 (三)—— 第一個程序

        本文引用地址:http://www.104case.com/article/201611/317777.htm

        參考:《匯編語言》 王爽 第四章

        1.一個源程序從寫到執行的過程

        第一步:編寫匯編源程序

        第二步:對源程序進行編譯連接

        第三步:在操作系統中執行

        2.源程序

        代碼:

        1. assumecs:first
        2. firstsegment
        3. start:movax,2
        4. addax,ax
        5. addax,ax
        6. movax,4C00H
        7. int21H
        8. firstends
        9. endstart

        代碼解釋:

        assume 、segment、ends、end 等都是偽指令

        end 表示 程序結束。

        segment與ends(注意與end的區分)成對出現,表示一個段,segment前面的 first 表示段的名字,標號,可以任意取。一個程序至少有一個段。

        assume 用來把寄存器跟段關聯起來。

        start:這個可以隨便取名字,但要與end 后面的一樣。表示程序的入口。CS:IP 指向。

        3.編譯連接

        (在win7 64位,可能有問題,用DOSBox 模擬)

        使用masm編譯,link鏈接

        把上面的代碼保存到 1.asm中

        編譯:在cmd中輸入 masm 1.asm; 生成 1.obj

        鏈接:在cmd中輸入 link 1.obj; 生成 1.exe

        4.程序的運行

        在cmd中輸入1 ,運行不會有任何輸出,一閃而過

        程序的運行過程:首先必須有一個正在運行的P1程序,將要運行的P2程序從可執行文件中加載進入內存后將CPU控制權交給P2,P2才能運行。P2開始運行后P1暫停運行。當P2運行完畢后,將CPU的控制權交給P1,此后P1繼續運行。DOS中運行1.exe P1可以是command,將1.exe加載如內存。command設置CPU的CS:IP z指向程序的第一條指令(即程序的入口),從而使其運行。程序運行結束后,返回command,CPU繼續運行command。

        前面代碼中的:mov ax,4C00H

        int 21H

        功能就是程序返回

        int 跟c英語中的int沒有任何關系,表示中斷。

        5.程序執行過程的跟蹤

        在cmd中輸入:debug 1.exe 即可跟蹤運行1.exe

        這時輸入r查看寄存器信息,可以看到CX存放源程序中指令的長度。

        DS跟CS相差0010H,原因:

        程序在運行前,DOS系統先找到一個XX:0000H地址,在這段內存區的前256個這個中 創建一個程序段前綴(PSP)的數據區,DOS要利用PSP來和被加載的程序進行通信。從XX:0010H開始將程序裝入。

        輸入t 單步執行,到int 21H時,輸入p結束。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阿瓦提县| 遂昌县| 仁布县| 正安县| 浦北县| 江川县| 江阴市| 彭州市| 汾西县| 渑池县| 新沂市| 夏津县| 博白县| 红原县| 印江| 苗栗县| 原平市| 乌兰浩特市| 宜兰县| 车致| 新源县| 林芝县| 平昌县| 都昌县| 卢湾区| 克什克腾旗| 商河县| 乐清市| 怀来县| 蒲城县| 越西县| 尉氏县| 丰宁| 沛县| 阳山县| 铁岭市| 会昌县| 都匀市| 丰原市| 土默特右旗| 三穗县|