Jak można wywołać MessageBoxA, Łącząc 2 łańcuchy?
invoke MessageBoxA,0,[oto się właśnie pytam],ADDR Caption,0
albo jak umieścić w wyświetlanym tekście zawartość rejestru 32 bitowego.
Jak można wywołać MessageBoxA, Łącząc 2 łańcuchy?
invoke MessageBoxA,0,[oto się właśnie pytam],ADDR Caption,0
albo jak umieścić w wyświetlanym tekście zawartość rejestru 32 bitowego.
Do łączenia można zastosować odpowiednie api albo zrobić coś takiego
mov esi, text_podstawowy
@@:
lodsb ; ładuje bajt [esi] do al
test al, al
jnz @B ;jeśli zero to koniec textu
dec esi
mov edi, esi
mov esi, text_do_dopisania
mov ecx, esi
@@:
lodsb
test al, al
jnz @B
sub esi, ecx
xchg esi, ecx
rep movsb ;kopiuje ecx bajtów z adresu w esi pod adres w edi
w ten sposób 'text_do_dopisania' znalazł się na końcu 'text_podstawowy'
potem normalnie:
invoke MessageBoxA, 0, text_podstawowy, caption, 0
co do wyświetlania liczby 32bit /wartości rejestru/ to masz tu moją starą procedurę /nie jest może idealnie optymalna, ale skuteczna i dosyć szybka/:
Hex2Str proc Hex:DWORD,
lpText:DWORD
push ebp
mov ebp, esp
push edi
push esi
push ecx
mov esi, [Hex]
mov edi, [lpText]
xor ecx, ecx
mov cl, 8
_conv_1:
mov eax, esi
shr eax, 1Ch
cmp al, 0Ah
jl _conv_2
add al, 7
_conv_2:
add al, 30h
stosb
dec ecx
rol esi, 4
jnz _conv_1
_conv_end:
mov eax, edi
pop ecx
pop esi
pop edi
leave
ret
Hex2Str endp
Składni masm'a nie stosowałem od wieków, więc wybacz ewentualne braki addr i ptr.
kod łączący stringi pisałem z głowy, ale powinien chodzić :)