PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehlermeldung bei ASM "IN reg,port"


Poison Nuke
12.09.2003, 00:21
Hio,

wenn ich in eine Assemblerprozedur den Befehl IN al,byte ptr $03DA einbaue, dann kommt beim compilieren die Fehlermeldung, das Opcode und Operand nich zusammenpassen...auch wenn ich das byte ptr weglasse, geht es nicht.

Muss man bei Pascal noch irgendwas beachten?

(PS: es ist Teil einer Proc, die auf den Vertikalen Rücklauf des Monis warten soll).


gargyle
12.09.2003, 09:17
Hallo !!


Der Ausdruck "Byte Ptr"ist nicht notwendig.

Bei Portzugriffen gibst du entwerder die adresse direckt an:

In Al,60H

oder über ein Register:

In EAX,DX

Der Zugriff über (Quell)Register geht nur bei Prozessoren >286


Grüße

Poison Nuke
12.09.2003, 10:04
thx für die Antwort...also wenn ich den IN Befehl jetzt durch einen Quellregister angebe, dann nölt Turbo Pascal beim compilen ned...aber wenn ich den OUT Befehl nutzen will...dann nölt TP rum, egal wie ich es mache :(
(Egal ob ich alles über Festwerte angebe, oder über Quellregister).

Felix Kaiser
12.09.2003, 15:59
Einfache Regel:

IN Al,val8
IN AX,DX
OUT val8,AL
OUT DX,AX

Direkt können nur Ports im 8-Bit Bereich angesprochen werden, für darüber benötigt man IMMER das 'Hilfsregister' DX.

Poison Nuke
12.09.2003, 20:33
ok, danke für die Info....aber am besten noch sagen, wenn der Port im 16bit Bereich liegt, dann muss man über das Hilfregister AX einen 16bit Wert ausgeben...denn alles andere mag der Pascal Compiler auch ned :(

Nunja, hoffentlich ist bald die IDE fertig, dann kann ich endlich komplett mit einem ASM Compiler arbeiten, der hat diese Wehwechen ned :)

Felix Kaiser
13.09.2003, 09:32
Eh, doch. Es geht nur so, alles andere ist nicht i386 kompatibel.

toxl
13.09.2003, 21:37
Nur um mal Klarheit zu schaffen:

(Nasm Manual)

B.4.119 IN: Input from I/O Port

IN AL,imm8 ; E4 ib [8086]
IN AX,imm8 ; o16 E5 ib [8086]
IN EAX,imm8 ; o32 E5 ib [386]
IN AL,DX ; EC [8086]
IN AX,DX ; o16 ED [8086]
IN EAX,DX ; o32 ED [386]

B.4.194 OUT: Output Data to I/O Port

OUT imm8,AL ; E6 ib [8086]
OUT imm8,AX ; o16 E7 ib [8086]
OUT imm8,EAX ; o32 E7 ib [386]
OUT DX,AL ; EE [8086]
OUT DX,AX ; o16 EF [8086]
OUT DX,EAX ; o32 EF [386]

imm8 ist ein 8-Bit immediate, also eine Konstante mit Werten von 0 - 255, die den Port angibt. Sonst müsste alles klar sein. Ok? :)

Poison Nuke
14.09.2003, 03:00
war auch schon vor zwei Tagen klar...seitdem wurde mir klar, was das "DX" in meinem Assembler Befehlsreferenz Buch zu bedeuten hat ;)

Trotzdem nochmal thx für die Erklärung.