我正在使用Visual Studio構建控制檯程序,並且在此C程序中使用了內聯彙編指令,如圖所示:code and error message。 對於那些誰也看不到圖片,我寫的代碼是:「mov ds,ax」在Visual Studio中顯示0xC0000005錯誤
void main() {
__asm {
mov ax, 0x4;
mov ds, ax; // 0xC0000005 error occurs while executing this instruction
xor eax, eax;
}
}
正如你所看到的,我特林值分配給DS段寄存器,我用AX將值傳輸到DS寄存器(所以我不直接將值分配給DS寄存器)。
編譯和鏈接都正常,但是當我調試這個程序時,我得到錯誤代碼:0xC0000005。無調試運行導致相同的錯誤。
我使用的是中國版本的Visual Studio,我不知道這是什麼錯誤消息的確切的翻譯,但它是粗糙的意思shoule是: 「有一個在0x008e13c2未處理的異常:0000005:訪問衝突發生時讀取0xffffffff「
問題1:是否有人知道爲什麼會發生這種情況?我不能將一個隨機值分配給DS寄存器嗎?
順便問一下,另一個問題是,當我將0到3的數字指定給DS寄存器時,沒有發生錯誤,但Visual Studio左下角的寄存器窗口顯示DS寄存器的值沒有被改變了。第二季度:爲什麼會發生這種情況?我有沒有成功地將值分配給DS寄存器?
任何幫助將不勝感激。
由於編譯器生成的代碼可能使用了'ds'作爲別的東西?如果你想進行DOS級別的編程,請使用一個實際的彙編程序來定位DOS,並使用仿真環境來運行該程序。 –
04h不是一個有效的選擇器,因爲它將LDT中的描述符0索引爲RPL = 0(無法使用CPL = 3並且爲空描述符保留) –
您無法摸索DS寄存器。你想達到什麼目的? –