Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
28.05.2002, 19:44
thinktank



Ich bin beim Lesen von " Programmiersprache Assembler - eine strukturierte Einführung" von Reiner Backer auf folgende Fehler ( oder doch nicht ?) gestoßen :

auf S.131 :

(im Code Beispiel)
Quellcode:
mov ah, 02h ; Mit diesem Interrupt erfragen wir den Status
                 ; des Druckers. Der Druckerstatus wird
                 ; anschließend
xor dx, dx  ; <- Warum soll man dx auf 0 setzen ?
int 17h       ;im AH-Register zurückgegeben.

(...)

test ah, 10000000b ; Bit - 7 gesetzt ? (...)
je Fehler                ; Springe wenn Bit - [b]5[/b] gesetzt ist zu Fehler ( Warum Bit-5 ? )

test ah, 00100000b ; Bit -5 gesetzt ? (...)
jne Fehler              ; Springe wenn Bit - 7 nicht gesetzt ist zu Fehler ( Warum Bit- 7 ?)

Auf der nächsten Seite gehts weiter :

( wieder beim Code - Beispiel )

Quellcode:
mov ah, 10100101b ; AH = 1010 0101
shl ah, 1                ; AH = 0100 1010 und CF = 1
mov cL, 4              ; CH = 4 ( wieso jetzt CH , ich dachte er schiebt was in  
                           ;CL ( warum eigentlich so kompliziert mit [b]c[/b]L ? ))
shl ah, cL              ; why cL ?

Beim Codebeispiel für SHR :

Quellcode:
mov ah, 10100101b ; AH = 1111 1110
shr ah, 1                ; AH = 0111 1111 und CF = 0
mov cL, 4              ; CH = 4  wieso jetzt schon wieder CH? Ich dachte er  
                           ;schiebt was in  CL.
shr ah, cL              ; why cL ?

Ich bin absoluter Noob in ASM, deshalb bin jetzt etwas verwirrt =). Ausserdem
ist das die 9.Auflage ( vom Februar 2002 ). Sind das jetzt Fehler oder ned ?

BTW :

Benutzt ihr MSVC zum assemblieren ?

--


Dieser Beitrag wurde am 28.05.2002 um 19:49 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
28.05.2002, 21:56
Tron



*buchausdemregalkram*

drucker:
dx gibt die nummer des druckers an, also 0 fuer lpt1:

bei mir stehen die bits richtig rum da, also:
Quellcode:test ah, 10000000b ; Bit - 7 gesetzt ? (...)
jne Fehler                ; Springe wenn Bit - 7 gesetzt ist zu Fehler ( Warum Bit-5 ? )

test ah, 00100000b ; Bit -5 gesetzt ? (...)
je Fehler              ; Springe wenn Bit - 5 nicht gesetzt ist zu Fehler ( Warum Bit- 7 ?)

allerdings ist bei meiner auflage die pruefung der flags verdreht (also jne statt je und umgekehrt)
der code aus deinem buch ist richtig, nur die kommentare sind falsch.

shl:
da wurde ein fehler aus meiner ausgabe nur halb korrigiert, bei mir steht ueberall ch. das ist falsch, es muss natuerlich ueberall cl heissen, da fuer das schieben ueber mehrere bits das cl register als zaehler verwendet wird
gros/kleinschreibung tut bei asm nichts zur sache.
btw: ab dem 386er kann man shl/shr/sal/sar/rol/ror/rcl/rcr ueber mehrere bits auch ohne das cl register verwenden, also direkt z.b. shl ax, 5

shr:
hier prinzipiell selbes problem wieder nur halbherzig korrigiert, das bitmuster aus dem kommentar passt natuerlich nicht zum code; was in meiner ausgabe uebrigens noch richtig war, da steht naemlich mov ah,11111110b

ich benutze nasm

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
002
29.05.2002, 14:40
TheTinySteini



lol, ich hab das Buch in der Ausgabe von 13.-16. Tausend von Mai 1995. Da sind die Fehler mit dem cL auch drin - also falsche Kommentare.
Aber das Druckerbeispiel ist richtig. Richtige Bit-Angabe, richtiger Sprungbefehl...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche