x x
  1. Strona Główna
  2. OPCODE dla asemblera
    • Kodowanie 16 bitowe
    • Kodowanie 32 bitowe
    • Kodowanie 64 bitowe
  3. Moje programy
    • Katalog Płyt Kompaktowych
    • Sortowanie plików
    • Turbo Maszynowy
    • Zmiana rozszerzeń
  4. Moje publikacje
    • HYKKER -Kamera IP
    • Pamiątki z Commodore 64
    • WINDOWS 7 w roku 2021
  5. Strefa autora
    • Kontakt
    • Księga gości
    • O mnie
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
CMPSB
CMPSD
CMPSW
CMPXCHG
CPUID
CS:
CWD
CWDE
DAA
DAS
DEC
DIV
DS:
ENTER
ES:
F2XM1
FABS
FADD
FCHS
FCLEX
FCOMPP
FCOS
FDECSTP
FINCSTP
FINIT
FLD1
FLDL2E
FLDL2T
FLDLG2
FLDLN2
FLDPI
FLDZ
FNOP
FPATAN
FPREM
FPREM1
FPTAN
FRNDINT
FS:
FSCALE
FSIN
FSINCOS
FSQRT
FTST
FUCOMPP
FXAM
FXTRACT
FYL2X
FYL2XP1
GS:
HLT
IDIV
IMUL
IN
INC
INSB
INSD
INSW
INT
INTO
INVD
INVLPG
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
LODSB
LODSD
LODSW
LOOP
LOOPE
LOOPNE
LSL
LSS
LTR
MOV
MOVSB
MOVSD
MOVSW
MOVSX
MOVZX
MUL
NEG
NOP
NOT
OR
OUT
OUTSB
OUTSD
OUTSW
POP
POPA
POPAD
POPF
POPFD
PUSH
PUSHA
PUSHAD
PUSHF
PUSHFD
RCL
RCR
REPE
REPNE
REPNZ
REPZ
RET
RETF
ROL
ROR
SAHF
SAR
SBB
SCASB
SCASD
SCASW
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
SS:
STC
STD
STI
STOSB
STOSD
STOSW
STR
SUB
TEST
VERR
VERW
WAIT
WBINVD
XADD
XCHG
XLAT
XOR

OPCODE ASSEMBLER

Witam…

Opisane OPCODE zawiera tłumaczenie wszystkich rozkazów procesora – nie zawiera natomiast opisu cykli omawianych komend, 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. Na stronie znajdziesz 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 opracowania tych list 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 – NOP
90 – XCHG AX,AX
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.


 


z tego co wiemy od stycznia 2012 oglądano nas: 444015 razy...opracował AJOT 2007-2025