Inline ASM C ++中的DB ASM变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Inline ASM C ++中的DB ASM变量相关的知识,希望对你有一定的参考价值。

我试图找出如何使用ASM中的DB变量到Inline 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);

以上是关于Inline ASM C ++中的DB ASM变量的主要内容,如果未能解决你的问题,请参考以下文章

C/C++常用关键字详解

翻译 | “扩展asm”——用C表示操作数的汇编程序指令

x64 asm如何将函数指针设置为_cdecl C函数并调用它?

将ffmpeg中的x86 asm和inline-asm编译成WebAssembly的问题

MDK中嵌入汇编方法

为啥 C/RUST 中的一个加法计算在结果 ASM 中有 3 个双精度浮点加法工具?