- •1. Мета роботи
- •2. Порядок виконання роботи
- •4. Короткі теоретичні відомості
- •4.1. Оперативна пам'ять
- •4.2. Регістри
- •1. Мета роботи
- •2. Порядок виконання роботи.
- •2.1. Вивчити матеріал, наведений у пункті 4 - "Короткі теоретичні відомості".
- •3.1. Назва і мета лабораторної роботи.
- •4. Короткі теоретичні відомості.
- •4.1. Робочий цикл процесора.
- •4.2 Машинні команди
- •4.2.1 Режими адресації операндів (даних)
- •4.2.2. Формат команди процесора 8086
- •4.3 Програмування на машинному рівні
- •4.3.1 Формат команди мови асемблера в середовищі debug. Com
- •4.3.2 Команди мови асемблера
- •4.4. Приклади розробки і виконання програми на мові асемблера
- •6. Література
4.4. Приклади розробки і виконання програми на мові асемблера
4.4.1. Постановка задачі
Розробити
програму обчислення значення виразу:
де A=32d=20h, B=5, C=432d=1B0h і D=6 коефіцієнти виразу.
4.4.2. Вимоги до програми
Програму скласти на мові асемблера з явною адресацією операндів для введення, налагодження і виконання в середовищі сервісної програми debug.com.
Вихідні,
проміжні і результуючі
дані
розмістити в пам'яті ЕОМ, починаючи з
чергового за програмою параграфом.
Результуюче значення виразу,
що дорівнює
,
вивести на екран.
4.4.3. Розробка алгоритму і програми
а) Розподіл пам'яті
Коефіцієнти A, B, C, D і результат Y - це змінні величини, значення яких повинні бути розміщені в комірках пам'яті з чергового параграфа, що йде за програмою, яка робить обчислення.
Для написання програми нам знадобиться 16 машинних команд.
Якщо кожна з цих команд програми буде мати довжину навіть по чотири байти (16*4=64d=40h), а сама програма буде розташована в кодовому сегменті, починаючи із зміщення 0100h, то очікувана адреса першої вільної комірки пам'яті повинна бути : 0100h+40h=0140h.
Простор первинних
x0 x1 x2 x3 x4 x5 x6 x7
┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬
0x│ ADD │ ADD w │ ADD d │ADD d w│ ADD │ ADD w │ PUSH │ POP │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ ES │ ES │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
1x│ ADC │ ADC w │ ADC d │ADC d w│ ADC │ ADC w │ PUSH │ POP │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ SS │ SS │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
2x│ AND │ AND w │ AND d │AND d w│ AND │ AND w │SEGMENT│ DAA │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ ES │ │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
3x│ XOR │ XOR w │ XOR d │XOR d w│ XOR │ XOR w │SEGMENT│ AAA │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ SS │ │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
4x│ INC │ INC │ INC │ INC │ INC │ INC │ INC │ INC │
│ AX │ CX │ DX │ BX │ SP │ BP │ SI │ DI │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
5x│ PUSH │ PUSH │ PUSH │ PUSH │ PUSH │ PUSH │ PUSH │ PUSH │
│ AX │ CX │ DX │ BX │ SP │ BP │ SI │ DI │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
6x│PUSH A │ POP A │ BOUND │ ARPL │XXXXXXX│XXXXXXX│XXXXXXX│XXXXXXX│
│ 2 │ 2 │ 2 │ 2 │XXXX 3 │XXXX 3 │XXXX 3 │XXXX 3 │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
7x│ JO │ JNO │JB/JNAE│JNB/JAE│ JE/JZ │JNE/JNZ│JBE/JNA│JNBE/JA│
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
8x│ ... │ ...w │XXXXXXX│...d w │ TEST │ TEST w│ XCHG │ XCHG w│
│ │ │XXXXXXX│ │r/m,reg│r/m,reg│r/m,reg│r/m,reg│
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
9x│ XCHG │ XCHG │ XCHG │ XCHG │ XCHG │ XCHG │ XCHG │ XCHG │
│ AX,AX │ CX,AX │ DX,AX │ BX,AX │ SP,AX │ BP,AX │ SI,AX │ DI,AX │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
Ax│ MOV │ MOV w │ MOV │ MOV w │ MOVS │ MOVS w│ CMPS │ CMPS w│
│AL,mem │AX,mem │mem,AL │mem,AX │ │ │ │ │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
Bx│ MOV │ MOV │ MOV │ MOV │ MOV │ MOV │ MOV │ MOV │
│AL,imm │CL,imm │DL,imm │BL,imm │AH,imm │CH,imm │DH,imm │BH,imm │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
Cx│ ... │ ...w │RETnear│ RET │ LES │ LDS │ MOV │ MOV │
│ 2 │ 2 │ imm16 │ near │reg,r/m│reg,r/m│r/m,imm│r/m,imm│
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
Dx│ ... │ ...w │ ...v │... v w│ AAM │ AAD │XXXXXXX│ XLAT │
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
Ex│LOOPNZ/│ LOOPZ/│ LOOP │ JCXZ │ IN │ IN w │ OUT │ OUT │
│LOOPNE │ LOOPE │ │ │AL,port│AX,port│port,AL│port,AX│
├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼
Fx│ LOCK │XXXXXXX│REP/.NZ│REPE/.Z│ HLT │ CMC │ ... │ ...w │
└───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴
┌──────────────┬───────┬───────┬───────┬───────┬
│ Первичный │ Байт 2, биты
│ код операции │ 000 │ 001 │ 010 │ 011 │
Простор ├──────────────┼───────┼───────┼───────┼───────┼
│ 80 или 81 │ ADD │ OR │ ADC │ SBB │
вторинних ├──────────────┼───────┼───────┼───────┼───────┼
│ 83 │ ADD │ │ ADC │ SBB │
кодів ├──────────────┼───────┼───────┼───────┼───────┼
│ F6 или F7 │ TEST │ │ NOT │ NEG │
операцій ├──────────────┼───────┼───────┼───────┼───────┼
│ FE │ INC │ DEC │ │ │
МП 8086 ├──────────────┼───────┼───────┼───────┼───────┼
│ FF │ INC w │ DEC w │CALL nr│CALL fr│
└──────────────┴───────┴───────┴───────┴───────┴
кодів операцій МП 8086
x8 x9 xA xB xC xD xE xF
┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
│ OR │ OR w │ OR d │ OR w d│ OR │ OR w │ PUSH │XXXXXXX│
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ CS │XXX 2 3│
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ SBB │ SBB w │ SBB d │SBB d w│ SBB │ SBB w │ PUSH │ POP │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ DS │ DS │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ SUB │ SUB w │ SUB d │SUB d w│ SUB │ SUB w │SEGMENT│ DAS │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ CS │ │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ CMP │ CMP w │ CMP d │CMP d w│ CMP │ CMP w │SEGMENT│ AAS │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│ AL,imm│ AX,imm│ DS │ │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ DEC │ DEC │ DEC │ DEC │ DEC │ DEC │ DEC │ DEC │
│ AX │ CX │ DX │ BX │ SP │ BP │ SI │ DI │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ POP │ POP │ POP │ POP │ POP │ POP │ POP │ POP │
│ AX │ CX │ DX │ BX │ SP │ BP │ SI │ DI │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ PUSH │ IMUL │PUSH S │IMUL S │ INS │ INS w │ OUTS │OUTS w │
│ imm 2│ imm 2│ imm 2│ imm 2│ 2 │ 2 │ 2 │ 2 │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ JS │ JNS │ JP/JPE│JNP/JPO│JL/JNGE│JNL/JGE│JLE/JNG│JNLE/JG│
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ MOV │ MOV w │ MOV d │MOV d w│ MOV │ LEA │ MOV │ ... │
│r/m,reg│r/m,reg│reg,r/m│reg,r/m│r/m,seg│reg,r/m│seg,r/m│ │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ CBW │ CWD │ CALL │ WAIT │ PUSHF │ POPF │ SAHF │ LAHF │
│ │ │ far │ │ │ │ │ │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ TEST │ TEST w│ STOS │ STOS w│ LODS │ LODS w│ SCAS │ SCAS w│
│AL,imm │AX,imm │ │ │ │ │ │ │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ MOV │ MOV │ MOV │ MOV │ MOV │ MOV │ MOV │ MOV │
│AX,imm │CX,imm │DX,imm │BX,imm │SP,imm │BP,imm │SI,imm │DI,imm │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ ENTER │ LEAWE │RET far│ RET │ INT │ INT │ INTO │ IRET │
│ 2 │ 2 │ imm16 │ far │ type 3│ │ │ │
┼───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┤
│ ESC 0 ─ 7 287, 387, 486, 586. │
┼───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┤
│ CALL │ JMP │ JMP │ JMP │ IN │ IN w │ OUT │ OUT w │
│ near │ near │ far │ short │AL,dx │AX,dx │ dx,AL │ dx,AX │
┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
│ CLC │ STC │ CLI │ STI │ CLD │ STD │ ... │ ... w │
┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
┬───────┬───────┬───────┬───────┐
5, 4, 3 │
│ 100 │ 101 │ 110 │ 111 │
┼───────┼───────┼───────┼───────┤
│ AND │ SUB │ XOR │ CMP │
┼───────┼───────┼───────┼───────┤
│ │ SUB │ │ CMP │
┼───────┼───────┼───────┼───────┤
│ MUL │ IMUL │ DIV │ IDIV │
┼───────┼───────┼───────┼───────┤
│ │ │ │ │
┼───────┼───────┼───────┼───────┤
│ JMP nr│JMP far│ PUSH │ │
┴───────┴───────┴───────┴───────┘
Так як при завантаженні налагоджувача debug.com вміст CS дорівнює DS,.то в оперативній пам’ті, починаючи з адреси DS:0140, необхідно буде розташувати чисельні значення вихідних, проміжних і результуючих даних таким чином:
DS: 0140 0141 0142 0143 0144 0145 0146 0147 0148 0149 014A 014B 014C 014D
байт байт мбайт сбайт байт байт мбайт сбайт мбайт сбайт мбайт сбайт мбайт сбайт
2 0 |
F B |
B 0 |
0 1 |
F A |
? ? |
? ? |
? ? |
? ? |
? ? |
? ? |
? ? |
? ? |
? ? |
В и х і д н і д а н і . П р о м і ж н і д а н і Р е з у л ь т у ю ч і д а н і
A B C D Znam Chis Остача Частка
б) Розробка алгоритму і програми.
al:=Bбайт
mov al, [0141] Завантаження
числового значення коеф.
B із сегмента даних
у
регістр
AL процесора. Після
виконання команди:
AX=??FB
al:=al+Dбайт
add al, [0144] Додавання вмісту
AL із числовим значенням коеф.
D і запис
результату
в AL. Після
виконання команди:
AX=??F5
ax:=al*Bбайт
imul byte ptr [0141] Множення вмісту
AL на числове значення коеф.
B і запис
результату
в AX. Після
виконання команди:
AX=0037
Znam:=ax
mov [0146], ax Запис значення
знаменника в комірку
пам'яті.
al:=Dбайт
mov al, [0144] Завантаження
числового значення коеф.
D із сегмента даних
у
регістр
AL процесора. Після
виконання команди:
AX=00FA
ax:=Dслово
cbw Перетворення
байта коеф.
D у слово для роботи з коеф.
C .
Після
виконання команди:
AX=FFFA
ax:=ax+Cслово
add ax, [0142] Додавання вмісту
AX з коеф.
C і запис результату в
регістр
AX. Після
виконання команди:
AX=01AA
Chis:=ax
mov [0148], ax Запис значення
чисельника в комірка
пам'яті.
al:=Aбайт
mov al, [0140] Завантаження
числового значення коеф.
A із сегмента даних
у
регістр
AL процесора. Після
виконання команди:
AX=0120
al:=Aбайт
neg al Формування
негативного
значення коеф.
A
Після
виконання команди:
AX=01E0
ax:=Aслово
cbw Перетворення
байта коеф.
(
A ) у слово для роботи із значен-
ням
чисельника Chis. Після
виконання команди:
AX=FFE0
Пр:=ax*Chis
imul word ptr [0148] Формування
добутку в регістрах DX і AX
Після
виконання команди:
DX=FFFF, AX=CAC0
Ч/Зал.:=
в
регістр AX , а остачі від ділення
в регістр DX.
Після
виконання команди:
DX=FFD1, AX=FF09
ax:=ax+252
add ax, 00FC Додавання вмісту
AX із значенням 252 і запис результату
в
регістр
AX. Після
виконання команди:
AX=0005
Yціле:=ax
mov [014C], ax Запис значення
виразу
Yціле в комірку
пам'яті Частка.
Yостача:=dx
mov [014A], dx Запис значення
виразу
Yостача в комірку
пам'яті ОСТАЧА.
К і н
е ц ь int 20 Передача
управління
в debug.com
idiv word ptr [0146] Ділення вмісту DX:AX
на числове значення Znam і запис частки
1) Створимо середовище налагоджувача debug.com: F:\912\91205>debug.com, переглянемо вміст регістрів МП.
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0100 NV UP EI PL NZ NA PO NC
1DB6:0100 0F DB 0F
2) Введемо в мнемокодах асемблера команди програми, починаючи з адреси CS:0100:
{Адреса 1-іх} { К о м а н д и } { Довжина }
{байт команд} {п р о г р а м и} { команди }
-a cs:100
1DB6:0100 mov al, [0141] {3 байта}
1DB6:0103 add al, [0144] {4 байта}
1DB6:0107 imul byte ptr [0141] {4 байта}
1DB6:010B mov [0146], ax {3 байта}
1DB6:010E mov al, [0144] {3 байта}
1DB6:0111 cbw {1 байт}
1DB6:0112 add ax, [0142] {4 байта}
1DB6:0116 mov [0148], ax {3 байта}
1DB6:0119 mov al, [0140] {3 байта}
1DB6:011C neg al {2 байта}
1DB6:011E cbw {1 байт}
1DB6:011F imul word ptr [0148] {4 байта}
1DB6:0123 idiv word ptr [0146] {4 байта}
1DB6:0127 add ax, 00FC {3 байта}
1DB6:012A mov [014C], al {3 байта}
1DB6:012D mov [014A], dx {4 байта}
1DB6:0131 int 20 {2 байта}
3) Переглянемо вміст 33h=51d байт пам'яті, починаючи з байта CS : 0100, диасемблюючи (інтерпретуючи) їхні шістнадцяткові коди в мнемонічні команди мови асемблера: -u cs:100 L 33
{Адреса 1-іх} {Коди машиних} { К о м а н д и } { Код операції}
{байт команд} {команд в 16с/ч} {п р о г р а м и} { к о м а н д и }
1DB6:0100 A04101 MOV AL, [0141] A0
1DB6:0103 02064401 ADD AL, [0144] 02
1DB6:0107 F62E4101 IMUL BYTE PTR [0141] F6
1DB6:010B A34601 MOV [0146], AX A3
1DB6:010E A04401 MOV AL, [0144] A0
1DB6:0111 98 CBW 98
1DB6:0112 03064201 ADD AX, [0142] 03
1DB6:0116 A34801 MOV [0148], AX A3
1DB6:0119 A04001 MOV AL, [0140] A4
1DB6:011C F6D8 NEG AL F6
1DB6:011E 98 CBW 98
1DB6:011F F72E4801 IMUL WORD PTR [0148] F7
1DB6:0123 F73E4601 IDIV WORD PTR [0146] F7
1DB6:0127 05FC00 ADD AX, 00FC 05
1DB6:012A A34C01 MOV [014C], AX A3
1DB6:012D 89164A01 MOV [014A], DX 89
1DB6:0131 CD20 INT 20 CD
4) Визначимо призначення двійкових розрядів у декількох створених машинних командах (користуємось таблицею простору первинних і вторинних кодів операцій процесора 80x86 - стор.18-19).
-
приймач - al (w=0)
-
джерело - пряма адресація одного байта
(w=0)
пам'яті DS:0141
02064401
add reg, r/m
A04101 mov al,
mem |
0100 0001 |
0000 0001 |
- mod=00, r/m=110 - пряма
адресація одного байта (w=0) пам'яті
ds:0144 (джерело) - reg=000, w=0, d=1 -приймач al
F62E4101
imul r/m
-
mod=00, r/m=110 - пряма адресація одного
байта
(w=0) пам'яті ds:0141 (джерело)
приймач
- al (w=0); - байт
2, біти
5:3 =101,
тобто
imul r/m; - результат - ax
05FC00
add ax, дані
-
приймач - ax (w=1) - 2-3 байти є
без-
посередні
дані
в машинній
команді
F73E4601
idiv r/m
-
mod=00, r/m=110 - пряма адресація одного
слова
(w=1) пам'яті ds:0146 (джерело)
-
приймач - ax (w=1); - байт
2, біти
5:3=111
тоб
то
idiv r/m;
-
результат: частка
- ax, остача – dx
89164A01
mov mem, dx
-
джерело - dx (w=1); - приймач - адреса
слова (w=1) пам'яті DS:014A
98
cbw
-
поширення знака числа в регістрі
al на регістр ah, тобто перетворення
байта в слово
CD20 int 20
- вихід
із поточної програми і передача
управління
батьківській програмі, тобто
програми debug. com
|
00 000 110 |
0100 0100 |
0000 0001 |
Код оп. d w mod reg r/m адрес-мол. адрес-старш
1111 01 1 0 |
00 101 110 |
0100 0001 |
0000 0001 |
Код оп. d w mod imul r/m адрес-мол. адрес-старш
0000 010 1 |
1111 1100 |
0000 0000 |
Код опер. w дані дані (w=1)
1111 01 1 1 |
00 111 110 |
0100 0110 |
0000 0001 |
Код оп. d w mod idiv r/m адрес-мол. адрес-старш
1000 000 1 |
00 010 110 |
0100 1010 |
0000 0001 |
Код опер. w mod reg r/m адрес-мол. адрес-старш
1001 1000 |
Код операції
1100 1101 |
0010 0000 |
Код операції Тип переривання
5) Введемо з комірки DS:0140 значення коефіцієнтів A, B, C, D і код символу * рівний 2A (на плановане місце замість розташування проміжних і результуючих даних):
-e ds:0140 20 fb b0 01 fa 2a 2a 2a 2a 2a 2a 2a 2a 2a
6) Переглянемо вміст 14 байт пам'яті створеної області вихідних і інших даних: -d ds:0140 L е
шістнадцяткові з н а ч е н н я символьні значення
1DB6:0140 20 FB B0 01 FA 2A 2A 2A-2A 2A 2A 2A 2A 2A ....*********
7) Переглянемо вихідний дамп пам'яті (4E байт) перед виконанням програми: -d cs:100 L 4е
1DB6:0100 A0 41 01 02 06 44 01 F6 2E 41 01 A3 46 01 A0 44 . A... D... A. .F. .D
1DB6:0110 01 98 03 06 42 01 A3 48 01 A0 40 01 F6 D8 98 F7 ... .B. .H. .@... ..
1DB6:0120 2E 48 01 F7 3E 46 01 05 FC 00 A3 4C 01 89 16 4A . H. .>F... .. L... J
1DB6:0130 01 CD 20 8E C2 AC 8A D0 00 00 4E AD 8B C8 46 8A . . ... .... N... F.
1DB6:0140 20 FB B0 01 FA 2A 2A 2A 2A 2A 2A 2A 2A 2A ... .*********
Виділені тут групи байтів і одиничні байти являють собою машинні команди і вихідні дані нашої програми.
8) Виконаємо трасування введеної програми
8-1) Переглянемо вміст регістрів МП і переконаємося, що CS : IP вказують на першу команду програми: -r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0100 NV UP EI PL NZ NA PO NC
1DB6:0100 A04101 MOV AL, [0141] DS : 0141=FB
8-2) Виконаємо першу машинну команду A02001, тобто mov al, [0120], де [0120]=12h. -t
AX=00FB BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0103 NV UP EI PL NZ NA PE NC
1DB6:0103 02064401 ADD AL, [0144] DS:0144=FA
Бачимо, що AX містить тепер 00FBh, IP=0103 вказує на перший байт другої команди 02064401, тобто add al, [0144], а вміст комірки DS : 0144 = FA = 6 d.
8-3) Послідовно набираючи команду налагоджувача t і аналізуючи після кожної виконаної машинної команди вміст регістрів МП, порівнюємо очікувані й одержувані проміжні і кінцеві результати роботи програми:-t
AX=00F5 BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0107 NV UP EI NG NZ AC PE CY
1DB6:0107 F62E4101 IMUL BYTE PTR [0141] DS : 0141=FB
Дійсно : ( 5) + ( 6) = 11 або FB + FA = F5
-t
AX=0037 BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=010B NV UP EI PL NZ NA PE NC
1DB6:010B A34601 MOV [0146], AX DS : 0146=2A2A
Дійсно : ( 11) * ( 5) = 55 або 0037h
-t
AX=0037 BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=010E NV UP EI PL NZ NA PE NC
1DB6:010E A04401 MOV AL, [0144] DS:0144=FA
-t
AX=00FA BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0111 NV UP EI PL NZ NA PE NC
1DB6:0111 98 CBW
-t
AX=FFFA BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0112 NV UP EI PL NZ NA PE NC
1DB6:0112 03064201 ADD AX, [0142] DS : 0142=01B0
-t
AX=01AA BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0116 NV UP EI PL NZ NA PE CY
1DB6:0116 A34801 MOV [0148], AX DS:0148=2A2A
Дійсно : ( 6) + 432 = 426 або FFFA + 01B0 = 01AA
-t
AX=01AA BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0119 NV UP EI PL NZ NA PE CY
1DB6:0119 A04001 MOV AL, [0140] DS : 0140=20
-t
AX=0120 BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=011C NV UP EI PL NZ NA PE CY
1DB6:011C F6D8 NEG AL
-t
AX=01E0 BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=011E NV UP EI NG NZ NA PO CY
1DB6:011E 98 CBW
Дійсно : 0 32 = 32 або E0
-t
AX=FFE0 BX=0000 CX=0000 DX=FF49 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=011F NV UP EI NG NZ NA PO CY
1DB6:011F F72E4801 IMUL WORD PTR [0148] DS : 0148=01AA
-t
AX=CAC0 BX=0000 CX=0000 DX=FFFF SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0123 NV UP EI NG NZ NA PE NC
1DB6:0123 F73E4601 IDIV WORD PTR [0146] DS : 0146=0037
Дійсно : ( 32) * 426 = 13 632 або 3540h = FFFF CAC0
-t
AX=FF09 BX=0000 CX=0000 DX=FFD1 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0127 NV UP EI PL NZ NA PO CY
1DB6:0127 05FC00 ADD AX, 00FC
Дійсно : ( 13 632 ) div 55 = 247 або F7h = FF09
( 13 632 ) mod 55 = 47 або 2Fh = FFD1
-t
AX=0005 BX=0000 CX=0000 DX=FFD1 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=012A NV UP EI PL NZ AC PE CY
1DB6:012A A34C01 MOV [014C], AX DS : 014C=2A2A
Дійсно : ( 247 ) + 252 = 5 або ( F7h = FF09) + 00FC = 0005
-t
AX=0005 BX=0000 CX=0000 DX=FFD1 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=012D NV UP EI PL NZ AC PE CY
1DB6:012D 89164A01 MOV [014A], DX DS : 014A=2A2A
-t
AX=0005 BX=0000 CX=004E DX=FFD1 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0131 NV UP EI PL NZ AC PE CY
1DB6:0131 CD20 INT 20
-g Program terminated normally
-q
8-4) Переглянемо вихідний дамп пам'яті (4E байт) після виконання програми: -d cs:100 L 4е
1DB6:0100 A0 41 01 02 06 44 01 F6 2E 41 01 A3 46 01 A0 44 . A... D... A. .F. .D
1DB6:0110 01 98 03 06 42 01 A3 48 01 A0 40 01 F6 D8 98 F7 ... .B. .H. .@... ..
1DB6:0120 2E 48 01 F7 3E 46 01 05 FC 00 A3 4C 01 89 16 4A . H. .>F... .. L... J
1DB6:0130 01 CD 20 8E C2 AC 8A D0 00 00 4E AD 8B C8 46 8A . . ... .... N... F.
1DB6:0140 20 FB B0 01 FA 2A 37 00 AA 01 D1 FF 05 00 ... .*7... ....
Вміст слів за адресами CS:014C і CS:014A (або DS:014C і DS:014A) змінено на значення: 0005 і FFD1 = 2Fh = 47d.
8-5) Збережемо створений дамп пам'яті (4E байт) у файлі lr2.com на поточному каталозі (F:\912\91205) і покинемо налагоджувач debug.com.
1) -N lr2.сom 2) -r cx 3) -w cs:100 4) -q
CX 0000 Writing 0004E bytes
:004E
9) Завантаження в середовище налагоджувача debug.com створеної програми lr2.com і її виконання: F:\912\91205>debug.com lr2.com
-r
AX=0000 BX=0000 CX=004E DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0100 NV UP EI PL NZ NA PO NC
1DB6:0100 A04101 MOV AL, [0141] DS : 0141=FB
-g cs:0131 (виконання програми до адреси cs:0131)
AX=0005 BX=0000 CX=004E DX=FFD1 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DB6 ES=1DB6 SS=1DB6 CS=1DB6 IP=0131 NV UP EI PL NZ AC PE CY
1DB6:0131 CD20 INT 20
-d ds:140 L e
1DB6:0140 20 FB B0 01 FA 2A 37 00 AA 01 D1 FF 05 00
-q
5. Варіанти індивідуальних завдань до лабораторної роботи №2
а) Вирази:
№ |
Вирази |
№ |
Вирази |
№ |
Вирази |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18
|
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
б) Числові значення коефіцієнтів.
№ |
a |
b |
c |
d |
№ |
a |
b |
c |
d |
№ |
a |
b |
c |
d |
№ |
a |
b |
c |
d |
1 |
2345 |
-13131 |
- |
10 |
2 |
-170 |
45 |
5000 |
2 |
3 |
100 |
2 |
-9 |
12 |
4 |
-5 |
3 |
- |
-3 |
5 |
-20 |
30 |
13 |
-10 |
6 |
-5 |
16 |
- |
-3 |
7 |
435 |
-29 |
7 |
-6 |
8 |
600 |
-327 |
12 |
-4 |
9 |
10 |
- |
- |
-13 |
10 |
-7 |
32 |
-12 |
45 |
11 |
-2 |
- |
- |
23 |
12 |
123 |
-12 |
23 |
-18 |
13 |
-2 |
-12 |
12 |
-4 |
14 |
-12 |
7 |
-17 |
9 |
15 |
10 |
-4 |
6 |
-3 |
16 |
10 |
4 |
- |
-23 |
17 |
13 |
45 |
-7 |
7 |
18 |
13 |
-43 |
23 |
-8 |
19 |
12345 |
-1234 |
123 |
-12 |
20 |
12 |
-6 |
13 |
-7 |
21 |
3 |
-4 |
34 |
97 |
22 |
32 |
-5 |
432 |
-6 |
23 |
10 |
-45 |
40 |
-13 |
24 |
23 |
-65 |
21 |
-4 |
25 |
13 |
-23 |
25 |
-7 |
26 |
20 |
-2 |
45 |
-18 |
27 |
2 |
-5 |
7 |
-24 |
28 |
100 |
50 |
-15 |
-100 |
29 |
2 |
-6 |
- |
-8 |
30 |
23 |
-7 |
4 |
-34 |
31 |
10 |
-13 |
7 |
-7 |
32 |
45 |
-67 |
321 |
-7 |
33 |
45 |
-6 |
23 |
-47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

-
26890
0
-(610*2)