3. Выполнение работы
3.1 Ответы на вопросы:
1. Чем отличается сложение чисел в соответствии с ГСА от операции, реализуемой командой SUB Ri?
SUB
Ri
позволяет непосредственно вычесть из
аккумулятора содержимое РОН или ячейки
памяти (A=A-Ri)
и результат вычитания занести в А
(сложить в дополнительном коде А=А+[(
)+1]
без учета знака вычитаемого).
2. Как устанавливается "низ" стековой памяти, и какую область ОЗУ она будет занимать?
"Низ" стека фиксируется установкой его адреса в SP командой SPHL (SPHL передает в указатель стека содержимое регистровой пары H, L).
3. Какие функции выполняет команда RET?
RET выполняет безусловный возврат к команде основной программы: её адрес загружается из вершины SP стековой памяти, к указателю стека прибавляется 2.
4. Прокомментируйте содержание подпрограммы перевода чисел в дополнительный код.
Подпрограмма перевода чисел в дополнительный код осуществляет следующие операции. Число, хранимое в аккумуляторе, сдвигается циклически через разряд СУ регистра F влево на один разряд; если СУ = 0, т.е. число положительное, то оно сдвигается вправо; если СУ = 1, т.е. число отрицательное, то содержимое аккумулятора инвертируется, сдвигается вправо, а затем к нему прибавляется 1.
5. Какую операцию выполняет команда PUSH PSW?
PUSH PSW – команда занесения в стек слова состояния процессора. Она помещает в М(SP-1) содержимое А, а в ячейку М(SP-2) содержимое F, причем разрядам ячейки М(SP-2) присваиваются b0СУ, b2P, b4АС, b6Z, b7S.
6. При помощи, каких команд можно занести содержимое РОН в стековую память?
Занести содержимое РОН в стековую память можно с помощью команды PUSH RP (помещает содержимое регистровой пары RP в стек), SPHL (передает в указатель стека содержимое регистровой пары H, L).
3.2. Перевод чисел из десятичной в двоичную и шестнадцатеричную системы счисления:
X(10) = 7.11
X(2) = 111.000111000010
X(16) = 7.1C2
X*(2) = 0011 1000 (коэффициент фиксации = 3)
X*(2)д = 0011 1000
X*(16) = 38
X*(16)д = 38
Y(10) = -18.3
Y(16) = -90.4C
Y(2 )= -10010.010011001100
Y*(2) = 1100 1001 (коэффициент фиксации = 3)
Y*(16) = C9
Y*(2)д = 1011 0110 + 20 = 1011 0111
Y*(16)д = B7
3.3 Уточненный алгоритм вычислений:

3.4 Программа вычисления операции [Z]д = [X]д + [-Y]д:
|
Адрес |
Команда |
Код |
A |
C |
H, L |
82 | ||
|
0B |
0C |
0D | ||||||
|
82FE 82FF 8300 |
STC CMC LXI H, VV |
37 3F 21 |
|
|
|
|
|
|
|
8301 |
|
0B |
|
|
|
|
|
|
|
8302 |
|
82 |
|
|
|
|
|
|
|
8303 |
MVI M, V |
36 |
|
|
820B |
|
|
|
|
8304 |
|
38 |
|
|
|
38 |
|
|
|
8305 |
INX H |
23 |
|
|
820C |
|
|
|
|
8306 |
MVI M, V |
36 |
|
|
|
|
|
|
|
8307 |
|
C9 |
|
|
|
|
C9 |
|
|
8308 |
DCX H |
2B |
|
|
820B |
|
|
|
|
8309 |
MOV C, M |
4E |
|
38 |
|
|
|
|
|
830A |
MOV A, C |
79 |
38 |
|
|
|
|
|
|
830B |
CALL 8400 |
CD |
|
|
|
|
|
|
|
830C |
|
00 |
|
|
|
|
|
|
|
830D |
|
84 |
38 |
|
|
|
|
|
|
830E |
MOV C, A |
4F |
|
38 |
|
|
|
|
|
830F |
INX H |
23 |
|
|
820C |
|
|
|
|
8310 |
MOV A, M |
7E |
C9 |
|
|
|
|
|
|
8311 |
CALL 8400 |
CD |
|
|
|
|
|
|
|
8312 |
|
00 |
|
|
|
|
|
|
|
8313 |
|
84 |
B7 |
|
|
|
|
|
|
8314 |
ADD C |
81 |
EF |
|
|
|
|
|
|
8315 |
INX H |
23 |
|
|
820D |
|
|
|
|
8316 |
MOV M, A |
77 |
|
|
|
|
|
EF |
|
8317 |
RST 4*8 |
E7 |
|
|
|
|
|
|
Подпрограмма перевода числа в аккумуляторе в дополнительный код:
|
Ячейка (16) |
Мнемоника |
Код команды (16) |
|
8400 |
RAL |
17 |
|
8401 |
JNC 840A |
D2 |
|
8402 |
|
0A |
|
8403 |
|
84 |
|
8404 |
CMA |
2F |
|
8405 |
RAR |
1F |
|
8406 |
INR A |
3C |
|
8407 |
JMP 840B |
C3 |
|
8408 |
|
0B |
|
8409 |
|
84 |
|
840A |
RAR |
1F |
|
840B |
RET |
C9 |
Перевод числа X в дополнительный код:
1) Сдвиг влево:
СУ = 0; A = 0111 0000(2) = 70 (16)
2) Сдвиг вправо:
СУ = 0; A = 0011 1000(2) = 38 (16)
Перевод числа (-Y) в дополнительный код:
1) Сдвиг влево:
СУ = 1; A =1001 0010 (2) = 92(16)
2) A = Ā = 0110 1101(2) = 6D(16)
3) Сдвиг вправо:
СУ = 1; A = 1011 0110(2) =B6 (16)
4) A = A+1 = 1011 0110+1(2) = 1011 0111(2) = B7(16)
-Yд = 1011 0111(2) = B7(16)
Сложение чисел X и (-Y) в дополнительных кодах:
0011 1000(2) = 38(16)
1
011
0111(2)
= B7(16)
1110 1111 (2) = EF(16)
[Z]д = [X]д + [-Y]д = 1110 1111 (2) = EF(16)
