2013-07-12 32 views
1

我試着寫下面的程序來轉儲interrupt vector table使用的FreeDOS在虛擬機中。我知道DEBUG將允許我編寫彙編程序,但是如何創建以下IVTDUMP.COM文件並保存並運行它?如何編寫內聯彙編中的FreeDOS

注意:如果可能的話,我想直接從FreeDOS嘗試。我嘗試使用EDIT命令,但它出錯了,我很確定我錯過了一些東西。

for 
( 
    address=IDT_255_ADDR; 
    address>=IDT_001_ADDR; 
    address=address-IDT_VECTOR_SZ,vector-- 
) 
{ 
    printf("%03d %08p ",vector,address); 

    __asm 
    { 
    PUSH ES 
    MOV AX,0 
    MOV ES,AX 
    MOV BX,address 
    MOV AX,ES:[BX] 
    MOV ipAddr,AX 
    INC BX 
    INC BX 
    MOV AX,ES:[BX] 
    MOV csAddr,AX 
    POP ES 
    }; 
    printf("[CS:IP]=[%04X,%04X]\n",csAddr,ipAddr); 
} 

回答

1

類似的東西,地址和printf不是程序集的一部分。您必須將其重寫爲實際的彙編代碼,或者將要使用的宏和彙編程序複製到您的freedos環境中。

如果你想使用調試中所包括的FreeDOS你可以使用一個命令開始寫彙編指令,n命令賦予一個名字和W編寫代碼的文件。

C:\debug 
-a 
06BC:0100 int 20 
06BC:0102 
-n ivtdump.com 
-rcx 2 
-w 
Writing 0002 bytes. 
-q 

C:\ 

此示例程序只能通過INT退出程序20(該2 RCX表明之後的節目的長度寫入到磁盤)

+0

上面貼的代碼是從一本書我試圖請繼續。感謝您澄清從調試命名和寫入文件的過程。我真正的問題是如何讓上面的代碼運行。我只能猜測它的C,我需要下載一個編譯器,然後從DOS運行它。對此有何見解? – Ccorock

+0

如果你無法使用'EDIT'工作,你會如何編寫這段代碼?我會先解決這個問題,然後下載一個編譯器(和庫)或彙編器......或者兩者兼而有之。 –

+0

你的書不推薦編譯器嗎?在dos的日子裏,Borland是一個流行的編譯器製造商,它確實使用__asm語法來處理你的示例,所以它可能與你的書相兼容。可以在http://cc.embarcadero.com/item/25636上找到以freedos運行的免費舊版本(您可能需要在網站上註冊它) –