сборка — переменная ASM БД во встроенном переполнении стека ASM

Я пытаюсь выяснить, как использовать переменные БД из ASM в 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
}

Это правильно?

2

Решение

Тип int может содержать только 16-разрядное целое число со знаком и номер, который вы пытались присвоить filename это далеко за пределами его диапазона. Как int переменные длиной два байта, они не так уж полезны для хранения имен файлов. Вместо этого вы должны хранить имя в массиве char как это:

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

Массив будет содержать нулевой байт в качестве конечного элемента, как обычно для строк в C ++.

Вы также можете заменить всю вещь:

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

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector