2014-03-13 59 views
1

關於我的編程課的另一個問題,其實很少。 開始的程序已經寫好,代碼可以在下面找到。這可以在保護模式或實地址模式下運行,我如何更改運行的內容?

問題1:

現在,在說明它明確指出該程序可在保護模式實地址模式來完成。我相當肯定Windows在保護模式下運行,因此這意味着我已經以這種方式完成了練習。如果我想,如何改變程序執行的模式?我是否正確地說Windows在保護模式下運行?

問題2:

我已經寫在下面的彙編代碼的幾個註釋是一個說明如何寄存器的第16位都被填滿是否正確?

問題3:

最後指令要求在最後提交列入上市文件地圖文件的,我無法找到這些文件。


TITLE Subtracting Three Integers 

; This program takes three integers in hexidecimal and then subtract the 2nd and 3rd from the first. 

INCLUDE Irvine32.inc 

.code 
main PROC 

    mov ax,0109h  ;stores integer 265 in ax(16-bit register) 
    mov bx,0041h  ;stores integer 65 in bx(16-bit register) 
    mov cx,0064h  ;stores integer 100 in cx(16-bit register) 

    sub ax,bx 
    sub ax,cx 
    call DumpRegs 

    comment ! 
    The dump regs returns the value of EAX=763B0064 BAX=7FFD0041 CAX=00000064 
    because EAX EBX and ECX are 32-bit registers they fill the first 16-bits with 
    unallocated data from other programs 
    ! 

    exit 
main ENDP 
END main 

回答

0

1-實模式和保護模式之間的主要區別是,在實模式下,任何程序可以訪問任何存儲器位置,並在保護模式下,程序只能訪問某些存儲器位置爲他們鋪平了道路。真實模式的問題很明顯 - 您的計算機上的任何程序都可以觀察您的一舉一動。由於這是一個巨大的安全問題,實模式已經過時了,現在幾乎所有現代操作系統都運行在保護模式下。

您的程序可以在任一模式下運行,因爲它不訪問任何超出界限的內存位置。所有的代碼都被放置在內存中並保持在限制範圍內。通用寄存器不在內存中,所以你在那裏也很安全。

2-你是對的。但請注意,如果ax已簽名,則值爲265對於16位寄存器來說太大。

3-「地圖」文件是一個文件,顯示如何在您的代碼中放置段。它也可以顯示符號及其虛擬地址。 「鏈接器」文件演示命令位置,值以及它們與您放入的單個操作碼的關係。這兩個文件都可以使用編譯器生成。

+0

在這種情況下,我的編譯器是Microsoft的Visual Studio使用包含的編譯器爲x86進行彙編,我該如何獲取它來吐出這些文件?我還認爲16位可以處理高達+/- 65,535,8位被限制爲+/- 255,位可以在寄存器中存儲不同的數量? –

+0

@ Mr.Kruel約16位 - 它可以是0到65,535或-256到256.它不能是-65,535到65,535。 –

+0

@ Mr.Kruel關於列表文件,請參閱[這裏](http://msdn.microsoft.com/en-us/library/367y26c6.aspx)。有關地圖文件,請參閱[這裏](http://msdn.microsoft.com/en-us/library/k7xkk3e2.aspx)。 –

相關問題