[asembler] rozkaz maszynowy

0

mam taki rozkaz:

mov ax, 5

taki rozkaz jest zamieniany na kod maszynowy:

B8 05 00
to :
B8 - to kod operacji
05 - to argument
00 - nazwa rejestru?!

Poszczególne bajty liczb dwójkowych są odwracane w czasie zapisywania w pamięci, czyli do pamięci wprowadzone zostanie to w takiej kolejnosci:
00 05 B8 ?

0

Pierwszy bajt to opkod, specjalna forma - przypisanie do akumulatora. Pozostałe dwa bajty to word /wartość 16bit - tyle ma ax/ zapisane jako little-endian /najmłodszy bajt jako pierwszy, najstarszy jako ostatni/. Polecam zapoznanie się z manualami Intela.

0

Rozwinę trochę tą odpowiedz.

B8 - Tutaj jest zakodowany typ operacji jak i typ argumentu. W tym przypadku jest to słowo czyli dwa bajty.

Następne dwa bajty oznaczają wartość jaka zostanie przypisana do rejestru ax. No i właśnie biorąc pod uwagę odwrotny zapis liczb w pamięci to wartość 0005h do pamięci zostanie zapisana w formie:
05 00

Odwrotny zapis bajtów tyczy się tylko jeżeli w pamięci umieszczamy liczbę jako całość. Wtedy bajty z których się ona składa zostaną zapisane w odwrotnej kolejności.

0

aha, ok, rozumiem, czyli w B8 zakodowany jest zarówno rozkaz mov, jak i rejestr.

A jeszcze ciekawi mnie... jeśli mam taki kod:

mov ax, 5
add ax,10
add ax,20
mov [0120],ax
int 20

gdybym teraz w/w rozkazy procesora zapisała w kodzie maszynowym,
tzn dla pierwszej instrukcji było by:
1011_1000 0000_0101
dałoby rade jakoś to wprowadzić bezpośrednio do "procesora", jako gotowy kod maszynowy? jak tego dokonać?

0

Po pierwsze to
10111000 00000101 00000000
po drugie: co znaczy bezpośrednio? Można co najwyżej edytować pamięć przy pomocy debuggera. Debugger ma zwykle też moduł assemblera więc można wpisywać mnemoniki, które będą tłumaczone w locie na kod maszynowy.

0

heh, hmm, chodzi mi oto, że przedstawię program w postaci dwójkowej, nie jako kod asemblerowy, tylko w postaci dwójkowej, i aby móc tak stworzony kod uruchomić jako działający program,

coś jak kompilacja w HLL, tylko że tu nie będę kompilowała, bo procesor to już powinien zrozumieć ....

deus, napisałeś : 10111000 00000101 00000000, bo ax jest rejestrem 16 bitowym, i argument również taki musi być, dzięki za poprawienie, a te '_', to były bardziej po to , aby móc to łatwiej rozczytać - nawyki z "The Art of Assembly programming" - Randall'a Hyde'a ;)

0

W takim razie trzeba zapisać po prostu wartości bajtów, assembler je po prostu zapisze.

db 10111000b, 00000101b, 00000000b

"The Art of Assembly programming"? Nie polecam za bardzo. Jak dla mnie to przede wszystkim manuale Intela się liczą.

0

deus napisał

"The Art of Assembly programming"? Nie polecam za bardzo. Jak dla mnie to przede wszystkim manuale Intela się liczą.

nie polecasz? dlaczego? pewnie dlatego, że połowa tej książki to HLA..:(, też się trochę rozczarowałam, jednak wydaje mi się, że dla początkujących to jest dobre - nie takie straszne od razu ;),
a co sądzisz o "Asembler dla procesorów INTEL. Vademecum profesionalisty" - Kip'a R. Irvine'a ? bo mam chęć na tę książkę i wiele osób ją poleca, m.in. na helion'ie...

ps. a te manual'e Intel'a, to chyba raczej dla zaawansowanych, ale musiałabym zerknąć ;)

0

Głównie ze względu na HLA faktycznie. Ogólnie podejście w tej książce jest zbyt wysokopoziomowe. Podstawy są w sumie nawet nieźle opisane. "Asembler dla procesorów INTEL. Vademecum profesionalisty", hm, wyłącznie przeglądałem, nie czytałem... trochę ciężkie ale powinno dać solidne podstawy. Manuale Intela to dokumentacja techniczna, można się z niej niby wszystkiego nauczyć ale to dosyć trudne. W praktyce moja nauka asma opierała się o tutoriale i prace z debuggerem przy analizie oprogramowania, do tego manuale Intela i duużo praktyki. Przez około 3 lata pisałem praktycznie wszystko w assemblerze.

0

heh, no to faktycznie (3 lata), to robi wrażenie ;), ja niestety taki staż (może troszkę większy) mam w cpp;)

asembler jednak, ma tę moc w "sobie", wolę rozmawiać z ludźmi, ale z procesorem też można od czasu do czasu, a poza tym, to dla lepszego zrozumienia architektury PC asm jest bardzo przydatny, przynajmniej tak się dowiedziałam, nie jestem jeszcze na tym etapie, aby to oceniać ;)

dziękuję w każdym razie za pomoc i życzę miłego wieczorku ;)

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