Решение задачи на ассемблере


Решенные задачи на языке Assembler
скачать (3323.7 kb.)

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

1.asm 1.CRF 1.EXE 1.LST 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.1.asm 2.1.EXE 2.1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.CRF 1.EXE 1.LST 1.OBJ 2.asm 2.EXE 2.OBJ 1.ASM 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ z12.asm z22.asm с.1.asm 1.1.asm 1.asm 1.EXE 1.OBJ 2.asm p1.asm p2.asm 1.asm 2.asm 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 2.asm 1.asm 2.asm 2.asm 1.asm strmir.asm 1.asm Текст вар 19.doc 141kb. 26.01.2009 18:04 скачать 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ sumconst.asm 1.asm 2.asm Текст вар 20.doc 106kb. 27.01.2009 01:03 скачать 1.asm 2.asm sort2.asm sumbcd.asm 1.asm 2.asm 1.asm 2.asm 1,1 плохой вариант.asm 1.asm 2.asm размышление по 2 задаче.doc 61kb. 17.01.2009 22:37 скачать 1.asm 2.asm 2.asm 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ 1.asm 1.EXE 1.OBJ 2.asm 2.EXE 2.OBJ File0003.jpg 301kb. 29.05.2010 18:53 скачать File0004.jpg 397kb. 29.05.2010 18:56 скачать File0005.jpg 378kb. 29.05.2010 18:57 скачать File0006.jpg 247kb. 29.05.2010 18:57 скачать File0007.jpg 257kb. 29.05.2010 19:00 скачать File0008.jpg 298kb. 29.05.2010 19:00 скачать File0009.jpg 453kb. 29.05.2010 19:00 скачать File0010.jpg 425kb. 29.05.2010 19:00 скачать File0011.jpg 275kb. 29.05.2010 19:00 скачать afd.com AFDPRO.EXE lib.exe link.exe masm.exe
содержание

Текст вар 19.doc

Реклама MarketGid:
Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования Рыбинская государственная авиационная технологическая академия имени П. А. СОЛОВЬЕВА
Факультет заочного обучения

Кафедра «Вычислительные системы»

контрольная работа

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

Программирование на Ассемблере

(Наименование дисциплины)

на тему

Разработка программ (вариант 19)
Пояснительная записка

Студент группы …ЗВП-07 …………………………

(Код) (Подпись, дата) (Фамилия И. О.)
Руководитель канд. техн. наук, проф. Комаров В. М.

(Уч. степень, звание) (Подпись, дата) (Фамилия И. О.)
Нормоконтролер канд. техн. наук, проф. Комаров В. М

(Уч. степень, звание) (Подпись, дата) (Фамилия И. О.)

Рыбинск 2009

Содержание

стр.

Введение ……………………………………………………………………………. 3

1 Формулировка 1-й задачи варианта ……….……..………………………… 4


1.1 Решение 1-й задачи варианта ………………………..……………………. 4

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

1.3 Исходный текст для решения 1-й задачи ……………………………… 7

2 Формулировка 2-й задачи варианта ……………………………………… 11

2.1 Решение 2-й задачи варианта ……………………..…………………….. 11

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

2.3 Исходный текст для решения 2-й задачи……………………………………13

Заключение ……………………………………………………………………… 15


Список использованных источников ………………………………………….. 15
Введение
В данной работе разрабатываются 2 программы на языке Ассемблера. Одна программа предназначена для записи в элементы некоторого двумерного массива двойных слов, находящихся в пересечении строк и столбцов с четными индексами, строки «МИР». Другая предназначена для записи в элементы текущего стека, начиная от верхушки, результаты вычисления функции , где X – элементы некоторого массива байтов, которые могут иметь значения 5, 24, 61, 122.

1 Формулировка 1-й задачи варианта
Написать программу для записи в элементы некоторого двумерного массива двойных слов, находящихся в пересечении строк и столбцов с четными индексами, строки «МИР». С помощью этой подпрограммы обработать два массива.
1.1 Решение 1-й задачи варианта
Из условия задачи следует, что разрабатываемая подпрограмма должна обрабатывать два массива. Следовательно, она должна работать с передачей параметров. Способ передачи параметров не указан, поэтому используем передачу параметров через регистры.

Обрабатываемые данные представляют собой массивы двойных слов без знака, которые могут содержать различное количество элементов. Следовательно, описание входных массивов должно быть описанием двумерных массивов двойных слов. Результат (выходной массив) будет таким же массивом, что и входной.

