Программирование в машинных кодах и на языке ассемблера 1993 г.

Разбор программ в машинных кодах - проверка оперативной памяти компьютера.


4.5. Проверка оперативной памяти компьютера.

Приведенная ниже программа также является полезной и поучительной. Логика ее работы такая. Перед вызовом этой процедуры в регистровой паре HL должен быть установлен начальный адрес проверяемой области ОЗУ, а в паре ВС - длина этой области. Проверка проводится в пять этапов. В каждую ячейку записывается проверочный байт, а затем проверяется, как он туда записался. Если вскрывается ошибка, то программа прерывается с включением флага CARRY, а содержимое регистра HL указывает на адрес ошибочной ячейки. Если проверка прошла нормально, то проверяемая область памяти после выхода будет содержать нули, а если нет, то в аккумуляторе будет содержаться то число, которое было записано в ячейку, но не воспроизвелось.

Мы ассемблировали эту программу с адреса 2 6000, но Вы, конечно, можете это переделать.

На первом проходе в память записываются нули и проверяются .

На втором проходе записывается FF. На третьем - AA (10101010B) . На четвертом - 55 HEX (01010101B) . Пятый проход -проверка с "плавающим" битом. Сначала помещается число 80 HEX (1000 000B) , а затем включенный бит перемещается вправо, пока не пройдет полный оборот и происходит переход к проверке следующего адреса.

Адрес

Метка

Маш.код

Мнемоника

Комментарий

6590

7A

LD

A, D

Проверка заданной области ОЗУ на 0

6591

B3

OR

E

6592

C8

RET

Z

Выход, если так

6593

42

LD

B, D

В ВС - размер области

6594

4B

LD

C, E

6595

TEST1

97

SUB

A

Это то же, что и LD A,0

6596

CDC065

CALL

FILL

Вызов процедуры заполнения области байтом

6599

D8

RET

C

Выход, если найдена ошибка (флаг С включен)

659A

TEST2

3EFF

LD

A, FF

659C

CDC065

CALL

FILL

65 9F

D8

RET

C

65A0

TEST3

3EAA

LD

A, AA

65A2

CDC065

CALL

FILL

65A5

D8

RET

C

65A6

TEST4

3E55

LD

A,55

65A8

CDC065

CALL

FILL

65AB

D8

RET

C

65AC

TEST5

3E8 0

LD

A,80

В акк-р загружен байт 10000000

65AE

REP

77

LD

(HL),A

Этот байт загружен в проверяемый адрес

65AAF

BE

CP

(HL)

И тут же проверяется

65B0

37

SCF

Включается флаг С на случай выхода по ошибке

65B1

C0

RET

NZ

Выход, если ошибка

65B2

0F

RRCA

Сдвиг включенного бита вправо

65B3 FE8 0 CP 80 Сравнение нового байта с

1000 0000, т. е. сделан полный оборот или нет? 65B5 20F7 JR NZ, REP Если нет, то возврат и

опять проверка 65B7 3600 LD (HL) , 00 Если да, то сначала

обнулить проверяемую ячейку 65B9 23 INC HL и перейти к проверке

следующей, уменьшив счетчик 65BA 0B DEC BC проверяемых ячеек ОЗУ

65BB 7 8 LD A, B Проверка на коне ц

65BC B1 OR C проверяемой области

65BD JR NZ,TEST5 Переход к проверке

следующей ячейки, если

2 0ED

область не исчерпана 65BF RET Выход, если исчерпана

C9

65C0 FILL E5 PUSH HL

65C1 C5 PUSH BC Запомнили на стеке HL и BC

65С2 5F LD E, A Временно освободили А для

других дел

65C3 77 LD (HL),A Засылка в проверяемую

ячейку проверочного числа 65С4 0B DEC BC Уменьшение счетчика

проверяемых ячеек 65C5 78 LD A, B Проверка на то, что область

65С6 B1 OR C исчерпана

65C7 7 B LD A, E Восстановили аккумулятор

65C8 2805 JR Z, COMP Переход на проверку, если

длина проверяемой области была всего 1 байт 65CA 54 LD D, H Подготовка к применению

65CB 5D LD E, L команды для быстрой

переброски байта LDIR 65CC 13 INC DE Адрес приемника на единицу

больше источника

65CD

EDB0

LDIR

Переброска байта

65CF

COMP

C1

POP

BC

Восстановление со стека

65D0

E1

POP

HL

регистровых пар

65D1

E5

PUSH

HL

без изменение содержания

65D2

C5

PUSH

BC

стека

65D3

AGAIN

EDA1

CPI

Сравнение

65D5

2007

JR

NZ,ERROR

Если сравнение не прошло,

то переход на подпрограмму обработки ошибки 65D7 EAD365 JP PE,AGAIN Напоминаем, что команда CPI

обнуляет флаг четности, если исчерпан список сравнения, т.е. если BC = 0 Восстановление регистров BC и HL перед выходом Выключение флага C, поскольку ошибок нет Выход

Восстановление регистров перед выходом Включение флага "С", поскольку была ошибка Выход




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Открытые письма Nemo №6.279
Железо - О подключении AY MOUSE.
Нострадамус - Гонь от Мишеля Нострадамуса (часть 2).
Кто там кодит? - Работаем с MS-DOS: Ms-Dos дискеты - описание структуры Ms-Dos диска.
Sofтинка - обзор экранных упаковщиков для ZX Spectrum.

В этот день...   19 марта