Asembler Win32Api

0

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.

0

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ć :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1