Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
01.05.2014
Размер:
176.13 Кб
Скачать

Санкт-Петербургский государственный электротехнический университет

Отчёт по лабораторной работе №4

по дисциплине «Организация и функционирование ЭВМ»

Вариант №10

Проверил:

Выполнил: Юбрин А.Н.

Шин Е.Д.

Санкт-Петербург

2002

1. Цель работы

Разработать на языке Ассемблер IBM PC две процедуры: одна - прямого и другая - обратного преобразования целого числа, заданного в регистре АХ ( или в паре регистров DХ:АX) в строку, представляющую его символьное изображение в заданной системе счисления (с учетом или без учета знака в зависимости от варианта задания). Строка должна храниться в памяти, а также выводиться на экран для индикации.

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

Пример для однобайтовых чисел:

Десятичное число в символ.виде Двоично-десят. упаков.число

+ 35 00110101

- 35 11001011

Требуется преобразовать 32 битное число в десятичную систему счисления.

Процедура прямого действия должна быть типа near и параметры должны передаваться через кадр стека. Процедура обратного действия должна быть типаfar и параметры должны передаваться через РОНы.

3. Выполнить программу в пошаговом режиме под управлением отладчика с фиксацией содержимого используемых регистров и ячеек памяти до и после выполнения команды. Результаты прогона программы должны быть представлены в отчете.

В лабораторной работе в основоном используются следующие дерективы:

Cmp

8086, сравнение.

cmp d, s; d-s

Сравнивает приемник и источник и устанавливает флаги. Сравнение осуществляется путем вычитания источника (число, регистр или пере­менная) из приемника (регистр или переменная; приемник и источник не могут быть переменными одновременно), причем результат вычита­ния никуда не записывается, единственным результатом работы этой команды оказывается изменение флагов CF, OF, SF, ZF, AF и PF. Обыч­но команду СМР используют вместе с командами условного перехода (Jcc).

Div:

8086, целочисленное деление без знака.

div bl; частное в al, остаток в ah

Выполняет целочисленное деление без знака AL, АХ или ЕАХ (в за­висимости от размера источника) на источник (регистр или перемен­ная) и помещает результат в AL, АХ или ЕАХ, а остаток - в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, аб­солютное значение остатка всегда меньше абсолютного значения дели­теля. Значения флагов CF, OF, SF, ZF, AF и PF после этой команды не определены, а переполнение или деление на ноль вызывает исключение #DE (ошибка при делении) в защищенном режиме и прерывание 0- в реальном.

Mul

8086, умножение чисел без знака.

mul bl; bl*alax

Выполняет умножение содержимого источника (регистр или пере­менная) и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно. Если старшая половина результата (АН, DX, EDX) содержит только нули (ре­зультат целиком поместился в младшую половину), флаги CF и OF ус­танавливаются в 0, иначе - в 1. Значение остальных флагов (SF, ZF, AF и PF) не определено.

Компиляция и линковка программы прошла без ошибок:

Таблица 1

Содержимое регистров при отладке программы в TurboDebuggerv3.1

Turbo Debugger Log

push DS ;Сохранение адреса начала PSP в стеке

ax 0000

bx 0000

cx 0000

dx 0000

si 0000

di 0000

bp 0000

sp FFFE

ds 5911

es 5911

ss 5921

cs 5929

ip 0117

sub AX,AX

ax 0000

bx 0000

cx 0000

dx 0000

si 0000

di 0000

bp 0000

sp FFFE

ds 5911

es 5911

ss 5921

cs 5929

ip 0119

push AX

ax 0000

bx 0000

cx 0000

dx 0000

si 0000

di 0000

bp 0000

sp FFFC

ds 5911

es 5911

ss 5921

cs 5929

ip 011A

mov AX,DATA

ax 5925

bx 0000

cx 0000

dx 0000

si 0000

di 0000

bp 0000

sp FFFC

ds 5911

es 5911

ss 5921

cs 5929

ip 011D

mov DS,AX

ax 5925

bx 0000

cx 0000

dx 0000

si 0000

di 0000

bp 0000

sp FFFC

ds 5925

es 5911

ss 5921

cs 5929

ip 011F

Xor ax,ax

ax 0000

bx 0000

cx 0000

dx 0000

si 0000

di 0000

bp 0000

sp FFFC

ds 5925

es 5911

ss 5921

cs 5929

ip 0121

mov SI, offset in_num+len-1

