warum ist ROL-Befehl benutzt wird?
Ich bin etwas neu auf Assembler-Programmierung, so verzeihen Sie mir, wenn diese Frage scheint irrelevant.
Ich versuche zu verstehen, was ein 32-bit-Zusatz-Programm-und das folgende ist eines der Verfahren verwendet werden, um das Ergebnis der addition (gespeichert in EAX) an die Konsole
;Procedure to display EAX as a 8 digit hex number
DISPH PROC NEAR
PUSH EBX ; Save EBX
MOV CL,4 ; To rotate the register by 4 bits
MOV SI,8 ; Count for displaying 8 digits
DISPH1:
ROL EAX,CL ; Rotate EAX left by 4 bits
PUSH EAX ; Save EAX
AND AL,0FH
ADD AL,30H
CMP AL,'9' ; if AL <= '9', AL contains the ASCII code
JBE DISPH2
ADD AL,7 ; if AL > '9' , add 07H to AL to convert into ASCII
DISPH2:
MOV AH,2H ; O/P subprogram
MOV DL,AL ; Call MS-DOS O/P subprogram
INT 21H ; Display the data in DL register on screen
POP EAX ; retrieve EAX from Stack
DEC SI
JNZ DISPH1
POP EBX ; Restore EBX
RET
DISPH ENDP
END ; end of file
Bitte helfen Sie mir zu verstehen, warum ROL-Befehl benutzt wird, unter DISP1 label, was hilft es uns, zu erreichen.
Vielen Dank im Voraus.. 🙂
- Das ist etwas seltsam-code. Warum nicht
rol eax, 4
? Und warum istebx
(in der Regel eine angerufene-save-register) gespeichert und wiederhergestellt werden, auch wenn es nicht verwendet wird? - in der Tat beide Operationen sind nutzlos ... schön obserevations da..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code druckt 32-bit-Wert in hexadezimaler. Die ROL-Anweisung ist praktisch, weil hier können Sie die nibbles in der höchsten zur niedrigsten Ordnung.
Betrachten Sie den Wert 0xCAFED00D. Zum drucken der ersten vier Buchstaben aus, die Sie extrahieren müssen, die Werte 'C' A' - 'F' und 'E' in dieser Reihenfolge.
Wie Sie sehen können, diese Sequenz bewegt sich der Wert von Interesse in der untersten nibble. Extrahieren von diesem Wert erfolgt durch und-Verknüpfung der daraus resultierende Wert mit 0x0f.
Danach der Wert wird umgewandelt in ein hexadezimales Zeichen und ausgegeben via DOS-BIOS.
Es wird verwendet, um die Iteration über die Ziffern der Nummer, während das display die Bedienung. Bei jeder iteration setzt sich in den unteren byte von EAX den bits entsprechen, die für die nächste Ziffer Anzeige. Im Gegensatz zu SHL/SHR Operationen, ROL beibehalten wird, wird der ursprüngliche Wert in die Register EAX nach Abschluss der gesamten display-routine. ROL ist natürlich bequem für die Anzeige von der höchsten Ziffer (ähnlicher Effekt könnte erreicht werden, indem SHR-32-Menge der verarbeiteten bits, aber ROL ist einfacher).