Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 11. May 2006, 16:29

Titel: dh/dl nach dx, etc
Beitrag von: thetrue am 11. May 2006, 16:29
moin
ich versuche gerade mit BIOS in ASM zu coden :)
Ich arbeitet im grafik modus, und will da die Cursirposition mit farbe etc darstellen


setmaus:
mov ah, 03h
mov bh, 0
int 10h
mov ah, 0ch
mov bh, 0
mov dx, dh ; zeile 63
mov cx, dl ; zeile 64
mov al, 7
int 10h
ret


doch NASM meldet error:

test2.asm:63: error: invalid combination of opcode and operands
test2.asm:64: error: invalid combination of opcode and operands


wie kann ich dh nach dx und dl nach cx verschiben?

PS:
so geht auch net:

setmaus:
mov ah, 03h
mov bh, 0
int 10h
mov ah, 0ch
mov bh, 0
mov dx, [dh] ; zeile 63
mov cx, [dl] ; zeile 64
mov al, 7
int 10h
ret
Titel: Re: dh/dl nach dx, etc
Beitrag von: Svenska am 11. May 2006, 18:08
Zitat

setmaus:
mov ah, 03h
mov bh, 0
int 10h
mov ah, 0ch
mov bh, 0
mov dh,0
mov dl, dh
mov ch,0
mov cl, dl
mov al, 7
int 10h
ret



Du kannst ein 16-Bit-Register nicht in ein 8Bit-Register schieben und umgekehrt. Du kannst entweder 8 Bit in ein 8-Bit-Register schieben oder 16-Bit in ein 16-Bit-Register.
Also wenn du DL nach CX willst (beispiel), musst du dich entscheiden, ob die daten von DL nach CL oder nach CH sollen (oder beides). Die andere Hälfte kannst du dann nullen (falls du 16-Bit-Operationen darauf anwenden willst) oder mit deinen Werten füllen.

Mein Beispiel sollte funktionieren. Die "mov reg,0" kannst du auch durch "xor reg,reg" (Bsp: xor dh,dh) ersetzen, das spart einen oder zwei Taktzyklen, wenns wichtig ist.

Gruß,
Svenska
Titel: dh/dl nach dx, etc
Beitrag von: thetrue am 11. May 2006, 18:16
den Code kann ich Complimieren, doch er functioniert nicht wie er soll ;)

PS:
angebonmen dl=3 und dh=6
dann muss
Zitat
mov dx, 6
mov cx, 3

sein[/code]
Titel: dh/dl nach dx, etc
Beitrag von: maumo am 11. May 2006, 19:32
xor cx, cx
mov cl, dh
xor dh, dh


sollte eigentlich funktionieren

maumo
Titel: dh/dl nach dx, etc
Beitrag von: Jidder am 11. May 2006, 20:50
maumo, bei dir ist dx = dl und cx = dh ;)

Mein Vorschlag:

xor cx, cx
mov cl, dl
mov dl, dh
xor dh, dh
Titel: dh/dl nach dx, etc
Beitrag von: bitmaster am 11. May 2006, 21:18
setmaus:
mov ah, 03h
mov bh, 0
int 10h
mov ah, 0ch
mov bh, 0
movzx dx, dh ; zeile 63
movzx cx, dl ; zeile 64
mov al, 7
int 10h
ret
Titel: dh/dl nach dx, etc
Beitrag von: Jidder am 11. May 2006, 22:27
wenn, dann

setmaus:
mov ah, 03h
mov bh, 0
int 10h
mov ah, 0ch
mov bh, 0
movzx cx, dl
movzx dx, dh
mov al, 7
int 10h
ret


sonst gibt es das selbe Problem, wie bei Svenska ;)
Titel: dh/dl nach dx, etc
Beitrag von: bitmaster am 12. May 2006, 06:52
Zitat von: PorkChicken
wenn, dann

setmaus:
mov ah, 03h
mov bh, 0
int 10h
mov ah, 0ch
mov bh, 0
movzx cx, dl
movzx dx, dh
mov al, 7
int 10h
ret


sonst gibt es das selbe Problem, wie bei Svenska ;)
Hä? Was ist daran denn anders?

bitmaster
Titel: dh/dl nach dx, etc
Beitrag von: Jidder am 12. May 2006, 12:13
lol, zwei 10-zeilige Funktionen sind doch nicht kompliziert zu vergleichen. Vor allem, wenn es nur mit 2 Zeilen Probleme gibt ;)
Ich hab die beiden movzx Zeilen vertauscht, denn du überschreibst mit dem ersten movzx bereits dl, was du aber bei dem zweiten noch brauchst.
Titel: dh/dl nach dx, etc
Beitrag von: bitmaster am 12. May 2006, 13:57
Zitat
Ich hab die beiden movzx Zeilen vertauscht, denn du überschreibst mit dem ersten movzx bereits dl, was du aber bei dem zweiten noch brauchst.
Ups  :oops: