内嵌ASM C中的DB ASM变量++; 我试图找出如何将ASM中的DB变量转换成内联ASM C++ +/P>
我有以下ASM代码:内嵌ASM C中的DB ASM变量++; 我试图找出如何将ASM中的DB变量转换成内联ASM C++ +/P>,c++,assembly,inline-assembly,dos,borland-c++,C++,Assembly,Inline Assembly,Dos,Borland 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 m
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位有符号整数,而您试图分配给文件名的数字远远超出了它的范围。由于int
变量的长度为两个字节,因此它们在存储文件名时并不十分有用。相反,您应该将名称存储在char
数组中,如下所示:
char filename[] = "C:\\imagen.bmp";
数组将包含一个零字节作为其最终元素,对于C++中的字符串来说,它是正常的。p>
您还可以将整个内容替换为:
int handle;
_dos_open("C:\\imagen.bmp", 0, &handle);
奇怪的是,内联汇编部分看起来是正确的,而C++部分则完全错误。这里通常是另一条路。你在用什么编译器?我发现了这些错误啊,我应该把句柄声明为int
。我已经相应地更新了我的答案。如果我使用这个代码:#include
#include
#include
#include
#include
int handleint handle
int handle;
cout 6值是句柄的值,不是错误值。如果要检查错误,需要检查\u dos\u open
的返回值。如果返回0,则没有错误,其他任何内容都是MS-dos错误代码。谢谢!现在没有错误。但我想知道你是否可以帮我做下一件需要做的事现在我需要运行下一个ASM代码:unsigned char buffer;for(inti=118;i>0;i--){ASM{mov-ah,3fh-mov-bx,handle-mov-dx,offset-buffer-mov-cx,1int21h}
在buffer中使用unsigned char是好的,还是我需要使用另一种类型?