Problem mit inline Assembler - STOSW
Verfasst: 10.02.2005 21:01
Hallo!
Ich wollte folgende Funktion sauberer/schneller programmieren und dachte an die String-Funktion STOSW. Der Compiler scheint aber nur STOS zu akzeptieren?!?
Hat jemand dazu 'nen Tipp?
P.S. Weiss jemand, was mit dem Englischen Forum los ist?
Ich wollte folgende Funktion sauberer/schneller programmieren und dachte an die String-Funktion STOSW. Der Compiler scheint aber nur STOS zu akzeptieren?!?
Code: Alles auswählen
Procedure.s BinToHex(binBuffer.l, binSize.l)
Protected hexBuffer.s
hexBuffer = Space(binSize*2)
MOV Esi, binBuffer ;/ Zeiger auf binBuffer nach Source Index (ESI)
MOV Ecx, binSize ;/ binBuffer Länge nach Counter (ECX)
MOV Edi, hexBuffer ;/ Zeiger auf hexBuffer nach Destination Index (EDI)
label1:
MOV AL, [Esi] ;/ Byte aus binBuffer in AL einlesen
MOV AH, AL ;/ und in AH kopieren
And AL, 15 ;/ nur die unteren 4 Bit in AL behalten
SHR AH, 4 ;/ nur die oberen 4 Bit in AH behalten
CMP AL, 10 ;/ ist AL < 10 ("0".."9")
JB l_label2 ;/ weiter, wenn ja
ADD AL, 7 ;/ ASCII Offset von "A" ab "9" addieren, wenn nein
label2:
ADD AL, 48 ;/ ASCII Offset von "0" addieren
CMP AH, 10 ;/ ist AH < 10 ("0".."9")
JB l_label3 ;/ weiter, wenn ja
ADD AH, 7 ;/ ASCII Offset von "A" ab "9" addieren, wenn nein
label3:
ADD AH, 48 ;/ ASCII Offset von "0" addieren
MOV [Edi], AH ;/ HiByte als ASCII an HexBuffer übergeben
INC Edi ;/ hexBuffer-Zeiger auf nächste Position setzen
MOV [Edi], AL ;/ LoByte als ASCII an HexBuffer übergeben
INC Edi ;/ hexBuffer-Zeiger auf nächste Position setzen
INC Esi ;/ binBuffer-Zeiger auf nächste Position setzen
DEC Ecx ;/ binSize Counter zurückzählen
JNZ l_label1 ;/ wiederholen, solange binSize Counter > 0
MOV AL, 0 ;/ AL auf NULL setzen
MOV [Edi], AL ;/ Stringende an HexBuffer übergeben
ProcedureReturn hexBuffer
EndProcedure
Str01$="Test u.s.w." ;/ Statt String01$ wird normalerweise ein Binärbuffer eingesetzt
str02$=BinToHex(@Str01$,Len(Str01$))
Debug Str01$
Debug Len(Str01$)
Debug str02$
Debug Len(str02$)
P.S. Weiss jemand, was mit dem Englischen Forum los ist?