Санкт-Петербургский государственный электротехнический университет
Отчёт по лабораторной работе №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*alax
Выполняет умножение содержимого источника (регистр или переменная) и регистра 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
