Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
М01_Архитектура.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

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

Ч/Зал.:= idiv word ptr [0146] Ділення вмісту DX:AX на числове значення Znam і запис частки

в регістр 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

4.4.4. Робота в середовищі налагоджувача

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

1010 000 0

0100 0001

0000 0001

- mod=00, r/m=110 - пряма адресація одного байта (w=0) пам'яті ds:0144 (джерело) - reg=000, w=0, d=1 -приймач al

Код опер. w адрес-млад. адрес-старш.

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

0000 00 1 0

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

- 26890

2

3

4

0

5

6

7

8

9

10

11

12

13

14

15

16

17

18

-(610*2)

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