Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Программирование на языке ассемблера - файл курсASS.doc


Программирование на языке ассемблера
скачать (423.8 kb.)

Доступные файлы (19):

1.asm
1.EXE
1.LST
1.MAP
1.OBJ
1.PIF
AFD.COM
LINK.EXE
MASM.EXE
TASM.EXE
2.asm
2.EXE
2.MAP
2.OBJ
AFD.COM
LINK.EXE
MASM.EXE
TASM.EXE
курсASS.doc131kb.29.01.2009 15:55скачать

Загрузка...

курсASS.doc

Реклама MarketGid:
Загрузка...

frame1Факультет заочного обучения

Кафедра вычислительных систем


КУРСОВАЯ РАБОТА

По дисциплине:

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА

Вариант № 18


Исполнитель: студент группы ЗВП-07




Орлов Д.Б.

“____”__________2011 г.

Руководитель: кандидат технических

наук, профессор




Комаров В.М

“____”__________2011 г.



РЫБИНСК 2011 г.

ОГЛАВЛЕНИЕ


  1. Условие задачи первой задачи .................................................3

  2. Граф-схема алгоритма решения первой задачи.......................4

  3. Исходный текст программы для решения первой задачи......6

  4. Условие задачи второй задачи .................................................8

  5. Граф-схема алгоритма решения второй задачи.......................9

  6. Исходный текст программы для решения второй задачи......11

  7. Вывод..........................................................................................13

Список литературы.........................................................................14
1. Условие задачи №1:


Написать подпрограмму для вычисления y = x*const, где Х – массив трехразрядных десятичных чисел в распакованном формате, const – заданное значение. С помощью этой подпрограммы обработать два массива, умножая элементы первого на число 5, а элементы второго на число 7. Для передачи параметров использовать стек.

  1. Граф-схема алгоритма решения первой задачи

.






























Рисунок - основной программы


0 Верхушка стека

+2 IP

+4 кол-во чисел в массиве

+6 константа

+8 входные данные

+10 выходные данные


Рисунок - Схема размещения данных в стеке



Загрузка данных из стека












Коррекция результата







Модификация

адресов




Нет



ДА



Рисунок - Блок-схема подпрограммы MulArr
__________

|___|___|___| - трехразрядное число

___

|___| - константа

_________________________

_________

|_AH||_AL| - промежуточный результат

+ _______

|___||___|

+ _______

|___||___|

_________________________

_______________

|___||___||___||___| - результат

+3 +2 +1 +0
Рисунок - Общая схема умножения

3. Исходный текст программы для решения первой задачи
n=100

NAME Ass1

Data Segment

const1 db 5

Arr_byte1 Db 5,3,4 ;первый входной массив - 435

Db 1,2,9 ; 921

endarr_byte1 label byte

N1=(offset endArr_byte1-offset Arr_byte1)/3 ;определяем длину 1го массива

Res1 DD N1 DUP (0) ; массив результатов

Prob DB '$$$$'

const2 db 7

Arr_byte2 Db 8,8,8 ;первый входной массив - 888

Db 7,7,7 ; 777
endarr_byte2 label byte

N2=(offset endArr_byte2-offset Arr_byte2)/3 ; определяем длину 2го массива

Res2 DD N2 DUP (0) ; массив результатов

Prob1 DB '$$$$'

Data Ends
MyStack Segment

DW 12 DUP (?)

StkTop Label WORD

MyStack Ends
Code Segment

ASSUME CS:Code,DS:Data,ES:Data,SS:MyStack
MulArr Proc Near

push BP

mov BP,SP

mov CX,[bp+4] ;N из стека

mov bx,[bp+6] ;const из стека

mov di,[bp+8] ;byte из стека

mov si,[bp+10] ;res из стека

Z: mov AL,[di] ;первая цифра исходного массива

mul byte ptr [bx] ;умножение на константу

aam ;коррекция

mov [si],al ;запись рез-тата

mov [si+1],ah

mov al,[di+1] ;вторая цифра

mul byte ptr [bx] ;умножение на константу

aam ;коррекция

