2015-06-10 127 views
2

我試圖找出如何使用DB變量從ASM到內聯ASM C++DB ASM變量內聯彙編C++

我有這樣的ASM代碼:

filename db "C:\imagen.bmp" 
eti0: 
mov ah,3dh 
mov al,0 
mov dx,offset filename 
int 21h 

和C++:

//ASCII of C:\imagen.bmp plus zero in the end because of int 21h 
int filename=6758921051099710310111046981091120; 

asm{ 
    mov ah,3dh 
    mov al,0 
    mov dx,offset filename 
    int 21h 
} 

這是正確的嗎?

+1

奇怪的是內聯彙編部分看起來是正確的,而C++的部分是完全錯誤的。通常情況下,這是另一種方式。你使用什麼編譯器? –

+1

borland C++ 3.1 – NTHINGs

回答

3

int類型只能保存16位有符號整數,並且您試圖分配給filename的編號超出其範圍。由於int變量的長度是兩個字節,所以它們對於存儲文件名並不是那麼有用。相反,你應該在char數組喜歡這家店的名字:

char filename[] = "C:\\imagen.bmp"; 

的陣列將包括零字節作爲它的最後一個元素,正常在C++字符串。

你也可以將其替換整個事情:

int handle; 
_dos_open("C:\\imagen.bmp", 0, &handle); 
+0

我得到這些錯誤[鏈接](https://drive.google.com/file/d/0B_Brpjc5Rq-sTGdLNXJmQlpBVEU/view?usp=sharing) – NTHINGs

+0

啊,我應該聲明句柄是一個' int'。我已經相應地更新了我的答案。 –

+0

如果我使用此代碼: '#包括'' 的#include '' 的#include '' 的#include '' 的#include '' 的#include '' 的#include ' '無效的主要(無效)'' {'' clrscr();'' INT手柄;'' _dos_open( 「C:\\ imagen.bmp」,0,&手柄);'' COUT < NTHINGs