Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Assembler [MASM32] Variabele; Frage
HeinzKarl - Sa 12.02.11 23:03
Titel: Assembler [MASM32] Variabele; Frage
Hi Leute,
ich habe mir vor kurzem mal MASM32 (10te Version oder so^^) heruntergeladen. Nun habe ich das klasische 'Hallo Welt' geschrieben. Naja eher hat mir der Compiler den Code vorgegeben :)
Ich wollte ihn um eine Variabele erweitern, diese festlegen und ausgeben.
Nun meine Fragen:
- Was ist an dem Code falsch ? Ich finde soweit keinen Fehler
- Wie gebe ich jetzt die Variabele aus ?
Mein Code bis jetzt :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| include \masm32\include\masm32rt.inc
.data? <- Wozu ist das ? value dd ? <- und das ? Ich habe ja unten noch eine Data Sektion.
.data item dd 0 <- Das war vorgegeben, was das ? Ich hab geschaut, angeblich DoubleWord ?? vari db (123) <- Meine Variabele
.code
start:
call main inkey exit
main proc
cls print "Hello World",13,10 print "Neue Zeile, und eine Zahl : ",13,10 mov dx, vari <- Das hier soll die Variabele ausgeben, geht aber nicht! INT 21h <- Und das ist halt die endgültiger Ausgabe ret
main endp
end start |
BenBE - So 13.02.11 01:56
HeinzKarl hat folgendes geschrieben : |
Hi Leute,
ich habe mir vor kurzem mal MASM32 (10te Version oder so^^) heruntergeladen. Nun habe ich das klasische 'Hallo Welt' geschrieben. Naja eher hat mir der Compiler den Code vorgegeben :)
Ich wollte ihn um eine Variabele erweitern, diese festlegen und ausgeben.
Nun meine Fragen:
- Was ist an dem Code falsch ? Ich finde soweit keinen Fehler
- Wie gebe ich jetzt die Variabele aus ?
Mein Code bis jetzt :
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| include \masm32\include\masm32rt.inc
.data? <- Wozu ist das ? (.bss dürfte identisch sein) value dd ? <- und das ? Ich habe ja unten noch eine Data Sektion. (Uninidialized Value)
.data item dd 0 <- Das war vorgegeben, was das ? Ich hab geschaut, angeblich DoubleWord ?? vari db (123) <- Meine Variabele
.code
start:
call main inkey exit
main proc
cls print "Hello World",13,10 print "Neue Zeile, und eine Zahl : ",13,10 mov dx, vari <- Das hier soll die Variabele ausgeben, geht aber nicht! Hier fehlt noch das Setzen des Funktionsaufruf für das schreiben in AX INT 21h <- Und das ist halt die endgültiger Ausgabe ret
main endp
end start | |
Naja, nehmen wir das mal etwas auseinander:
Der Int 21h stellt zahlreiche Funktionen bereit, die über das AH/AX-Register angesprochen werden. Hierzu gehört das schreiben von STRINGS auf die Standard-Ausgabe, Lesen von Strings von der Standard-Eingabe und zahlreiche andere Dinge. Was der int 21h NICHT kann, sind Zahlen direkt ausgeben (AFAIR). Hierzu musst Du selber tätig werden und deinen Wert in DX in einen String verwandeln. die normale String-Ausgaberoutine will übrigens in DX den Zeiger auf den Anfang des Strings haben; und nicht deine Zahl.
HeinzKarl - So 13.02.11 12:48
So, ich habe es jetzt mal einen String gespeichert. Geht immernoch nciht. Ich bekomme die Fehlermeldung
"invalid instruction operands"
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| das schreiben von STRINGS auf die Standard-Ausgabe -------------------------------------------------- vari db 'Entwickler Ecke' <- String
.code
start:
call main inkey exit
main proc
cls print "Hello World",13,10 mov dx, vari mov ax,dx <- von dx nach ax ? INT 21h <- Ausgabe ax ? ret
main endp |
Sorry für die Anfänger fragen, aber ich steh grad echt aufm Schlauch O.o
So habe grade mal ein bischen rumprobiert und es geschafft eine andere Fehlermeldung zu bekommen :D
Also das habe ich geändert :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| main proc
cls print "Hello World",13,10,'$' mov ah,09h mov dx,OFFSET var INT 21h ret
main endp |
Fehler :
"instruction operands must be the same size"
BenBE - So 13.02.11 14:04
Das Offset kannst Du weglassen in dem Fall, da var nur ein Label bezeichnet und damit eine Referenz auf eine Speicherzelle darstellt.
HeinzKarl - So 13.02.11 14:15
*durchdreh*
Ich habe jetzt das OFFSET weggelassen und habe jetzt diesen Code und bekomme trotzdem wieder einen Fehler !
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| include \masm32\include\masm32rt.inc
.data? value dd ? .data item dd 0 var db 'Entwickler Ecke',13,10,'$'
.code
start:
call main inkey exit
main proc
cls print "Hello World",13,10,'$' mov ah,09h mov dx,var <- !Fehler! "invalid instruction operands" Was mache ich denn noch falsch o.O ? INT 21h ret
main endp
end start |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!