Вычисление CRC. Методы определения целостности информации.

В ассемблере нет средств прямой поддержки рекурсивных алгоритмов.

Реализация рекурсивных процедур

Планируя использование рекурсивных процедур, необходимо продумывать следующие вопросы:

· способы передачи параметров в процедуру и возврата результатов ее работы;

· способ сохранения локальных переменных процедуры;

· организацию выхода из процедуры.

 

Как правило, для работы с локальными данными процедуры и параметрами, передаваемыми в процедуру, используется стек. При этом необязательно использовать для этого только системный стек, иногда удобнее создать его модель, работу с которой осуществлять средствами самой программы.


Рассмотрим алгоритм вычисления факториала: F(0)=l: F(i)=i*F(i-1).

С точки зрения скорости работы кода рекурсивный вариант вычисления факториала менее эффективен по сравнению с итеративным методом.

 

.data

r_fact dw 1

.code

fact proc

push bp

mov bp,sp

mov cx,[bp+4]

mov ax,cx

mul r_fact

mov r_fact,ax

dec cx

jcxz end_p

push cx

call fact

end_p:

mov sp,bp

fact endp

start:

mov ax,@data

mov ds,ax

push 45

call fact

exit:

mov ax,4c00h

int 21h

end start

 

В любом случае, начало рекурсивной процедуры будет содержать код пролога:

fact рrос

push bp

mov bp,sp

mov cx.[bp+4]

Самостоятельно на практике: Довести программу расчёта факториала до рабочего состояния. (В приведённой выше программе отсутствует эпилог).


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

Наиболее известные из методов обнаружения ошибок передачи данных:

1) Посимвольный контроль четности, называемый также поперечным (рис. 6), подразумевает передачу с каждым байтом дополнительного бита, принимающего единичное значение по четному или нечетному количеству единичных битов в контролируемом байте.Может использоваться два типа контроля четности — на четность и нечетность. Алгоритм вычисления контрольного бита при контроле на четность предполагает его установку таким образом, чтобы общее количество бит в битовой последовательности (включая и сам бит четности) было четным. И наоборот, контроль на нечетность предполагает установку контрольного бита так, чтобы общее количество битов в битовой последовательности (включая и сам бит четности) было нечетным.


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