Zugriff auf einzelne string Elemente
-
Hallo wie kann man auf einzelne string Elemente zugreifen ohne movs oder movsb.
Gibt es da irgendeine möglichkeit ?.486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\masm32.inc includelib \masm32\lib\masm32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data str_1 db "abcdefg",0 str_2 db ? .code start: mov esi, offset str_1 mov edi, offset str_2 movs byte ptr [edi] , byte ptr[esi] ; a movs byte ptr [edi] , byte ptr[esi] ; b invoke StdOut , addr str_2 invoke Sleep , 2000 invoke ExitProcess , 0 end start
-
z.B.
mov al,[si]lodsb oder lodsw
oder
xlatoder
mov al,[bx+di]
mov al,[FFFF]
usw...
-
nachtfeuer schrieb:
z.B.
mov al,[si]
...Bitte keine 16 Bit-Beispiele!
-
du versuchst einen String zu kopieren?:
include masm32rt.inc .data szSrc db "irgend ein string",13,10,0 .code main proc LOCAL szBuffer[128]:BYTE invoke AllocConsole ; kopiere szSrc in den Puffer szBuffer[] xor ecx,ecx lea esi,szSrc lea edi,szBuffer @@: movzx eax,BYTE ptr [esi+ecx] mov BYTE ptr [edi+ecx],al test eax,eax lea ecx,[ecx+1] jnz @B @@: ;Alternativ: szCopy@masmlib ;invoke szCopy,ADDR szSrc,ADDR szBuffer invoke StdOut,ADDR szBuffer inkey exit main endp end main
masm
-
pointer*** schrieb:
Hallo wie kann man auf einzelne string Elemente zugreifen ohne movs oder movsb.
Hallo,
dein "string" liegt an irgendeiner Speicherstelle, wie jedes andere Byte as auch tut. Soll heißen, hast du ein Label, respektive die Adresse, kannst du auch ein einzelnes Byte oder einen Substring addressieren:
.DATA str0 db 'abcd', 13, 10, 0 .CODE main LABEL DWORD INVOKE StdOut, OFFSET str0 ; print "abcd\n" INVOKE StdOut, OFFSET 1[str0] ; print "bcd\n" movzx eax, 2[str0] ; eax = 0x63000000 movzx eax, 3[str0] ; eax = 0x64000000 mov al, [str0] ; al = 0x61
-
FrEEzE2046 schrieb:
; eax = 0x63000000 ; eax = 0x64000000
das glaub ich nicht
-
aber hallo schrieb:
nachtfeuer schrieb:
z.B.
mov al,[si]
...Bitte keine 16 Bit-Beispiele!
ach, und wieso nicht?
-
nachtfeuer schrieb:
aber hallo schrieb:
nachtfeuer schrieb:
z.B.
mov al,[si]
...Bitte keine 16 Bit-Beispiele!
ach, und wieso nicht?
Der OP programmiert 32 Bit-Code. 16 Bit-Code funktioniert da nicht.
-
aber hallo schrieb:
nachtfeuer schrieb:
aber hallo schrieb:
nachtfeuer schrieb:
z.B.
mov al,[si]
...Bitte keine 16 Bit-Beispiele!
ach, und wieso nicht?
Der OP programmiert 32 Bit-Code. 16 Bit-Code funktioniert da nicht.
Falsch geraten. Naja, das kann vorkommen
- aber die Asm Befehle oben sind auch relativ unabhängig von der jeweiligen SystemBitbreite. Darum ist es fast egal, ob man Assembler mit 16bit oder 32bit oder 64bit lernt. Die Unterschiede liegen vor allem im (Speicher-)Addressierungsmodus. Und der Threadopener sollte eigentlich in der Lage sein, den Beispielcode an seinen eigenen anzupassen.
Ein gutes Verständnis vom Real Mode gehört übrigens zu den wichtigen Grundlagen der Assemblerprogrammierung.
-
masm schrieb:
das glaub ich nicht
Little-Endian versteht sich