内联 ASM C++中的数据库 ASM 变量

DB ASM variable in Inline ASM C++

本文关键字:ASM 数据库 变量 C++ 内联      更新时间:2023-10-16

我正在尝试弄清楚如何将 ASM 中的数据库变量用于内联 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);