Sasza Napisano Wrzesień 24, 2019 Autor Zgłoś Udostępnij Napisano Wrzesień 24, 2019 Witam i proszę o pomoc!! problem jest nastepujący: piszę w Masm32v8 coś takiego: movups xmm(1),xmm(2) pcmpeqb xmm(1),[esi] pmovmskb eax,xmm(1) a otrzymuje taki kod: 0F ??? 10 13 adc byte ptr [ebx],dl 0F ??? 10 CA adc dl,cl 0F 74 0E pcmpeqb mm1,mmword ptr [esi] 0F ??? D7 xlat byte ptr [ebx] C1 66 0F BA shl dword ptr [esi+0Fh],0BAh E0 00 loopne Procedura+0CFh (00fc13b0) według specyfikacji Intela powinno być inaczej wygląda na to że masm32 żle koduje 128-bitowe instrukcje mmx czy ktoś mi w tym pomoże ?? zaradzi ?? dziękuję :D Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Burn Napisano Wrzesień 25, 2019 Zgłoś Udostępnij Napisano Wrzesień 25, 2019 Witam! Widzę że nie tylko ja z uczestników tego forum piszę w MASM :) W jakim dissasemblerze to sprawdziłeś? Bo to ważne ponieważ niektóre nie radzą sobie z instrukcjami pod nowe procesory np. ja mam coś takiego W W32Dasm ver. 8.93: 0F BYTE 0fh 10CA adc dl, dl 0F740E pcmpeqb mm1, dword ptr [esi] 66 BYTE 066h 0F BYTE 0fh D7 xlat C161EB33 shr ebx, 33 Czyli poprostu totalne siano :( Jak widać w ostatniej instrukcji W32Dasm próbuje C1 łaczyć z następnymi i dlatego wychodzi mi cos takiego. W OllyDbg ver. 1.04: 0F DB 0F 10CA ADC DL,CL 0F740E PCMPEQB MM1,QWORD PTR DS:[ESI] OFD7C1 PMOVMSKB EAX,MM1 Tu okazuje się że nie zna instrukcji MOVUPS więc czas na OllyDbg ver. 1.10: 0F10CA MOVUPS XMM1, XMM2 0F740E PCMPEQB MM1,QWORD PTR DS:[ESI] OFD7C1 PMOVMSKB EAX,MM1 Więc sprawdziłem w IA-32 Opcode Map 1.5 i mam coś takiego: PCMPEQB: Opcode: 0F 74 /r Memonics: PCMPEQB mm1,mm2/m64 Procesor: MMX Destription: Compare packed bytes for equality dalej patrząc mam coś takiego: Opcode: 66 74 D7 /r Memonics: PCMPEQB mm1,mm2/m128 Procesor: SSE2 Destription: Compare packed bytes for equality PMOVMSKB: Opcode: 0F D7 /r Memonics: PMOVMSKB reg32,mm Procesor: SSE Destription: Move mask byte to register niżej mam: Opcode: 66 0F D7 /r Memonics: PMOVMSKB reg32,xmm Procesor: SSE2 Destription: Move mask byte to register no to napisałem tak: .686 .XMM .model flat,stdcall option casemap:none ....... movups xmm(1),xmm(2) db 66h ;Właśnie to ma znaczenie pcmpeqb xmm(1),[esi] db 66h ;Właśnie to ma znaczenie pmovmskb eax,xmm(1) ....... I mam w OllyDbg ver. 1.10: 0F10CA MOVUPS XMM1, XMM2 66:0F740E PCMPEQB MM1,QWORD PTR DS:[ESI] 66:OFD7C1 PMOVMSKB EAX,MM1 Niby dalej twierdzi, że PCMPEQB MM1,QWORD PTR DS:[ESI] a nie PCMPEQB XMM1,QWORD PTR DS:[ESI] i PMOVMSKB EAX,MM1 a nie PMOVMSKB EAX,XMM1 widocznie on też nie obsługuje SSE2 :( No to pogrzebałem w internecie i znalazłem BDASM https://www.bdasm.com/binaries/bdasmv1d_setup.exe Uwaga: To jest wersja demo i obsługuje max 90000 linji kodu. Ale na potrzeby sprawdzenia wystarczyło. :) 0F10CA movups xmm1,xmm2 660F740E pcmpeqb xmm1, qword ptr [esi] 660FD7C1 pmovmskb eax,xmm1 Więc chyba jest OK. :D PS1: Sorry, że długo nie odpisywałem ale miałem problemy z wejściem na stronę mimo że ping wydawał sie niezły wiec nie wiem o co chodzi... PS2: Sorry, że ten post jest taki długi ale ma on na celu wyjaśnienie jak pradzić sobie z takimi problemami a nie tylko suchą odpowiedź Pozdrowienia Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Sasza Napisano Wrzesień 29, 2019 Autor Zgłoś Udostępnij Napisano Wrzesień 29, 2019 Hej :) Tym razem to ja przepraszam za zwłokę z mojej strony - różne rzeczy miały na nią wpływ :? Powiem od razu: Pomogłeś mi !!! i za to dziękuję - jestem wdzięczny :D A teraz do rzeczy: Mój debugger to VC++ 6.0 plus sp6 od wujka Billa Według mnie świetny debugger (w wersji z sp6) Jak opisywałem mój problem to miałem bez tego sp6 i wychodziło siano tak jak u Ciebie. Korzystałem też z WinDbg ale było to samo. Pokazałeś mi że w "naszym" masm32 trzeba "ręcznie" dopisac bajt 66h przed 128-bitowymi instrukcjami mmx :) i to jest rozwiązanie mojego problemu :) nie testowałem jeszcze SSE2 ani tym bardziej SSE3 bo narazie ich nie potrzebuję ale wiemy obaj że przynajmniej movups działa :) Pozdrawiam Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Sasza Napisano Wrzesień 29, 2019 Autor Zgłoś Udostępnij Napisano Wrzesień 29, 2019 Skleroza nie boli :( Mam jeszcze 2 małe pytanka 1. Dlaczego Masm32 koduje instrukcje BT jako 66 0F BA skoro powinno być tylko 0F BA 2. Jak szybko policzyć ilość "zapalonych" lub "zgaszonych" bitów w słowie Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Burn Napisano Wrzesień 29, 2019 Zgłoś Udostępnij Napisano Wrzesień 29, 2019 Witam! Tym razem nie pomogę :( 1. U mnie jest "normalnie" więc nie wiem dlaczego u Ciebie jest inaczej być może to wina wersji lub sposobu kompilacj. Ja mam MASM v. 8.2 a kompilacja: F:\MASM32\BIN\Ml.exe /c /coff test.asm F:\MASM32\BIN\Link.exe /SUBSYSTEM:WINDOWS test.obj 2. Niestety nie wiem Pozdrowienia Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Sasza Napisano Wrzesień 29, 2019 Autor Zgłoś Udostępnij Napisano Wrzesień 29, 2019 Inaczej koduje ale działa zgodnie z oczekiwaniem więc wszystko OK Dziękuję :) miłego dnia Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.