ax 0000

bx 0000

cx 0000

dx 0000

si 0006

di 0000

bp 0000

sp FFFC

ds 5925

es 5911

ss 5921

cs 5929

ip 0124

Xor cx,cx

ax 0000

bx 0000

cx 0000

dx 0000

si 0006

di 0000

bp 0000

sp FFFC

ds 5925

es 5911

ss 5921

cs 5929

ip 0126

mov cx, word ptr len-1 ; Загрузка длины строки

ax 0000

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0000

sp FFFC

ds 5925

es 5911

ss 5921

cs 5929

ip 0129

call string_to_dword

ax 0000

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0000

sp FFF8

ds 5925

es 5911

ss 5921

cs 5929

ip 0005

push BX

ax 0000

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0000

sp FFF6

ds 5925

es 5911

ss 5921

cs 5929

ip 0006

push BP

ax 0000

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0000

sp FFF4

ds 5925

es 5911

ss 5921

cs 5929

ip 0007

mov BP, 1

ax 0000

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0001

sp FFF4

ds 5925

es 5911

ss 5921

cs 5929

ip 000A

mov AL, [SI]

ax 0039

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0001

sp FFF4

ds 5925

es 5911

ss 5921

cs 5929

ip 000C

sub AL,'0'

ax 0009

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0001

sp FFF4

ds 5925

es 5911

ss 5921

cs 5929

ip 000E

Xor dx, dx

ax 0009

bx 0000

cx 0006

dx 0000

si 0006

di 0000

bp 0001

sp FFF4

ds 5925

es 5911

ss 5921

cs 5929

ip 0010

dec SI

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF4

ds 5925

es 5911

ss 5921

cs 5929

ip 0011

push AX

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF2

ds 5925

es 5911

ss 5921

cs 5929

ip 0012

push DX

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF0

ds 5925

es 5911

ss 5921

cs 5929

ip 0013

Xor dx,dx

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF0

ds 5925

es 5911

ss 5921

cs 5929

ip 0015

mov al,[SI]

ax 0039

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF0

ds 5925

es 5911

ss 5921

cs 5929

ip 0017

sub Al,'0'

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF0

ds 5925

es 5911

ss 5921

cs 5929

ip 0019

mov ah,0

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFF0

ds 5925

es 5911

ss 5921

cs 5929

ip 001B

push CX

ax 0009

bx 0000

cx 0006

dx 0000

si 0005

di 0000

bp 0001

sp FFEE

ds 5925

es 5911

ss 5921

cs 5929

ip 001C

mov CX,BP

ax 0009

bx 0000

cx 0001

dx 0000

si 0005

di 0000

bp 0001

sp FFEE

ds 5925

es 5911

ss 5921

cs 5929

ip 001E

push DX

ax 0009

bx 0000

cx 0001

dx 0000

si 0005

di 0000

bp 0001

sp FFEC

ds 5925

es 5911

ss 5921

cs 5929

ip 001F

push AX

ax 0009

bx 0000

cx 0001

dx 0000

si 0005

di 0000

bp 0001

sp FFEA

ds 5925

es 5911

ss 5921

cs 5929

ip 0020

push CX

ax 0009

bx 0000

cx 0001

dx 0000

si 0005

di 0000

bp 0001

sp FFE8

ds 5925

es 5911

ss 5921

cs 5929

ip 0021

mov CX,3

ax 0009

bx 0000

cx 0003

dx 0000

si 0005

di 0000

bp 0001

sp FFE8

ds 5925

es 5911

ss 5921

cs 5929

ip 0024

sal DX,1

ax 0009

bx 0000

cx 0003

dx 0000

si 0005

di 0000

bp 0001

sp FFE8

ds 5925

es 5911

ss 5921

cs 5929

ip 0026

sal DX,1

ax 0012

bx 0000

cx 0003

dx 0000

si 0005

di 0000

bp 0001

sp FFE8

ds 5925

es 5911

ss 5921

cs 5929

ip 0028

jnc noper0

ax 0012

bx 0000

cx 0003

dx 0000

si 0005

di 0000

bp 0001

sp FFE8

ds 5925

es 5911

ss 5921

cs 5929

ip 002B

loop shift3

ax 0048

bx 0000

cx 0000

dx 0000

si 0005

di 0000

bp 0001

sp FFE8

ds 5925

es 5911

ss 5921

cs 5929

ip 002D