2010-02-01 4 views
7

i verwenden DevCPP und Borland C-Compiler ....ein einfaches "Hallo Welt" Programm Inline Assembler in C/C++

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    mov cx,&name // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

in den oben genannten Code-Schnipsel ich eine Zeichenfolge mit Hilfe drucken möchten von Assemblersprache ... aber wie kann ich die Adresse der Zeichenkette in Register cx ... setzen.

ist dort etwas falsch im Code ???

+0

0x21 - wow ein dickes Lob für :-) –

+0

zu Grundlagen Wie wird die Zeichenfolge gespeichert werden? Das heißt: Was ist die Erklärung von 'name'? – GManNickG

+4

Ich schlage vor, den 16-Bit-Real-Mode-Assembler zu ignorieren und direkt mit 32-Bit-Assembler zu starten. Es ist viel einfacher und viel praktischer in diesen Tagen. –

Antwort

4

Ich habe nicht die Borland-Compiler auf der Hand, so könnte ich die Syntax wird misremembering, aber haben Sie versucht, dies:

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    lds cx,"Hello, world" // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

oder dieses:

char msg[] = "Hello, world"; 

asm { 
    mov ax,4  // (I/O Func.) 
    mov bx,1  // (Output func) 
    lds cx, msg // (address of the string) 
    mov dx,6  // (length of the string) 
    int 0x21  // system call 
} 

bearbeiten: obwohl dies (jetzt, dass ich MOV in LDS geändert haben) kompilieren, wird es noch einen Fehler zur Laufzeit werfen. Ich werde wieder versuchen ...

+1

nein, es funktioniert nicht ... es Fehler gibt ........ gibt es eine andere Art und Weise, durch die ich die Adresse des string..and dann Registers zurück zum cx gestellt bekommen kann .... – vs4vijay

+0

Soweit ich weiß, 'mov cx, msg' setze' msg's Adresse in 'cx' Register. Was bekommst du? – Jack

+0

@ vs4vijay Sie sollten nicht akzeptieren, nicht funktioniert Lösung als Antwort, weil es Missleading ist. – ST3

2

Einfach die Variablennamen in dort:

mov ax,4  // (I/O Func.) 
mov bx,1  // (Output func) 
mov cx,name // (address of the string) 
mov dx,6  // (lenght of the string) 
int 0x21  // system call 

Disclaimer: Ich bin bei der Montage nicht zu gut.