Решение данной задачи сводится к проверке индексов строк и столбцов и записи строки «МИР» в элемент, находящихся на пересечении строк и столбцов с четными индексами, т. е. при условии, что индексы строки и столбца четные. Будем использовать базово-индексную адресацию. Так как элемент двумерного массива имеет размерность двойное слово или 4 байта, то при увеличении индекса столбца и строки на 1 смещение столбца и строки увеличится на 4. Будем считать, что размерность массива не более 256 х 256 элементов, тогда для хранения индекса можно использовать 8-разрядные регистры и анализировать их значения на четность и нечетность.

Так как в двойное слово записывается строка, элементы которой имеют размерность байт, то необходимо организовать цикл записи четырех байтов и использовать при этом директиву byte ptr.

Инициализировать входные массивы непосредственно в сегменте данных не имеет смысла, так как для их обработки все нужно задавать размерность. Для наглядности инициализируем входные массивы каким-либо шестнадцатеричным числом, например 11111111h и 22222222h.

Подпрограмма работает с передачей параметров, которая осуществляется на макроуровне программы. Поэтому полный алгоритм программы будет включать в себя алгоритм макроуровня и алгоритм подпрограммы, представленные на рисунке 1.1. и на рисунке 1.2.
1.2 Граф-схемы алгоритмов решения 1-й задачи

Рисунок 1.1 – Алгоритм макроуровня 1-й задачи

В качестве параметров используются базовый адрес входного массива, базовый адрес выходного массива и число строк и столбцов массива. Первые 2 параметра имеют размер слова, вторые 2 – размер байта, но для удобства организации цикла поместим последние 2 параметра в 16-разрядные регистры.

Проверка на четность выполняется путем анализа младшего бита (0 – четный, 1 – нечетный).


Адрес строки уже в BX и BP. Число строк уже в СХ.

Индекс строки в AL, AL = 0.


Смещение столбца в SI, SI = 0. Сохранить СХ. Число столбцов в СХ из DX. Индекс столбца в AH, AH = 0.



word ptr [BX+SI]  word ptr DS:[BP+SI]

word ptr [BX+SI+2]  word ptr DS:[BP+SI+2]

Выполняется через АХ, он сохраняется, затем восстанавливается


Да

SI = SI + 1; DI = DI + 1


Нет

Сохранить смещение столбца SI. Сохранить СХ и АХ. Счетчик циклов СХ = 4. Сохранить DI. Адрес строки символов «МИР» в DI.

Да

Нет

Да

Нет

^ AL DS:[BP+SI]


[DI]  AL


Да

BX = BX + 4 число столбцов в строке входного массива (DI)

BP = BP + 4 число столбцов в строке входного массива (DI)

AL = AL + 1

Нет

Да

Нет

SI = SI + 4; AH = AH + 1

Рисунок 1.2 – Алгоритм подпрограммы 1-й задачи

Из алгоритма (рисунок 1.2) следует, что значение « 4 число столбцов в строке входного массива » следует вычислить до вызова процедуры и передать как параметр, в противном случае это очень усложнит процедуру и замедлит время ее выполнения.
1.3 Исходный текст для решения 1-й задачи
На основании алгоритмов (см. рисунок 1.1 и рисунок 1.2) можно написать исходный текст программы.
Name STRMIR ; Имя программы

; Описание констант

nr1 = 3 ; число строк 1

nr2 = 5 ; число строк 2

nc1 = 3 ; число столбцов 1

nc2 = 4 ; число столбцов 2

Data Segment

Arr1S DD nr1 DUP (nc1 DUP (11111111h)) ; Описание входных

Arr2S DD nr2 DUP (nc2 DUP (22222222h)) ; массивов

Arr1D DD nr1 DUP (nc1 DUP (?)) ; Описание выходных

Arr2D DD nr2 DUP (nc2 DUP (?)) ; массивов

str DB 'MIR ' ; Строка «МИР »

Data Ends

n1 = 4 nc1 ; нужно добавить для получения адреса

; следующей строки массива 1 - длина строки 1 в байтах

n2 = 4 nc2 ; нужно добавить для получения адреса

; следующей строки массива 2 - длина строки 2 в байтах

Stack Segment

DW 10 DUP (?) ;

StkTop Label word ; Фиксация верхушки

Stack EndS ; пустого стека

Code Segment ; Сегмент программного кода

Assume CS: Code, DS: Data, SS: Stack

; Описание подпрограммы

MIR Proc

;Подготовка цикла для прохода по строкам

; Адрес строки уже в BX и BP

; Число строк в CX

MOV AL,0 ; Индекс строки равен 0

MAIN :

;Подготовка цикла для прохода по столбцам

PUSH CX ; Сохранить СХ - число строк

XOR SI, SI ; Смещение столбца 0

MOV CX,DX ;Число столбцов

MOV AH,0 ; Индекс столбца равен 0

M0:

;Просто копируем элемент входного массива в выходной

PUSH AX ; Сохраняем АХ

MOV AX, word ptr [BX+SI]; Копируем младшее слово

