- •А) Структура данных fstenv в 16- и 32-разрядном защищенном режиме
- •Примерная схема взаимодействия cpu и npu, при решении на них произвольной смеси команд
- •6.4. Базовые арифметические команды
- •6.5. Команды сравнения
- •6.6. Трансцендентные команды
- •6.7. Команды загрузки констант
- •6.8. Команды управления мсп
6.6. Трансцендентные команды
Трансцендентные команды предназначены для вычисления различных тригонометрических, логарифмических, показательных и гиперболических функций - sin(), cos(), tg() и т.п. В табл. 10 представлены команды трансцендентных операций МСП.
Таблица 10
Система команд трансцендентных операций МСП
КОМАНДЫ ТРАНСЦЕНДЕНТНЫХ ОПЕРАЦИЙ |
|||
Команда |
Описание |
Формальное описание |
Примечание |
FSIN |
Синус |
ST(0) sin [ST(0)] |
Операнд задается в радианах и должен лежать в диапазоне -263 - +263. |
FCOS |
Косинус |
ST(0) cos [ST(0)] |
|
FSINCOS |
Синус и косинус |
temp cos [ST(0)] ST(0) sin [ST(0)] |
|
Продолжение табл. 10
КОМАНДЫ ТРАНСЦЕНДЕНТНЫХ ОПЕРАЦИЙ |
|||
Команда |
Описание |
Формальное описание |
Примечание |
|
|
TOP TOP – 1 ST(0) temp |
|
FPTAN |
Частичный тангенс |
ST(0) tan [ST(0)] TOP TOP – 1 ST(0) 1.0 |
|
FPATAN |
Частичный арктангенс |
ST(1) arctan [ST(1)/ST(0)] TOP TOP + 1 |
Нет примечания |
F2XM1 |
|
ST(0) (2ST(0) – 1) |
|
FYL2X |
|
ST(1) ST(1)*log2ST(0) TOP TOP + 1 |
|
FYL2XP1 |
|
ST(1) ST(1)*log2(ST(0)+1) TOP TOP + 1 |
|
6.7. Команды загрузки констант
В табл. 11 представлены команды загрузки констант.
Таблица 11
Система команд загрузки констант
КОМАНДЫ ЗАГРУЗКИ КОНСТАНТ |
|
Команда |
Формальное описание |
FLD1 |
TOP TOP - 1 ST(0) 1.0 |
FLDZ |
TOP TOP – 1 ST(0) 0.0 |
FLDPI |
TOP TOP – 1 ST(0) π |
FLDL2E |
TOP TOP – 1 ST(0) log2 e |
FLDL2T |
TOP TOP – 1 ST(0) log2 10 |
FLDLG2 |
TOP TOP – 1 ST(0) log10 2 |
FLDLN2 |
TOP TOP – 1 ST(0) loge 2 |
6.8. Команды управления мсп
В табл. 12 представлены команды управления МСП. Многие из этих команд сохраняют в памяти и загружают в МСП большие объемы информации (весь или частичный контекст МСП) в определенном формате. Учитывая, что для выполнения данной лабораторной работы команды управления вряд ли понадобятся, здесь приводится только краткое словесное описание таких команд.
Таблица 12
Система команд управления МСП
КОМАНДЫ УПРАВЛЕНИЯ |
|
Команда |
Описание |
FINCSTP |
TOP TOP + 1 ; ST(0) не очищается |
FDECSTP |
TOP TOP – 1 |
FFREE |
все ST(i) помечаются как пустые |
FINIT |
инициализация МСП после проверки на наличие отложенных незамаскированных особых случаев |
FNINIT |
инициализация МСП без проверки особых случаев |
FCLEX |
сброс флагов особых случаев после проверки на наличие отложенных незамаскированных особых случаев |
FNCLEX |
сброс флагов особых случаев без проверки |
FSTCW m2byte |
сохранить CW после проверки на наличие отложенных незамаскированных особых случаев |
FNSTCW m2byte |
сохранит CW без проверки |
FSTSW m2byte
FSTSW ax |
сохранить SW в памяти после проверки на наличие отложенных незамаскированных особых случаев
- // - в регистре AX |
FNSTSW m2byte
FNSTSW ax |
сохранит SW без проверки
|
FLDCW m2byte |
загрузить CW из памяти |
FSTENV m14/m28byte |
сохранить управляющий контекст МСП после проверки на наличие незамаскированных особых случаев |
FNSTENV m14/m28byte |
сохранить управляющий контекст без проверки |
FLDENV m14/m28byte |
загрузить управляющий контекст МСП |
FSAVE m94/m108byte |
сохранить полный контекст МСП после проверки на наличие незамаскированных особых случаев |
FNSAVE m94/m108byte |
сохранить полный контекст без проверки |
FRSTOR m94/m108byte |
загрузить (восстановить) полный контекст МСП |
FWAIT |
тоже самое что WAIT |
FNOP |
пустая операция |
FXSAVE m512byte |
сохранить контекст FPU, MMX, XMM и MXCSR регистров |
FXRSTOR m512byte |
загрузить контекст FPU, MMX, XMM и MXCSR регистров |
Регистр состояния (Status)
Пример решения задачи определения машинного кода команды МП
Задано: машинная команда из состава системы команд МП i80x86 с заданным режимом адресации операндов. Разрядность данных указывается преподавателем.
Задание выполнить в следующей последовательности:
Расписать формат команды и привести описание правил ее выполнения с учетом заданных режимов адресации.
Вычислить значения эффективных и физических адресов операндов.
Выполнить команду теоретически на заданном пространстве значений ячеек памяти и регистров микропроцессора, включая его регистр состояния (расписать полученные значения).
Проверить результаты в турбо-отладчике TD.exe или в любом другом, поддреживающем микропроцессор ix86 (полученные результаты зафиксировать в отчет в виде соответствующих копий экрана)
Сделать выводы о работе. Оформить отчет по результатам выполнения задания 0.
Таблица 9.1
Варианты к заданию 0
Вар |
ID |
EA Reg, mod, rm, |
N |
COP |
Вар |
ID |
EA Reg, mod, rm, |
N |
COP |
Вар |
ID |
EA Reg, mod, rm, |
N |
COP |
Вар |
ID |
EA Reg, mod, rm, |
N |
COP |
|
|
1 |
0,1,0 |
2 |
1 |
|
4 |
3,0,2 |
3 |
18 |
|
2 |
3,0,7 |
2 |
3 |
|
2 |
7,2,6 |
2 |
12 |
|
|
2 |
0,0,1 |
1 |
2 |
|
5 |
4,2,3 |
1 |
19 |
|
7 |
3,2,3 |
3 |
2 |
|
3 |
7,1,7 |
3 |
13 |
|
|
3 |
0,2,2 |
3 |
3 |
|
6 |
4,1,5 |
2 |
20 |
|
1 |
4,1,5 |
1 |
4 |
|
4 |
7,0,3 |
1 |
14 |
|
|
4 |
1,1,3 |
1 |
4 |
|
7 |
4,0,6 |
3 |
21 |
|
2 |
4,0,6 |
2 |
5 |
|
5 |
2,0,5 |
2 |
15 |
|
|
5 |
1,0,5 |
2 |
5 |
|
1 |
5,2,7 |
1 |
22 |
|
3 |
4,2,7 |
3 |
6 |
|
6 |
3,1,6 |
3 |
16 |
|
|
6 |
1,2,6 |
3 |
6 |
|
2 |
5,1,5 |
2 |
23 |
|
4 |
5,1,1 |
2 |
7 |
|
7 |
4,2,3 |
1 |
17 |
|
|
7 |
4,2,7 |
1 |
7 |
|
3 |
5,0,6 |
3 |
24 |
|
5 |
5,0,5 |
3 |
1 |
|
1 |
5,0,2 |
2 |
18 |
|
|
1 |
4,0,7 |
2 |
8 |
|
4 |
6,2,7 |
1 |
25 |
|
6 |
5,2,3 |
1 |
2 |
|
2 |
5,1,1 |
3 |
19 |
|
|
2 |
3,0,6 |
3 |
9 |
|
5 |
7,0,0 |
2 |
26 |
|
7 |
6,0,2 |
3 |
3 |
|
3 |
6,0,0 |
3 |
20 |
|
|
3 |
6,2,5 |
1 |
10 |
|
6 |
7,1,1 |
3 |
27 |
|
1 |
6,1,1 |
2 |
4 |
|
4 |
2,2,5 |
2 |
21 |
|
|
4 |
6,1,6 |
2 |
11 |
|
7 |
6,0,2 |
1 |
28 |
|
2 |
6,2,5 |
1 |
5 |
|
5 |
2,1,1 |
1 |
22 |
|
|
5 |
5,0,3 |
3 |
12 |
|
1 |
6,1,3 |
3 |
29 |
|
3 |
7,0,3 |
3 |
6 |
|
6 |
1,1,2 |
3 |
23 |
|
|
6 |
5,2,2 |
1 |
13 |
|
2 |
7,2,3 |
2 |
30 |
|
4 |
7,1,2 |
2 |
7 |
|
7 |
4,0,7 |
2 |
24 |
|
|
7 |
5,1,1 |
3 |
14 |
|
3 |
2,1,1 |
1 |
1 |
|
5 |
7,2,7 |
1 |
8 |
|
7 |
1,1,7 |
1 |
25 |
|
|
1 |
7,2,0 |
2 |
15 |
|
4 |
2,0,0 |
2 |
2 |
|
6 |
0,1,6 |
3 |
9 |
|
6 |
6,2,3 |
1 |
26 |
|
|
2 |
3,2,0 |
2 |
16 |
|
5 |
2,2,2 |
3 |
3 |
|
7 |
1,1,1 |
2 |
10 |
|
5 |
3,2,1 |
2 |
27 |
|
|
3 |
3,1,1 |
1 |
17 |
|
6 |
3,1,6 |
1 |
4 |
|
1 |
0,2,0 |
1 |
11 |
|
4 |
3,1,7 |
3 |
28 |
Причем
код N определяет номер варианта из таблицы 9.2, регламентирующий разрядность данных;
код ID определяет исходное состояние регистров микропроцессора (таблица 9.3);
код EA регламентирует используемые в команде способы адресации (см. табл.9.4);
код COP задает мнемонику команды микропроцессора ix86, которую необходимо выполнить в Турбоотладчике(см. табл.9.5).
Таблица 9.2
N - Обрабатываемая разрядность данных
-
Вариант
1
2
3
Мнемоника
8
16
32
Таблица 9.3
ID - Исходные значения регистров и ячеек памяти
Вариант Регистры |
1 |
2 |
3 |
4 |
5 |
6 |
7
|
AX (000) CX (001) DX (010) BX (011) SP (100) BP (101) SI (110) DI (111) ES (00) CS (01) SS (10) DS (11) FP [AA] [AA+2] Disp8 Disp16 Data8(im8) Data16(im16) |
40EA E456 F341 2345 345E 8956 1289 AF3B 4657 3564 1256 9123 F290 FF44 F290 34 E341 E4 2734 |
4657 3564 1256 9123 E456 F341 345E 8956 1289 2F3B 4FC0 4FE0 FF05 1245 FF05 96 1051 17 FE45 |
4523 4512 A457 FE34 43EF 67FB ADEF 9856 7076 5444 4333 2111 F740 8945 F740 E9 2894 66 DEEF |
7076 5444 4333 2111 F740 4512 A457 FE34 43EF 67FB 43EF 67FB F341 5462 67FB C2 6211 49 EFDC |
223A 5DF2 FDAE FE34 AED2 1234 9834 7503 A45E 1231 4512 4320 F694 56F4 4512 56 A633 C2 1875 |
1234 9834 7503 A45E 1231 4512 4320 223A 5DF2 2DAE 2E34 2347 F284 34F2 2E34 F1 1404 31 9F9E |
1256 9123 40EA E456 43EF 67FB F740 4512 5444 4333 2345 345E F341 3445 4512 45 0C44 99 AAA1 |
Замечание. При 32-разрядном представлении данных в старшую часть регистра записать содержимое его младшей части: например, для первого варианта содержимое EAX в шестнадцатеричной записи будет равно 40EA40EA
Таблица 9.4
EA - cпособы адресации, разрешенные в 16-разрядном МП
┌────┬─────────────────────────────────────────────────────────────┐
│поле│ поле md ( mod ) │
│r/m ├──────────────┬───────────────────┬────────────────────┬─────┤
│ │ 00 │ 01 │ 10 │ 11 │
│ ├──────┬───────┼───────────┬───────┼────────────┬───────┼──┬──┤
│ │ ЕА │ сегм │ ЕА │ сегм │ ЕА │ сегм │0w│1w│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│000 │ BX+SI│data DS│BX+SI+disp8│data DS│BX+SI+disp16│data DS│Al│AX│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│001 │ BX+DI│data DS│BX+DI+disp8│data DS│BX+DI+disp16│data DS│Cl│CX│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│010 │ BP+SI│stackSS│BP+SI+disp8│stackSS│BP+SI+disp16│stackSS│Dl│DX│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│011 │ BP+DI│stackSS│BP+DI+disp8│stackSS│BP+DI+disp16│stackSS│Bl│BX│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│100 │ SI │data DS│ SI+disp8│data DS│ SI+disp16│data DS│Ah│SP│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│101 │ DI │data DS│ DI+disp8│data DS│ DI+disp16│data DS│Ch│BP│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│110 │disp16│data DS│ BP+disp8│stackSS│ BP+disp16 │stackSS│Dh│SI│
├────┼──────┼───────┼───────────┼───────┼────────────┼───────┼──┼──┤
│111 │ BX │data DS│ BX+disp8│data DS│ BX+disp16 │data DS│Bh│DI│
└────┴──────┴───────┴───────────┴───────┴────────────┴───────┴──┴──┘
w=0─┘ w=1
Таблица 9.5
COP - Команды микропроцессора фирмы Intel 80486
Вариант |
Мнемоника |
Вариант |
Мнемоника |
1 |
IMUL r/m |
16 |
SHL r/m,im8 |
2 |
CMP reg, r/m |
17 |
IMUL reg,r/m |
3 |
ADD r/m,reg |
18 |
SAR r/m,im8 |
4 |
SAL r/m,CL |
19 |
MUL reg,r/m,im8 |
5 |
NEG r/m |
20 |
SBB r/m, im8 |
6 |
AND r/m,im16 |
21 |
DIV r/m |
7 |
SBB reg, r/m |
22 |
SHR r/m,CL |
8 |
ROR r/m,CL |
23 |
SUB r/m, im16 |
9 |
XOR r/m,im16 |
24 |
ROL r/m,im8 |
10 |
RCR r/m,im8 |
25 |
IDIV r/m |
11 |
BTC r/m,im8 |
26 |
OR r/m, im16 |
12 |
CMPXCHG r/m, reg |
27 |
RCL r/m,CL |
13 |
XADD r/m,reg |
28 |
BTC r/m,reg |
14 |
ADC r/m,im8 |
29 |
SHLD r/m,reg,CL |
15 |
SHRD r/m,reg,CL |
30 |
SHRD r/m,reg,im8 |
Приведем краткие пояснения по выполнению задания
Пусть необходимо определить формат и выполнить команду
mov word ptr [bx+64h],dx
Из описания известно, что в такой записи команда микропроцессора ix86 имеет трехбайтовую структуру и выполняется на 16-разрядными операндами.
КОП Постбайт Смещение
┌7───────0┬7─────────0┬7─────────0┐
r/m <- reg │1000 100w│md reg r/m │ Disp 8 │
└─────────┴───────────┴───────────┘
1000 1001 01 010 111 0110 0100
8 9 5 7 6 4
Рис. 9.1 Формат команды MOV R/M,REG
Причем по этой команде микропроцессор должен взять 16-разрядное число из своего регистра DX и переслать это число в ячейку памяти, адрес которой определяется как SR:ЕА (SR – сегментный регистр, ЕА – эффективный адрес в пределах сегмента SR)
Первый байт (r/m <- reg) - 89h
Второй байт 01reg r/m - dx – 010b
r/m – 111b Итого – 01010111b или 57h
Третий байт disp8 - 64h
Следовательно формат команды – 89 57 64.
По данной команде содержимое регистра dx будет помещено в память по адресу ds: [bx+64h]. Вычислим значение абсолютного адреса.
Пусть ds – 5BE6h, bx – 23a8h.
Тогда EA = bx+64h = 23a8h + 0064h = 240Ch
AA = ds * 16 + EA = 5BE60h+0240Ch = 5E26Ch
В результате после выполнения команды содержимое ячейки памяти с адресом АА(или 36D0Ch) будет равно содержимому регистра dx.
Пример выполнения команды в TD.exe.
