Sasza Napisano Wrzesień 24, 2019 Autor Zgłoś 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
Burn Napisano Wrzesień 25, 2019 Zgłoś 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
Sasza Napisano Wrzesień 29, 2019 Autor Zgłoś 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
Sasza Napisano Wrzesień 29, 2019 Autor Zgłoś 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
Burn Napisano Wrzesień 29, 2019 Zgłoś 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
Sasza Napisano Wrzesień 29, 2019 Autor Zgłoś Napisano Wrzesień 29, 2019 Inaczej koduje ale działa zgodnie z oczekiwaniem więc wszystko OK Dziękuję :) miłego dnia Cytuj
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.