Скачиваний:
148
Добавлен:
11.02.2014
Размер:
108.03 Кб
Скачать

Лабораторная работа №6

Задание 1.

Поместите инструкцию RCL BL,1 по адресу 100, занесите в регистр число B7, выполняйте инструкцию циклического сдвига, каждый раз записывая значения флага С и содержимого BL в шестнадцатеричном и двоичном формате в таблицу до восстановления исходного значения регистра.

Полученные искомые значения

С

Значения битов регистра BL

BL

7

6

5

4

3

2

1

0

NC(0)

1

0

1

1

0

1

1

1

B7

CY(1)

0

1

1

0

1

1

1

0

6E

NC(0)

1

1

0

1

1

1

0

1

DD

CY(1)

1

0

1

1

1

0

1

0

BA

CY(1)

0

1

1

1

0

1

0

1

75

NC(0)

1

1

1

0

1

0

1

1

EB

CY(1)

1

1

0

1

0

1

1

0

D6

CY(1)

1

0

1

0

1

1

0

1

AD

CY(1)

0

1

0

1

1

0

1

1

5B

NC(0)

1

0

1

1

0

1

1

1

B7

Как видно из таблицы, после восьми сдвигов через перенос значение в регистре становится исходным.

Задание 2.

Напишите инструкции, выполнение которых приведет к выводу на экран значения бита переноса в виде цифры (символы 0 и 1, соответствующие коды 30h и 31h).

0B83:0100 B80000 MOV AX,0000

0B83:0103 153000 ADC AX,0030

0B83:0106 88C2 MOV DL,AL

0B83:0108 B402 MOV AH,02

0B83:010A CD21 INT 21

0B83:010C CD20 INT 20

(Файл 62.com)

Задание 3

Напишите программу, которая выводит на экран в двоичном представлении число, записанное в регистре BL.

Примем, что BL=B7h (10110111b), тогда программа примет вид:

0B83:0100 B3B7 MOV BL,B7

0B83:0102 B90800 MOV CX,0008

0B83:0105 D0D3 RCL BL,1

0B83:0107 B000 MOV AL,00

0B83:0109 153000 ADC AX,0030

0B83:010C 88C2 MOV DL,AL

0B83:010E B402 MOV AH,02

0B83:0110 CD21 INT 21

0B83:0112 E2F1 LOOP 0105

0B83:0114 CD20 INT 20

(Файл 63.com)

Задание 4.

Используя операцию вычитания, проанализируйте изменение значения флага Z в зависимости от равенства 0 результата операции.

Проанализируйте изменение значения флага S в зависимости от знака результата операции вычитания.

Используя операцию сложения, проанализируйте изменение значения флага O в зависимости от того, привела ли операция к переполнению (несоответствующему изменению знакового флага S)

При вычитании, если результат равен нулю (0003-0003) – устанавливается значение флага Z (ZR), иначе (0004-0002) – сбрасывается (NZ)

При вычитании, если результат отрицательный (0002-0005) – устанавливается значение флага S (NG), иначе (0006-0005) – сбрасывается (PL)

При сложении, если результат переполняется (FFFE+000C>FFFF), то устанавливается значение флага О (OV), иначе – сбрасывается (NV).

Задание 5.

Составьте программу обнуления регистра AX, в котором исходно записано некоторое число.

Программа проверяет, если результат от вычитания нуля из AX результат по-прежнему останется ненулевым – присваиваем AX ноль, иначе – переходим дальше.

0100 BB0000 MOV BX,0000

0103 29D8 SUB AX,BX

0105 7403 JZ 010A

0107 B80000 MOV AX,0000

010A 0000 ...

Задание 6.

Проанализируйте изменения флагов при сравнении разных чисел и составьте таблицу:

AX

BX

Флаги-значения

7FFD

0040

NV UP EI PL NZ NA PE NC

0004

0040

NV UP EI NG NZ NA PO CY

0004

0004

NV UP EI PL ZR NA PE NC

Флаги соответствуют вычитанию AX-BX

Флаг S AX>BX

Флаг Z – AX =BX

Флаг C AX<BX

Задание 7.

Составьте блок-схему и напишите на ассемблере программу, которая берет одну цифру младшего разряда из регистра BL (в BX записано число Аh) и выводит ее на экран (в шестнадцатеричном представлении).

Блок-схема:

Программа:

0B83:0100 BB0A00 MOV BX,000A

0B83:0103 89D8 MOV AX,BX

0B83:0105 80FB0A CMP BL,0A

0B83:0108 7C03 JL 010D

0B83:010A 050700 ADD AX,0007

0B83:010D 053000 ADD AX,0030

0B83:0110 88C2 MOV DL,AL

0B83:0112 B402 MOV AH,02

0B83:0114 CD21 INT 21

0B83:0116 CD20 INT 20

(Файл 67.com)

Задание 8.

Занесите в регистр DX число 72h

Проанализируйте результат выполнения оператора SHR DL,CL при значениях в регистре CL равных 1, 2,4, представьте результат в виде таблицы.

72h= 01110010b

CL=1

№ выполнения сдвига

Биты DL

Флаг C

7

6

5

4

3

2

1

0

1(DL=39)

0

0

1

1

1

0

0

1

NC

2(DL=1C)

0

0

0

1

1

1

0

0

CY

Очевидно, происходит сдвиг числа вправо на один бит

CL=2

№ выполнения сдвига

Биты DL

Флаг C

7

6

5

4

3

2

1

0

1(DL=1С)

0

0

0

1

1

1

0

0

CY

2(DL=7)

0

0

0

0

0

1

1

1

NC

происходит сдвиг числа вправо на два бита

CL=4

№ выполнения сдвига

Биты DL

Флаг C

7

6

5

4

3

2

1

0

1(DL=7)

0

0

0

0

0

1

1

1

NC

2(DL=0)

0

0

0

0

0

0

0

0

NC

происходит сдвиг числа вправо на четыре бита

Последний перенесенный вправо бит запоминается во флаге переноса.

Какой сдвиг нужно выполнить, чтобы перевести цифру старшего разряда числа 72h в позицию младшего разряда? Какая цифра будет при этом записана в старшем разряде числа BL?

Для перевода старшей цифры (7) в младший, надо произвести 4 сдвига вправо, тогда старшая цифра станет равной нулю.

Задание 9.

Составьте программу, которая выводит на экран двузначное число из регистра BL, записанное в шестнадцатеричном формате.

Возьмем BL=D5

0B83:0100 B3D5 MOV BL,D5

0B83:0102 B104 MOV CL,04

0B83:0104 88D8 MOV AL,BL

0B83:0106 D2E8 SHR AL,CL

0B83:0108 3C0A CMP AL,0A

0B83:010A 7C02 JL 010E

0B83:010C 0407 ADD AL,07

0B83:010E 0430 ADD AL,30

0B83:0110 88C2 MOV DL,AL

0B83:0112 B402 MOV AH,02

0B83:0114 CD21 INT 21

0B83:0116 80E30F AND BL,0F

0B83:0119 80FB0A CMP BL,0A

0B83:011C 7C03 JL 0121

0B83:011E 80C307 ADD BL,07

0B83:0121 80C330 ADD BL,30

0B83:0124 88DA MOV DL,BL

0B83:0126 B402 MOV AH,02

0B83:0128 CD21 INT 21

0B83:012A CD20 INT 20

Начиная со смещения 116 программа выводит младшую цифру, до этого – старшую

(Файл 69.com)