Problem z win32asm

0

Przejde do konkretow. Wkleje kawalek kodu w ktorym wyrzucane sa bledy:
test pStan,0000010000b
jz a6
a6:
test pStan,0000100000b
jz a7
a7:
test pStan,0001000000b
jz a8
a8:
test pStan,0010000000b
jz a9
a9:
test pStan,0100000000b ;dokladnie tutaj wyrzuca mi invalid instruction operands
jz a0
a0:

a zmienna delkarowana tak pStan 10 dup (0)
Nie mam pojecia czemu wyrzuca mi tu ten blad:/ Pomocy

0

Jak dla mnie to bez sensu jest. Porównujesz liczbę (0001001b) z ciągiem znaków (pStan db 10 dup(0) ).
Nie możesz w ten sposób deklarować. To musi być pojedyncza liczba.

0

Ale to dziala! jesli nie jest 010000000b np test pStan,000000001b i jest ok! To mi deklaruje przeciez ciag 000000000 a w innej procedurze uzywam or pStan,00000001 i wstawiam bity. Mi chodzi o to ze mam sobie liczbe 9 bitowa i ustawiam w niej bity i sprawdzam je. Moze znasz inny sposob na to samo?

0

Bo ostatnia liczba jest większa niż 255 (zera wiodące są pomijane, w pozostałych).
Ale to i tak nie będzie Ci działać. Porównywane będzie jedynie z pierwszym bajtem w ciągu. Musisz albo inaczej zadeklarować pStan, albo inaczej sprawdzać.

0

czyli mam zadeklarowac tak pStan 1 dup(0,0,0,0,0,0,0,0,0)???

0

dobra ten problem nie istneieje bo robie to inaczej ale mam kolejny i bardzo glupi jak przeniesc wartosc zmiennej do zmiennnej? cos takiego jak mov. Obie sa typu db.

0

Np.
Zm1 db 123
Zm2 db 21

mov al, Zm1
mov Zm2, al

Uczyłeś się chociaż podstaw asm?

0

O to chodzi ze ja nie chce korzystac z rejestrow!

[dopisane]
Ale nie wazne juz bo i to zrobilem w inny sposob. Dzieki za odpowiedzi.

0

Co do przypisania jednej zmiennej do drugiej bez użycia rejestrów, to użyj stosu:
[code]push zm1
pop zm2[/code]
lub dla ułatwienia wrzuć sobie takie makro:
[code]m2m MACRO M1, M2
  push M2
  pop M1
ENDM[/code]
użycie:
[code]m2m zm2,zm1[/code]

A jeśli chodzi o zmienną pStan, to taka deklaracja
[code]pStan 1 dup(0,0,0,0,0,0,0,0,0)[/code]
nie ma racji bytu. Jeśli chcesz mieć zmienną 9-bitową, to musisz zadeklarować słowo (2 bajty):
[code]pStan dw 0[/code]
i wtedy
[code]test pStan,00100000b[/code]
testuje młodszą połówkę pStan, a
[code]test pStan+1,0000100000b[/code]
testuje starszą połówkę.

Jeśli będziesz uznawał pStan za słowo, to 9 bit Twojej zmiennej prawdopodobnie lepiej będzie wstawić do starszej połówki, natomiast jeśli pStan uznasz za ciąg 2 bajtów, to ten 9 bit wstaw do pierwszego bajtu. Takie podejście wydaje mi się rozsądne.

P.S. Dlaczego ten tag [ code ] wstawia tyle denerwujących odstępów? :-8

0

Co do przypisania jednej zmiennej do drugiej bez użycia rejestrów, to użyj stosu:
[code]push zm1
pop zm2[/code]

Ale ze zmienną typu byte to chyba nie przejdzie :)

P.S. Dlaczego ten tag [ code ] wstawia tyle denerwujących odstępów? :-8

Szkoda, że ten skrypt Vogela nie działa. Tak to by się napisało kolorowanie składni dla C, asm i wielu innych. I zamiast code używałbyś tego. A ten przycisk code to trzeba zamienić na inne.

0

Szkoda, że ten skrypt Vogela nie działa. Tak to by się napisało kolorowanie składni dla C, asm i wielu innych. I zamiast code używałbyś tego.

Z tego co wiem działa: sam testowałem :) Niech go Adam wreszczie wstawi :)

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