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

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

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

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