adc al,[si+1] ;сложение с переносом

aaa ;коррекция

mov [si+1],al ;запись рез-тата

mov [si+2],ah

mov al,[di+2] ;третья цифра

mul byte ptr [bx] ;умножение

aam ;коррекция

adc al,[si+2] ;сложение с переносом

aaa ;коррекция

mov [si+2],al ;запись рез-тата

mov [si+3],ah ;
add SI,type Res1 ;модернизация адресов

inc di

inc di

inc di

loop Z

pop BP

RET 8

MulArr Endp
Start:

mov AX, Data

mov DS, AX

mov ES, AX

mov AX, MyStack

mov SS, AX

mov SP, offset StkTop
lea AX, Res1 ;передаем данные об адресах через стек

push AX ;инициализируем их и запоминаем в стеке

lea AX, Arr_byte1

push AX

lea ax,const1

push ax

mov AX, N1

push AX

call MulArr
lea AX, Res2

push AX

lea AX, Arr_byte2

push AX

lea ax,const2

push ax

mov AX, N2

push AX

call MulArr

Code ENDS

END Start
4. Условие задачи №2:


Написать макрокоманду для перестановки во всех двухразрядных десятичных BCD-числах, заканчивающихся заданной цифрой. С помощью этой макрокоманды обработать два массива, переставляя в 1-ом цифры в числах оканчивающихся на 3, а во 2-ом на 8.

  1. Граф-схема алгоритма решения второй задачи

.





















Рисунок макроуровня




Подготовка, получение адресов, счетчик,

нуление регистров











Нет






Да






Запись рез-та без замены



Модификация адресов







Нет



Да


Рисунок макрокоманды

  1. Исходный текст программы для решения второй задачи

n=100

NAME Ass2

.286

Data Segment

const1 db 3h

Arr1 Db 23h ;первый входной массив 23

Db 21h ;первый входной массив 21

Db 62h ;первый входной массив 62

Db 73h ;первый входной массив 62

endarr1 label byte

N1=(offset endArr1-offset Arr1) ;определяем длину массива по смещению + кол во чисел

Res1 Db N1 DUP (0) ; массив результатов для Arr1

Prob Db '$$$$'
const2 db 8h

Arr2 Db 48h ;первый входной массив 48

Db 53h ;первый входной массив 53

Db 39h ;первый входной массив 39

endarr2 label byte

N2=(offset endArr2-offset Arr2) ; определяем длину массива по смещению + кол во чисел

Res2 Db N2 DUP (0) ; массив результатов для Arr2

Prob1 DB '$$$$'

Data Ends


Code Segment

ASSUME CS:Code,DS:Data
Perest Macro Res,Const,Arr,N

local Z,z1,s

lea si,Arr ;загрузка адреса вх. массива

lea di,Res ;загрузка адреса рез-тата

lea bx,const ;загрузка константы

mov cx,N ;записываем счетчик

; xor ax,ax ;нулим регистр AX

; xor dx,dx ;нулим регистр DX

Z: mov al,[si] ;запись в регистр вх. массива

and al,0fh ;оставляем младшее число

cmp al,[bx] ;сравнение с заданным параметром

je z1 ;если равно переходим на z1

mov dl,[si]

mov [di],dl

jmp s

z1: shl ax,8 ;младший в старший 0a 00

mov al,[si] ;перед ah исходное 0а ba

shr ax,4 ;получаем 00 ab

mov [di],al ;записываем

jmp s

s: add si,type Arr ;модификация для следующего цикла

add di,type Arr ;модификация для следующего цикла

loop Z

Endm
Start:

mov Ax, Data

mov DS, Ax
Perest Res1,Const1,Arr1,N1 ;макровызов для обработки 1 массива

Perest Res2,Const2,Arr2,N2 ;макровызов для обработки 2 массива
Code ENDS

END Start

  1. Вывод

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

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


  1. Комаров В.М. Микропроцессорные системы. программирование на ассемблере: Учебное пособие/ Ргата. Рыбинск, 2004.



Скачать файл (423.8 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации