Assembler w c++

0

Witam, używam Borland C++ 5.1 i chciałbym się dowiedzieć jak tworząc program DOSowy, tworząc wstawkę assemblerową odczytać segment i offset zmiennej ( np. char tab[255]; ).

na przykładzie funkcji 09h przerwania 21h pokaże o co mi chodzi

int main(void)
{
char tab[255];
asm
{
MOV AH, 09
PUSH SEG tab
POP DS
MOV DX, OFFSET tab
INT 21h
}
return 0;
}

Tak by to wyglądało mniej więcej gdyby to był czysty asm, ale w c++ rzecz jasna to nie działa.

0

Zastosowałem to w poniższym kodzie zgodnie z tym co pisało tutaj: http://4programmers.net/view.php?id=229 no i po skompilowaniu program zamiast wyświetlić napis: abcdefghijkl wyświetla losowy obszar pamięci.

#include <stdio.h>
#include <string.h>

int main( void )
{
char tab[13];
strcpy( tab, "abcdefghijkl$");

asm
{
MOV AH, 9
LDS DX, tab
int 21h
}
return 0;
}
0

W tym wypadku lepiej uzyc LEA, bo w tab nie znajduje sie przeciez adres zmiennej, tylko to co masz wyswietlic. Ty potrzebujesz adresu tab, wiec musisz zaladowac przesuniecie do DX.

0

Dzięki Dryobates, Twój sposób działa [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1