MOV word ptr DS:[BP+SI],AX;

MOV AX, word ptr [BX+SI+2]; Копируем старшее слово

MOV word ptr DS:[BP+SI+2],AX;

POP AX; Восстанавливаем АХ

;проверим индекс строки на четность

TEST AL,00000001b; Проверим младший бит

JNZ M1 ; Если 1, то столбец нечетный

;элемент входного массива уже скопировали

TEST AH,00000001b; Проверим младший бит

JNZ M1 ; Если 1, то строка нечетная

;элемент входного массива уже скопировали

;иначе записываем в элемент массива строку "МИР "

;Подготовка цикла для записи строки "МИР "

PUSH SI ;Сохранить смещение столбца SI

PUSH CX ;Сохранить СХ и АХ

PUSH AX ;

MOV CX,4 ;Счетчик циклов СХ = 4.

PUSH DI ;Сохранить DI

LEA DI,str ;Адрес строки символов «МИР» в DI

M2: ; Цикл записи строки «МИР»

MOV AL, [DI] ; Передать в аккумулятор текущий символ строки

MOV byte ptr DS:[BP+SI], AL ; Записать в выходной массив

INC DI ; Модификация адреса строки

INC SI ; Модификация адреса байта выходного массива

LOOP M2 ; Все символы?

; Да

POP DI ;Восстановить длину строки в байтах

POP AX ;Восстановить СХ и АХ

POP CX ;

POP SI ;Восстановить смещение столбца SI

M1: ADD SI, 4 ; Модифицировать смещение столбца

INC AH ; Модифицировать индекс столбца

LOOP M0 ; Переход, если не все столбцы

ADD BX, DI ;Модифицировать смещение строки

ADD BP, DI ;Модифицировать смещение строки

INC AL ;Модифицировать индекс строки

POP CX ; Восстановить счетчик строк

LOOP MAIN ; Все строки?

RET ; Возврат

Mir Endp ;

; Макроуровень программы

Start: MOV AX, Data ; Системная подготовка

MOV DS, AX ; инициализация

MOV AX, Stack ; сегментных

MOV SS, AX ; регистров и указателя

LEA SP, StkTop ; стека

; Передача параметров

; первого массива

MOV CX, nr1 ; Число строк 1

MOV DX, nc1 ; Число столбцов 1

MOV DI, n1 ; Длина строки 1 в байтах

LEA BX, Arr1S ; Адрес базы входного массива 1

LEA BP, Arr1D ; Адрес базы выходного массива 1

CALL Mir ; Обработка массива 1

; Передача параметров

; второго массива

MOV CX, nr2 ; Число строк 2

MOV DX, nc2 ; Число столбцов 2

MOV DI, n2 ; Длина строки 2 в байтах

LEA BX, Arr2S ; Адрес базы входного массива 2

LEA BP, Arr2D; Адрес базы выходного массива 2

CALL Mir ; Обработка массива 2

Code Ends

End Start ; Конец исходного текста

; программы

2 Формулировка 2-й задачи
Написать макрокоманду для записи в элементы текущего стека, начиная от верхушки, результаты вычисления функции , где X – элементы некоторого массива байтов, которые могут иметь значения 5, 24, 61, 122. С помощью этой макрокоманды обработать два массива.
2.1 Решение 2-й задачи

Из условия задачи следует, что разрабатываемая макрокоманда должна обрабатывать два массива. Следовательно, она должна работать с передачей параметров.

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

Функция Y вычисляется таблично, поэтому необходима таблица, в которой хранятся значения функции Y. Для вычисления функции используем команду XLAT.

Для адресации к стеку необходимо скопировать содержимое регистра SP регистр BP. В [2], с. 12 указывается, что «стек всегда существует в системе и поэтому не описывается», однако при демонстрации работы программы в отладчике AFD необходимо описать сегмент стека, так как в противном случае операционная система производит совмещение сегментов данных и стека, и данные в сегменте данных «затираются» при записи значений в стек. Стек должен иметь достаточный объем для записи данных, в противном случае операционная система может разместить сегменты так, что за сегментом стека будет следовать сегмент кода, и команды в сегменте кода «затираются» при записи значений в стек. Выделим под объем для записи данных суммарный объем результатов функции Y.

Для адресации к стеку необходимо скопировать содержимое регистра SP в регистр BP. Так как значение SP после выполнения макрокоманды не изменится, то данные будут каждый раз записываться с одного и того же адреса после очередного вызова макрокоманды.

Макрокоманда работает с передачей параметров, которая осуществляется на макроуровне программы. Поэтому полный алгоритм программы будет включать в себя алгоритм макроуровня и алгоритм макрокоманды, представленные на рисунке 2.1. и на рисунке 2.2.

