ASM- Fehler?!?!

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

ASM- Fehler?!?!

Beitrag von AndyX »

Hallo,
was stimmt an den Zeilen

Code: Alles auswählen

LEA dx,str_buffer

MOV si,dh

MOV si,dl
nicht?

NASM meldet: Invalid combination of opcode and operands. O_o

Vllt könnt ihr ja dem armen Dummkopf der grade verwirrt ist, helfen... :|

greetz,
AndyX
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Weiss nicht wies bei NASM ist, aber bei FASM müsste die Zeile
LEA dx,[str_buffer]
heissen. Und bei den anderen Zeilen versuchst du 8bit-Register in 16bit-
Register zu verschieben, was nicht erlaubt ist.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Achja, si ist ja 16-bittig :| wie könnte man das umgehen?

Das müsste man mit CBW auf Word erweitern, oder? :|
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Für was SI??
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Ne ich bin grad durcheinander :? :|
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Ich weiß nicht, wie dein Programm aussieht, aber aus

Code: Alles auswählen

MOV SI, DH
MOV SI, DL
könnte man

Code: Alles auswählen

MOV SI, DX
machen. Funktioniert das dann?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Ne in DL und DH liegen die Adressen zu 2 Strings. Das ganze (also das mit SI) gehört zu ner simplen CompareString Routine.

Code: Alles auswählen

MOV dh,str_end
MOV dl,str_buffer
CALL cst
OR ax,ax
JNZ rebootit

;------------------- CompareString
cst:
loopcst:
MOV si,dh
LODSB
INC dh
MOV bh,al

MOV si,dl
LODSB
INC dl
MOV bl,al

CMP bh,bl
JNE notEqual
OR bh,bl
JZ equal
JMP loopcst

notEqual:
MOV ax,0000h
RET
equal:
MOV ax,1111h
RET
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

ähm lol, 8bit-Adressen?
Adressen werden unter Windows in 32bit Registern gespeichert (z.B. Esi),
wenn du unter DOS proggst, dann sinds trotzdem 16bit, also si aber sicher
nicht DH oder DL, höchstens DX...
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Ähem, das gehört zu meinem Hobby-OS Projekt, also nix mit Windoof und DOS :allright: :mrgreen: Also sind die Adressen jetzt 16-Bit oder 32-Bit? O_o
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Das solltest du dann wohl selber wissen :shock:
Antworten