Autor |
Beitrag |
HeinzKarl
      
Beiträge: 19
|
Verfasst: Sa 12.02.11 23:03
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 :
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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 :
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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
HeinzKarl 
      
Beiträge: 19
|
Verfasst: 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
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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
HeinzKarl 
      
Beiträge: 19
|
Verfasst: So 13.02.11 14:15
*durchdreh*
Ich habe jetzt das OFFSET weggelassen und habe jetzt diesen Code und bekomme trotzdem wieder einen Fehler !
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 |
|
|
|