Wstęp
Kodowanie 16 bitowe
AAA
AAD
AAM
AAS
ADC
ADD
AND
ARPL
BOUND
BSF
BSR
BSWAP
BT
BTC
BTR
BTS
CALL
CBW
CDQ
CLC
CLD
CLI
CLTS
CMC
CMP
CMPS
CMPXCHG
CPUID
CWD
CWDE
DAA
DAS
DEC
DIV
ENTER
FADD
HLT
IDIV
IN
INC
INS
INT
INTO
INVD
INVLPG
IMUL
IRET
JA
JAE
JB
JBE
JC
JCXZ
JE
JECXZ
JG
JGE
JL
JLE
JMP
JNA
JNAE
JNB
JNBE
JNC
JNE
JNG
JNGE
JNL
JNLE
JNO
JNP
JNS
JNZ
JO
JP
JPE
JPO
JS
JZ
LAHF
LAR
LDS
LEA
LEAVE
LES
LFS
LGDT
LGS
LIDT
LLDT
LMSW
LOCK
LODS
LOOP
LOOPE
LOOPZ
LOOPNE
LOOPNZ
LSL
LSS
LTR
MOV
MOVS
MOVSX
MOVZX
MUL
NEG
NOP
NOT
OR
OUT
OUTS
POP
POPA
POPAD
POPF
POPFD
PUSH
PUSHA
PUSHAD
PUSHF
PUSHFD
RCL
RCR
REPE
REPNE
REPNZ
REPZ
RET
RETF
ROL
ROR
SAHF
SAR
SBB
SCAS
SETA
SETAE
SETB
SETBE
SETC
SETE
SETG
SETGE
SETL
SETLE
SETNA
SETNAE
SETNB
SETNBE
SETNC
SETNE
SETNG
SETNGE
SETNL
SETNLE
SETNO
SETNP
SETNS
SETNZ
SETO
SETP
SETPE
SETPO
SETS
SETZ
SGDT
SHL
SHLD
SHR
SHRD
SIDT
SLDT
SMSW
STC
STD
STI
STOS
STR
SUB
TEST
VERR
VERW
WAIT
WBINVD
XADD
XCHG
XLAT
XOR
Prefixes

OPCODE ASSEMBLER

Witam…

Opisane OPCODE nie zawiera tłumaczenie wszystkich rozkazów procesora – to tłumaczenie proszę szukać na innych stronach.
Strona nie zawiera również informacji o cyklach danego rozkazu – tego proszę szukać na innych stronach.
Strona nie zawiera informacji o tym, jakie tryby kodowania występują na komputerach klasy PC – o tym proszę poszukać na innych stronach.

OPCODE może występować na dzień dzisiejszy (rok 2012) w trzech formach: 16, 32 lub 64 bitowych. Moja strona zawiera informację o OPCODE wszystkich możliwych rozkazów, z których korzystają kompilatory, ale z pewnymi wyjątkami:
otóż żaden kompilator nie wygeneruje OPCODE typu:
80 D0 00 00 – ADC AX,0000
ponieważ taki sam zapis daje nam OPCODE:
15 00 00 – ADC AX,0000
Wyżej opisany przypadek można znaleźć w opisie OPCODE, ale są też takie gdzie rozkaz istnieje a nie pojawia się na liście OPCODE:
10 C0 – ADC AL,AL
to samo można zapisać używając OPCODE:
12 C0 – ADC AL,AL
Wyjątków takich jest bardzo dużo, ale ze względu na to, że żaden kompilator ich nie użyje nie zostały tutaj opisane.

Podczas tworzenia tej listy OPCODE zostało zastosowane kolorowanie po to, aby rozróżnić, które bajty odwołują się do adresu w pamięci a które bajty są zwykłymi liczbami, np.:
ADD AX,[0000] –oznacza, iż bajty te są adresem pamięci,
ADD AX,0000 –oznacza, że bajty te są liczbą dodaną do rejestru AX,
JMP 0000 –oznacza bajty, które służą do wskazania adresu skoku, zostało to odznaczone gdyż zapis typu:
                      E9 00 00 – JMP 0000
nie jest poprawnym zapisem gdyż skok ten nie wskazuje skoku do adresu 0000, OPCODE rozkazu JMP obliczany jest na podstawie przesunięcia wstecz lub do przodu.
Następnym fenomenem podczas tworzenia listy OPCODE jest fakt, że niektóre rozkazy pokrywają się ze sobą np.:
90 – XCHG AX,AX
oraz:
90 – NOP
Przeglądając listę poszczególnych rozkazów nie zauważymy takich zdarzeń, ale gdy przejrzymy listę wszystkich rozkazów to spotkamy się z zapisem:
90 – XCHG AX,AX /NOP
Co oznacza, że dany OPCODE posiada dwa lub więcej nazw rozkazów.
Istnieje też jeszcze kwestia działania rozkazów LOOP, LOOPE (LOOPZ), LOOPNE (LOOPNZ) gdyż jak wiadomo rozkaz ten zmniejsza rejestr CX lub ECX i przykładowo, gdy w trybie kodowania 16 bitowego używając kompilatora NASM użyjemy komendy:
loop adres
kompilator wygeneruje OPCODE: E2 XX, dopiero w momencie zapisu
loop adres,ecx
kompilator wygeneruje OPCODE: 67 E2 XX.
Wspominając o kompilatorach warto zwrócić uwagę, że można zapisać komendę:
xchg ax,bx
którą na liście znajdziemy, jako OPCODE: 87 C3, nie mniej kompilator użyje OPCODE: 93 gdyż niema znaczenia dla tego rozkazu, który operand zostanie zapisany, jako pierwszy.
Warto również wiedzieć, że kompilatory ułatwiają nam życie umożliwiając na przykład zapis:
mov eax,[eax*3]
co na liście OPCODE można znaleźć pod zapisem:
mov eax,[eax+eax*2]

W celu ułatwienia odczytu z listy OPCODE wszystkie rozkazy posiadają wskazanie na adres 0 lub też użytą liczbę, 0 jako operand. Wszelkie podane odwołania do liczb czy też adresu zostały zapisane w układzie szesnastkowym.

Jeszcze jedna tylko uwaga: osoby niemające pojęcia o programowaniu proszę nie wpisywać bezmyślnie komendy a następnie kompilować i uruchamiać powstałe programy gdyż grozi to uszkodzeniem komputera.





Polstronki

z tego co wiemy od stycznia 2012 oglądano nas: 242487 razy...

opracował AJOT 2007-2019