HEX...

0

Kod programu w HEX:
B409BA0C01CD21B8004CCD216B61726F6C617124

Offset do 6B wynosi 0Ch. dlaczego kompilator wrzuca do DX 010Ch?? Ten program dziala poprawnie.

Druga sprawa

Mov AX, 1111h to B81111
mov BX, 1111h to BB1111
mov AX, BX

to 8BC3. Czy da sie to jakos wyliczyc??

0

Możesz jaśniej? Dawno nie widziałem tak naściemnianego postu...

0

Kod programu w HEX:
B409BA0C01CD21B8004CCD216B61726F6C617124

6B jest 12 (0Ch) bajtem tego kodu programu. Myslalem ze offset tez powinien wynosic, ale program nie zaczyna sie na poczatku segementu, tylko od 256 komorki. czyli trzeba dodac: 100h + 0Ch = 10Ch. ztym problemem se poradzielem.

Druga sprawa
robie taki zwykly programik:
...
mov AX, 1111
mov BX, 1111
...

Ogladam to w HexEdytorze i wiedze B81111( mov AX, 1111) i BB1111 (mov BX, 1111).
po kilku probach, doswiadczeniach wyciagnelem wnioski:

  1. Jezeli kopiujemy cos do rejestru AX to kompilator zamieni to na "B8xxxx"
    gdzie xxxxx to liczba w hex. czyli jezeli bedzie to 44h to kompilator zamienia na B844. jewzeli bedzie to 3344 to kompilator zamieni na "B84433".
    ale gdy do rejestru kopiuje zawartosc innego rejstru jest problem.
    mov AX, BX to 8BC3. nie mam pojecia jak to jest zrobione. Sa 2 mozliwosci:
  2. albo dla kazdej mozliwosci jest inna wartosc hex (mozliwosc, czyli kompinacja rejstrow, np mov BX, AX; mov CX, DX)
  3. wszystko mozna jakos wyliczyc.

Mam nadzieje, ze teraz wiecie o co mi chodzi :)

0

http://www.google.pl/search?hl=pl&ie=UTF-8&q=opcode+intel+x86&lr=
Obadaj strony Intela - tam jest wszystko opisane. Który rejestr zapisane jest an kilku bitach.

0

www.x86.pl tam znajdziesz dokumentację procesorów x86 i sposób kodowania opcodów instrukcji. Przyda Ci się też źródełko jakiegoś kompilatora - np. hasm z markosc.w.interia.pl

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