В качестве параметров используются адрес входного массива и длина массива. Эти параметры имеют размер слова. Адрес таблицы и значение указателя стека SP параметрами не являются, так как являются одинаковыми для каждого вызова макрокоманды.
2.2 Граф-схемы алгоритмов решения 2-й задачи




Рисунок 2.1 – Алгоритм макроуровня 2-й задачи

Адрес входного массива в SI

Длина массива в СХ

Очистить AH – старшая половина результата

Поместить BP текущее значение SP

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

Рисунок 2.2 – Алгоритм макрокоманды 2-й задачи

2.3 Исходный текст для решения задачи 2
На основании алгоритмов (рисунок 2.1 и рисунок 2.2) можно написать текст программы.

Name TablSteck

; Описание констант

Data Segment ; Сегмент данных

Arr1S DB 5, 24, 5, 61,122, 5 ;Описание входных

Arr2S DB 5, 5, 24, 24, 61, 61, 122, 122 ; массивов

Table DB 5 dup (?), 2, 18 dup (?), 3, 36 dup (?),4, 60 dup (?), 5

; Описание таблицы преобразования

N1 = offset Arr2S - offset Arr1S;

N2 = offset Table - offset Arr2S;

Data Ends

Stack Segment

DW 4 DUP (?) ;

StkTop Label word ; Фиксация верхушки пустого стека

DW (N1+N2) DUP (?);Область под запись результата

Stack EndS
Code Segment ; Сегмент программного кода

Assume CS: Code, SS: Stack, DS: Data

; Макроопределение

StkTable Macro ArrS, N

LOCAL M0 ; Локализация меток

LEA SI, ArrS ; Загрузка начальных

MOV BP, SP ; адресов

; Смещение адреса стека

MOV CX, N ; Загрузка счетчика циклов

XOR AH, AH ; Обнуление счетчика элементов

M0: MOV AL, [SI] ;Чтение элемента входного мас-ва

XLAT Table ; Преобразовать по таблице

MOV [BP], AX ; Записать в стек

INC SI ; Модификация адреса

; входного массива

ADD BP, 2 ; Модификация адреса стека

LOOP M0

Endm

; Макроуровень программы

Start: MOV AX, Data ; Системная подготовка

MOV DS, AX ; Инициализация

MOV AX, Stack;

MOV SS, AX ; регистров и указателя

LEA SP, StkTop ; стека
LEA BX, Table ; Адрес таблицы

; Обработка первого массива

StkTable Arr1S,N1 ; Макровызов

; Обработка вторoго массива

StkTable Arr2S,N2 ; Макровызов

Code Ends

End Start

Заключение
В данной работе разработаны простые программы на языке Ассемблера. Одна программа предназначена для записи в элементы некоторого двумерного массива двойных слов, находящихся в пересечении строк и столбцов с четными индексами, строки «МИР». Другая предназначена для записи в элементы текущего стека, начиная от верхушки, результаты вычисления функции , где X – элементы некоторого массива байтов, которые могут иметь значения 5, 24, 61, 122.
^

Список использованных источников

1 Комаров, В. М. Программирование на ассемблере [Текст]: программа учебной дисциплины и методические указания к выполнению контрольной работы / В. М. Комаров – Рыбинск: РГАТА, 2004 г. – 18 с.

2 Комаров, В. М. Программирование на ассемблере в упражнениях и задачах [Текст]: учеб. пособие / В. М. Комаров – Рыбинск: РГАТА, 2004 г. – 52 с.



Реклама:
Скачать файл (3323.7 kb.)

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


Источник: http://gendocs.ru/v16874/%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_assembler


Решение : Простейшая задача на Ассемблере - Assembler Гдз по физике 7 класса громов родина



Решение задачи на ассемблере Решение задач на Ассемблере - Все для студента
Решение задачи на ассемблере Решенные задачи на языке Assembler - Текст вар c
Решение задачи на ассемблере Решение задач на ассемблере - Assembler, MASM, TASM
Решение задачи на ассемблере Задачи по ассемблеру Выпуск #43. Решения
Решение задачи на ассемблере Решение задач на ассемблере Форум
Решение задачи на ассемблере Решение задачи по ассемблеру
Patrice motsepe house photos - m Work Play - Повышение мотивации и эффективности ГДЗ по Русскому языку за 6 класс ГДЗ по геометрии 8 класс рабочая тетрадь Дудницын ГДЗ по русскому языку 9 класс Пичугов, Еремеева, Купалова Гдз по английскому языку 6 класс рабочая тетрадь биболетова трубанева Задачи по геометрии параллелограмм. Геометрия - просто! Как решать задачи по информатике задачи по информатике с решением Олимпиадные задания по праву (11 класс) на тему: Решение задач по