Автор: Пользователь скрыл имя, 25 Января 2012 в 10:10, курсовая работа
В курсовой работе в соответствии с заданием на проектирование решается задача на языке ассемблера для CPU i8086, в которой требуется вычислить значение логической формулы F=(X7&X6&X1) V (X6&X4&X2X1&X0 ) V (X7&X6&X3&X1) логическими переменными которой являются значения массива из 8 байт, и размещающей результат в оперативной памяти.
Описание пошаговой реализации алгоритма решения задачи в виде последовательности арифметических, логических и других действий, которые необходимо проделать для реализации принятого метода решения. Реализация задачи предполагает создание исходного, объектного и загрузочного модулей, а также подробное описание каждого действия по написанию программы.
Введение	4
1 Постановка задачи	6
2 Анализ задачи	8
2.1 Определение входной и выходной информации	8
2.2 Выбор модели памяти	8
2.3 Выбор режимов адресации	9
2.4 Разработка блок-схемы программы	12
3 Реализация	13
3.1 Описание этапов создания программы	13
3.1.1 Описание исходного модуля	16
3.1.2 Трансляция программы	18
3.2 Характеристика полученного файла листинга	20
3.3 Характеристика полученного загрузочного модуля	22
3.4 Анализ команд программы	22
3.5 Анализ команд jmp, jl, jg и loop	24
3.6 Анализ дампа памяти (сегменты данных, кода и стека)	27
4 Тестирование и отладка программы	29
4.1 Отладка программы	29
4.2 Тестирование программы	29
Заключение	33
Литература	34
Приложение А	35
Приложение Б	36
Приложение В	38
Приложение Г	39
call writestring ;вывод строки mes2
      call 
crlf   ;переход на след. строку 
cmp al, 0
      je 
L_RAVNO 
jmp L_NERAVNO
L_RAVNO:
mov dx, offset mes3 ;заносим в dx адрес строки mes3
      call 
writestring  ;вывод строки mes3 
      jmp 
Exit 
L_NERAVNO:
mov dx, offset mes4 ;заносим в dx адрес строки mes4
      call 
writestring  ;вывод строки mes4 
Exit:
call ReadKey
mov ah, 4Ch ;выход из программы
      int 
21h 
;----------------------
DrawArray proc
mov cx, MAXCOUNT ;в CX заносим длину массива
xor si, si
      mov 
bx, 10   ;система счисления 
L2:
mov dl, 32 ;выводим пробел между эл. массива
mov ah, 02h
int 21h
xor ax, ax
mov al, byte ptr ds:[bp][si] ;в ax сохраняем эл. массива
call writeint_signed ;проц. вывода знач. ax на экран
add si, 1 ;увел. si для перехода к след. эл. массива
Loop L2  
call crlf ;переход на след. строку
ret
DrawArray endp
;----------------------
end start 
Программная модель CPU i8086
 
Проверка результатов
F=(X7&X6&X1) V (X6&X4&X2X1&X0 ) V (X7&X6&X3&X1)
| № | Массив | Вычисление Assembler | Вручную | Результат | 
| 1 | 1, 1, 1, 0, 1, 0, 1, 1 | true | true | Верно | 
| 2 | 1, 1, 1, 1, 1, 1, 1, 1 | true | true | Верно | 
| 3 | 0, 0, 0, 0, 0, 0, 0, 0 | false | false | Верно | 
| 4 | 0, 1, 0, 0, 0, 1, 0, 0 | false | false | Верно | 
| 5 | 0, 1, 0, 0, 0, 0, 1, 1 | true | true | Верно |