内联 ASM C++ 中的 DB ASM 变量
DB ASM variable in Inline ASM C++
我正在尝试弄清楚如何将 ASM 中的 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
}
这是正确的吗?
类型 int
只能容纳 16 位有符号整数,而您尝试分配给 filename
的数字超出了它的范围。由于 int
变量是两个字节长,它们对于存储文件名并不是很有用。相反,您应该将名称存储在 char
的数组中,如下所示:
char filename[] = "C:\imagen.bmp";
该数组将包含一个零字节作为其最后一个元素,这与 C++ 中的字符串一样。
您也可以将整个内容替换为:
int handle;
_dos_open("C:\imagen.bmp", 0, &handle);
我正在尝试弄清楚如何将 ASM 中的 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
}
这是正确的吗?
类型 int
只能容纳 16 位有符号整数,而您尝试分配给 filename
的数字超出了它的范围。由于 int
变量是两个字节长,它们对于存储文件名并不是很有用。相反,您应该将名称存储在 char
的数组中,如下所示:
char filename[] = "C:\imagen.bmp";
该数组将包含一个零字节作为其最后一个元素,这与 C++ 中的字符串一样。
您也可以将整个内容替换为:
int handle;
_dos_open("C:\imagen.bmp", 0, &handle);