Процессоры командаларыны форматтары

8086 процессорыны машиналы командалары 1 байттан 6 байта дейін орын алады. Ол командаларда сол команданы орындайтын амалыны коды (АКод) жне осы командаа атысты операндтар жазылады. АКод бір немесе екі байт орын алады. Амалдарды кодтау шін бір байтта кескіндеуге болатын 256 ртрлі кодтар жеткіліксіз. Сол себепті кейбір командалар бір топа біріктіріліп олара бір код беріледі де, ол код бірінші байта жазылады, ал екінші байта ол код айындалады. Сонымен атар екінші байтта операндтарды типтері жне оларды адрестелу жолдары крсетіледі.

8086 процессорыны командалары 0, 1 немесе 2 операндты болуы ммкін. Операндтарды лшемі – байт, сз немесе екіеселі сз болып келеді. Операнд команданы зінде (ондай оперантты тікелей оперант деп атаймыз) крсетілуі, немесе регистрлерді бірінде орналасуы ммкін, онда ол командада сол регистр крсетіледі, немесе жад яшыында жатуы ммкін, онда командада андай да бір тсілмен сол яшыты адресі крсетіледі. Кейбір командалар операндтарды белгілі бір жерде (мысалы, АХ регистірінде) орналасуын талап етеді, ол жадайда операнд командада айын крсетілмейді. Команданы орындалу нтижесі регистрге немесе жад яшыына жазылады.

Машиналы командаларды кескінделу трлері сан алуан. Мысал ретінде екі операндты командаларды негізгі трлерін ана арастырамыз.

1) “Регистр –регистр ” форматы(2 байт):

АКод D w   1 1 Reg1 Reg2
7-2   7 6 5-3 2-0

Бл форматты команданы орындалу реті:

reg1:=reg1 reg2 немесе reg2:=reg2 reg1,

мндаы reg1, reg2 - жалпы регистрлер, бірінші байттаы АКод орындалатын амалды ( ) крсетеді. W-биті операндаларды лшемін, ал d-биті нтижені ай регистрге жазылатынын крсетеді:

1-сздер 1 - reg1:=reg1*reg2

W = d =

0-байттар 0 - reg2:=reg2*reg1

Екінші байтта сол жа екі байтты маынасы траты (осы формат шін), ал ш битты reg1 жне reg2 айматары амала атысатын регистрлерді крсетеді, олар тмендегі кестеге сйкес аныталады:

reg w=1 w=0
AX AL
CX CL
DX DL
BX BL
SP AH
BP CH
SI DH
DI BH

2) “Регистр –жад ” форматы(2-4 байт):

АКод d w   mod reg mem   adr(0-2 байт)
7 2   5 3    

Бл форматты команданы орындалу реті:

reg:=reg adr немесе adr:= adr reg,

мндаы reg - регистр, ал adr – жад яшыы, бірінші байттаы АКод орындалатын амалды ( ), W-биты операндаларды лшемін, ал d-биты нтижені айда жазылатынын крсетеді (егер d=1 болса регистрге, ал d=0 болса жад яшыына). Екінші байтты ш битты reg аймаы операнд-регистрді, екі битты mod - аймаы операнд-адрес командада анша байт (00-0 байт, 01-1 байт, 10-2 байт) орын алатынын, ал ш битты mem аймаы осы адресті модификациялану тсілін крсетеді. Келесі кестеде mod жне mem айматарыны мндеріне байланысты орындалу адрестеріні есептелу ережелері крсетілген. Мнда а8-1 байтты адрес, а16-сз лшемді адрес, [r]- r регистріні рамы:

Mem \ mod
[BX]+[SI] [BX]+[SI]+a8 [BX]+[SI]+a16
[BX]+[DI] [BX]+[DI]+a8 [BX]+[DI]+a16
[BP]+[SI] [BP]+[SI]+a8 [BP]+[SI]+a16
[BP]+[DI] [BP]+[DI]+a8 [BP]+[DI]+a16
[SI] [SI]+a8 [SI]+a16
[DI] [DI]+a8 [DI]+a16
А16 [BP]+a8 [BP]+a16
[BX] [BX]+a8 [BX]+a16

Ескерту. Егер командада адрес берілмесе, онда ол 0-ші адрес болып есептелінеді. Егер адрес байт (а8) трінде берілсе, онда ол сзге (а16) дейін автоматты трде зартылады. Mod=00 жне mem=110 регистр-модификаторларды жотыын крсетеді, ол кезде адрес сз лшемді болуы ажет. Mod=11 жадайы “реистр-регистр” форматына сйкес.

3) “Регистр –тікелей операнд ” форматы(3-4 байт):

АКод s w   1 1 АКод’ reg   imem(1-2байт)
7 2   7 6 5 3 2 0    

Бл форматты команданы орындалу реті:

reg:=reg * imem

мндаы imem - тікелей операнд, reg – регистр-операнд, w-биті операндтарды лшемін крсетеді. Бірінші байттаы Акод, тек командада орындалатын амал кіретін амалдар тобын крсетеді, ал амалды екінші байттаы АКод’ рісі айындайды. Тікелей-операнд 1 немесе 2 байт (w-ні мніне байланысты) орын алуы ммкін, мнда командада сз лшемді операнд «кері» трде жазылады. Жадты немді пайдалану шін амалдар сздермен орындаанда тікелей-операнд байтпен берілу ммкіндігі арастырылан (бны w=1 боландаы, s битындаы 1 крсетеді). Сонда амалды орындар алдында байт автоматты трде сзге дейін кеейтіледі.

4) “Жады –тікелей операнд ” форматы(3-6 байт):

АКод s w   1 1 АКод¢ mem   adr(0-2 байт)   imem(0-2 байт)
7 2   7 6 5 3 2 0        

Бл форматты команданы орындалу реті:

adr:=adr*imеm

Барлы айматарыны маынасы алдында крсетілген форматтардаыдай.

Осы арастырылан форматтардан машиналы командаларды цифрлы кодын жазу аншалыты ыайлы еместігін креміз. Мліметтерді жазуда да иыншылытар туындайды: мысалы, табалы сандарды асымша кодта, сол сияты «ауыстырып» кескіндеуге тура келеді.