Gå til innhold

Problemer med assembly i c++


Anbefalte innlegg

Videoannonse
Annonse

Virket ikke helt det heller.

 

Prøvde:

void SetMCGA();

void main()
{
  SetMCGA();
}

void SetMCGA() 
{
 __asm
 {
     _AX = 0x0013;
     geninterrupt (0x10);
 }
}

Fikk følgende feilmelding:

C:\Programfiler\Microsoft Visual Studio\MyProjects\vga\main.cpp(12) : error C2400: inline assembler syntax error in 'opcode'; found 'bad token'

C:\Programfiler\Microsoft Visual Studio\MyProjects\vga\main.cpp(13) : error C2400: inline assembler syntax error in 'opcode'; found '('

Bruker MS visual c++ 6

Endret av <BøNilzen>
Lenke til kommentar
Erm... :)

Det skal vel heller se litt mer ut som dette vel:

__asm{
mov ax,0x0013
int 0x10
}

i assembler setter man jo ikke registrene med =, men med "mov" opkoden, hvor den flytter andre parameter over i første, og jeg regner med at du med geninterrupt mente å kalle en interrupt 0x10, og da bruker man jo opkoden "int".
;) Håper dette hjelper.

Oi! Glemte nesten en siste ting.

Om dette støker seg, så har jeg forsøkt meg på dette selv tidligere, og feilet, og ble da forklart av en annen at det var fordi at assemblern jeg brukte ikke assemblet til skikkelige "dos" utførbare filer, og det måtte til for at jeg skulle kunne kalle slike interrupts... :p Eller det klarer vel gjerne Visual C++. Tenkte uansett jeg kunne nevne det. :thumbs: Endret av djTorden
Lenke til kommentar
  • 1 måned senere...
Rart at det stod at man skulle gjøre det slik i tutorialen da men...

"mov ax" virket fint ihvertfall.

Det står i turtorialen fordi den C++ koden er beregnet på blant annet Watcom sine gamle DOS C-compiler (og andre kompilere som støttet det samme) hvor det var støtte for å tilgå blant annet CPU registerene direkte fra C koden.

 

Men dette får du ikke gjort i VC++ 6, der må du bruke assemblerkode slik som visst i postene over.

Endret av calvinc
Lenke til kommentar
i assembler setter man jo ikke registrene med =, men med "mov" opkoden, hvor den flytter andre parameter over i første, og jeg regner med at du med geninterrupt mente å kalle en interrupt 0x10, og da bruker man jo opkoden "int".

hehe... en liten digresjon; jeg skjønner ikke blablet av hva du skriver, jeg får visst takke meg til php...

 

enda større digresjon: før jeg lærte php, var det helt gresk, nå oppdager jeg plutselig hvor vanskelig det egentlig var, nå som jeg leser om et helt fremmed prog.språk. ;)

Endret av fjartan
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...