Смекни!
smekni.com

Ассемблер 2 (стр. 4 из 4)

mov FuncNum,AL ;Сохраняем номер выбранной функции

ExitSF: ret

;*****************************************************************************

;Подпрограмма ввода числа

input10:

push BX ;Сохраняем регистры

push DX

push CX

mov DX,0 ;Обнуляем регистр хранения результата

InputChar:

clc

mov AH,0Ch

mov AL,1

int 21h ;Считываем символ с эхом

cmp AL,13d

je ExitI10 ;Если его код 13 ? конец ввода

cmp AL,'0'

jb ErrInput ;Если код меньше кода символа 0 ошибка ввода

cmp AL,'9'

jg ErrInput ;Если код больше кода символа 9 ошибка ввода

clc

sub AX,30h ;Получаем из кода символа число

mov CX,0

mov CL,AL

mov AX,DX

mov BX,10

mul BX ;Умножаем на 10 уже накопленный результат

add AX,CX ;Прибавляем считанное число

mov DX,AX ;Сохраняем результат

jmp InputChar

ErrInput:

Stc ;В случае ошибки ввода устанавливаем флаг

ExitI10:

mov AX,DX ;Переносим результат в регистр возврата

pop CX

pop DX

pop BX ;Восстанавливаем регистры

ret

;*****************************************************************************

;Установка указателя на сегмент переменных

SetDATSeg:

push AX

mov AX,_Data

mov DS,AX

pop AX

ret

;*****************************************************************************

;Установка указателя на проверочный массив

SetArrSeg proc

push AX

mov AX,DataSeg

mov ES,AX

pop AX

ret

SetArrSeg endp

;****************************************************************************

; Процедура вычисления CRC16

;ES - сегмент массива

;DX - адрес начала массива

;BX - длина блока данных

;AX - результат вычислений

;****************************************************************************

CalcCRC proc

push CX ;\

push BX ;- сохранение регистров

push DI ;/

push DX

mov DI,DX ;Загрузка индекса начала массива

mov DX,8

mov CX,BX ;Установка счётчика цикла

shl CX,1 ;\

shl CX,1 ;- CX=CX*8

shl CX,1 ;/

mov AX,65535 ;Очистка регистра результата

mov BX,ES:[DI]

CRNext: loop CRNextTest ;Цикл по словам массива

pop DX

pop DI ;\

pop BX ;-восстановление регистров

pop CX ;/

ret

CRNextTest:

push AX

mov AX,BX

and AX,1b

jz Shift

pop AX

xor AL,31h

push AX

Shift: mov AX,DX

jz NewWord

shr BX,1

dec DX

jmp EndShift

NewWord:

mov DX,8

inc DI

mov BX,ES:[DI]

EndShift:

pop AX

jmp CRNext

CalcCRC endp

;*****************************************************************************

END

;*****************************************************************************


ЗАКЛЮЧЕНИЕ

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

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


СПИСОК ЛИТЕРАТУРЫ:

1. Финогенов К.Г. Основы языка Ассемблера. – М.: Радио и связь,2000.

2. Юров В. Assembler. Специальный справочник. – СПб.: Питер, 2001.

3. Юров В. Assembler. Практикум. – СПб.: Питер, 2001.

4. Юров В., Хорошенко В. Assembler – Учебный курс.- СПб.: Питер, 2000.