Язык Assembler
Арифметические команды языка Assembler в архитектуре x86. Организация ветвлений и циклов в программах. Ввод строк с клавиатуры и команды пакетной обработки (строковые команды). Алгоритм вывода на экран в текстовом режиме с использованием средств BIOS.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 05.07.2014 |
Размер файла | 18,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
«Волгоградский государственный технический университет»
Контрольная работа
по дисциплине: «Машинно-ориентированные языки»
Вариант № 9
Выполнил: студент 2 курса ФПИК
группы АУЗ - 261с Тюляева И.А.
номер зачетной книжки 20161639
Проверил: ст. пр.Федоров М.А.
Волгоград 2011
Содержание
Задание №1
Задание №2
Задание №3
Задание №4
Задание №5
Список литературы
Задание №1
Арифметические команды языка Assembler в архитектуре x86:
(A+C)*(B-D)/E.
.686 ; директива определения типа микропроцессора
.model flat,stdcall ; задание линейной модели памяти
; но соглашения ОС Windows
.data ; директива определения данных
_a dw 1
_b dw 2
_c dw 3
_e dw 4
_d dw 5
res dw 0 ; резервирование памяти для сохранения переменной
; res
.code ; директива начала сегмента команд
start:
mov edx,0 ; очистка регистров
mov ebx,0 ; очистка регистров
mov ecx,0 ; очистка регистров
mov ах,_a ; в регистр ах заносим число _a
add ax,_c ; складываем с _c
SHL edx,16 ; сдвиг на 16
mov dx,ax
push edx ; заносим значение в стек
mov edx,0
mov ах,_b
sub ax,_d ; отнимаем от _b значение _d
div _e ; делим ах на _e
pop ecx ; вызываем из стека значения
mul ecx ; умножаем
mov res, eax
ret ; возвращение управление ОС
end start ; окончание программы с именем _start
Задание №2
Организация ветвлений и циклов в программах на языке Assembler. Вводить с клавиатуры элементы массива не требуется, на экран выводить необходимо:
Обнулить все элементы массива, которые по модулю меньше 10.
.model tiny
.code
ORG 100h
start: mov ax,3
int 10h ; очищение экрана
mov cx,-50
a1:xor ax,ax
add ax,[massiv+cx+50] ; заносим очередной символ
cmp ax,10
jg b1
xor ax,ax
mov [massiv+cx+50],ax; обнуляем элемент меньше 10
b1:
mov bl,10 ; переводим число в строку для вывода на
; экран
div bl
add [x+2],ah
cbw
div bl
add word ptr [x],ax
mov ah,9
mov dx,offset string1
int 21h ; выводим на экран
add cx,2; на следующий элемент массива
jne a1
mov ah,0
int 16h ; задержка экрана
retn ; выход из программы
massiv dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50
string1 db " result= "
x db "000$"
END start
Задание №3
Ввод строк с клавиатуры и команды пакетной обработки (строковые команды) в языке Assebmler. С клавиатуры вводятся только символы латинского алфавита. При выполнении каждого задания необходимо использовать команды пакетной обработки:
Ввести с клавиатуры строку и символ. Вывести номер позиции последнего вхождения введенного символа в строку.
.model small
.stack 100h
.data
stroka db 80 dup(?),'$'
symb db ?,' ','$' ; можно и не выделять память для символа
msg_inp db 0ah,0dh,"Vvedite stroku:",0ah,0dh,"$"
msg_in db 0ah,0dh,"Vvedite simvol:",0ah,0dh,"$"
msg db 0ah,0dh,"Simvol ","$"
msg1 db "nayden! Ego index - ","$"
msg_err db "ne nayden.","$"
c10 dw 10
curlen dw ?
.code
start:
mov ax,@data
mov ds,ax
lea dx,msg_inp ; вывод msg_inp
mov ah,09h
int 21h
xor bx,bx ; в bx - индекс вводимого символа
input_loop:
mov ah,01h ; считываем символ
int 21h
cmp al,13 ; если это enter
je for_find ; то конец ввода
mov stroka[bx],al ; иначе записываем символ в строку
cmp bx,80 ; если ввели 80 символов
je for_find ; то конец ввода
inc bx ; увеличиваем bx
jmp input_loop
for_find:
lea dx,msg_in ; вывод msg_in
mov ah,09h
int 21h
mov ah,01h ; ввод нужного символа
int 21h
mov byte ptr symb,al ; сохраняем его в symb
mov cx,bx ; в cx - длина строки
mov curlen,bx
xor bx,bx ; bx - индекс элемента
mov ah,byte ptr symb ; в ah - нужный символ
er: cmp ah,stroka[bx] ; сравниваем текущий элемент с нужным
; символом
je find ; если совпадают, то jmp на find
jne iter
find:
cmp ah,stroka[bx] ; сравниваем текущий элемент с нужным
; символом
je vuvod ; если совпадают, то jmp на vuvod
jne next
vuvod :
found: ; если найден символ
lea dx,msg ; вывод msg
mov ah,09h
int 21h
lea dx,symb ; вывод самого символа
int 21h
lea dx,msg1 ; вывод msg1
int 21h
mov ax,bx ; сохраняем индекс в ax
xor cx,cx ; cx - счетчик цифр
number_to_string:
xor dx,dx ; подготовка к делению
div c10 ; деление
add dx,30h ; в dx - ASCII-код остатка от деления
push dx ; сохраняем его в стеке
inc cx ; инкремент счетчика цифр
cmp ax,0 ; цикл, пока частное ненулевое
jne number_to_string
out_index_loop: ; цикл вывода индекса
pop dx ; извелекаем очередную цифру
mov ah,02h ; выводим ее на экран
int 21h
loop out_index_loop
xor cx,cx
mov cx,curlen
mov ah,byte ptr symb ; в ah - нужный символ
next:
inc bx
cmp bx,cx
jne find ;цикл повторяется cx раз
call end_program ; завершить программу
iter:
inc bx
cmp bx,cx
jne er ;цикл повторяется cx раз
lea dx,msg ; если символ не найден, то
mov ah,09h ; вывод msg
int 21h
lea dx,symb ; вывод самого символа
int 21h
lea dx,msg_err ; вывод msg_err
int 21h
call end_program ; завершить программу
end_program proc near
mov ah,4ch
int 21h
end_program endp
end start
Задание №4
Вывод на экран в текстовом режиме с использованием средств BIOS:
Ввести с клавиатуры строку, и вывести её на экран «ступеньками», то есть, увеличивая номер строки для каждого введенного символа, каждый символ должен иметь атрибуты отличные от остальных.
data segment
NL db 0Ah, 0Dh, '$'
Buf DB 255, 0, 256 DUP (0)
data ends
code segment ;отмечаем начало сегмента кодов
assume cs:code, dsata
START:
mov ax,data ;копируем адрес
mov ds,ax ;сегмента данных
mov dx,offset Buf ;считываем строку с клавиатуры
mov ah,0Ah
int 21h
xor cx,cx
mov al,[Buf+1] ;если считано 0 байт, то выход из
mov cl,al ;задаем количество повторений
;(длина строки)
test al,al ;программы
jz Exit
mov ah,09h
mov dx,offset NL ; перейти на следующую строку
int 21h
mov si,offset Buf+2
Cycle:
mov dl,[si] ;считать символ
mov ah,09h ; перевод каретки
mov dx,offset NL ;адрес строки с переводом каретки
int 21h ;вызов DOS
mov ah,02h ;выбор функции 2
int 21h ;вызов DOS
inc si ;перейти к следующему символу
loop Cycle
Exit:
mov AX,4C00h ;выход
int 21h ;из программы
code ends
END START
Задание №5
Вывод на экран в графическом режиме. Найти алгоритм Брезенхема, и написать программу, выводящую на экран прямую по двум заданным точкам в графическом режиме.
.model small
.stack 100h
.data
x_1 dw 20
x_2 dw 200
y_1 dw 0
y_2 dw 80
two_d_x dw ?
two_d_y dw ?
.code
.startup
; set segment registers
mov ax, @data
mov ds, ax
mov ax, 0A000h
mov es, ax
; set video mode ( 320x240@256 )
mov ax, 13h
int 10h
; di <- Y1
mov ax, y_1
mov bx, 320
mul bx
add ax, x_1
mov di, ax
; calculate delta(X)
mov ax, x_2
sub ax, x_1
; calculate delta(Y)
mov dx, y_2
sub dx, y_1 ; dx < delta(Y)
shl dx, 1 ; dx < 2 * delta(Y)
mov two_d_y, dx
; calculate E
mov bx, dx
sub bx, ax ; bx <- E
; cx <- delta(X)
mov cx, ax
dec cx
; calculate 2*delta(X)
shl ax, 1
mov two_d_x, ax
main_loop:
; draw pixel
;
mov byte ptr es:[di], 024h
;
; E loop
e_loop_condition:
cmp bx, 0
jl e_loop_end
; increase y ( 320 bytes offset per y )
add di, 320
; E = E - 2 * delta(X)
sub bx, two_d_x
jmp short e_loop_condition
e_loop_end:
; increase X
inc di
; E = E + 2 * delta(Y)
add bx, two_d_y
loop main_loop
; wait for any key
mov ah, 0h
int 16h
mov ax, 3h
int 10h
.exit(0)
End
Список литературы
Питер Абель. Ассемблер и программирование для IBM PC. Корона-Век, Энтроп, 2007.
Голубь Н.Г. Искусство программирования на ассемблере. М:DiaSoft,2002
Зубков С.В. Assembler. Язык неограниченных возможностей. ДМК Пресс, 1999. assembler команда цикл строка
Юрий Магда. Ассемблер для процессоров Intel Pentium. Питер, 2006.
Кип Р. Ирвин. Язык ассемблер для процессоров Intel. Вильямс, 2005.
Рудаков П. И., Финогенов К. Г. Язык ассемблера: уроки программирования.М: ДИАЛОГ-МИФИ, 2001.
Размещено на Allbest.ru
Подобные документы
Моделирование цифровых узлов комбинационного и последовательного типа. Арифметические команды. Манипуляции над битами. Совместное использование Ассемблер с другими языками программирования. Вывод на экран в текстовом режиме. Команды работы со строками.
отчет по практике [1,7 M], добавлен 11.03.2014Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.
курсовая работа [176,8 K], добавлен 18.01.2016Цель создания системы и критерии эффективности ее функционирования. Состав типовых проектных решений и пакетов прикладных программ, применяемых в системе. Описание алгоритма вывода координат и отправки команды. Описание программы формирования команды.
дипломная работа [2,9 M], добавлен 08.07.2012Создание и компиляция программ на ассемблере. Структура программ, использование специальных директив резервирования и инициализации данных. Организация ввода-вывода на ассемблере и организация вычислений. Команды передачи управления и обработки строк.
методичка [104,8 K], добавлен 02.12.2009Моделирование цифровых узлов комбинационного и последовательностного типа electronic work bench. Основы программирования на Ассемблере: арифметические команды, манипуляции над битами, строковые операции. Программирование с использованием пакета MASM.
отчет по практике [1,9 M], добавлен 10.01.2015Виды компьютерной графики. Программные средства для работы с фрактальной графикой. Базовые команды черчения. Основные и дополнительные сервисные команды AutoCAD. Растровая, векторная, фрактальная и трёхмерная графика. Команды редактирования чертежа.
курсовая работа [41,8 K], добавлен 22.04.2016Создание интерактивного интерпретатора для мелких вычислений стандартного "Калькулятора" Windows. Его реализация относительно несложного языка программирования, работающий в интерактивном режиме, то есть выполняющий вводимые команды с клавиатуры.
курсовая работа [287,3 K], добавлен 17.09.2008Формирование опыта создания программ с использованием программного продукта Turbo Assembler. Использование меньшего количества команд и обращений в память, увеличение скорости и уменьшение размера программы. Степень сложности совместной разработки.
реферат [15,4 K], добавлен 24.02.2010Основные команды для работы с файлами. Текстовый редактор vim. Простейшие команды для работы с текстом. Команды для управления процессами. Настройка оболочки и сценариев. Монтирование и демонтирование файловых систем. Базовые регулярные выражения.
лабораторная работа [2,7 M], добавлен 14.07.2012Анализ процесса обработки информации и выбор структур данных для хранения. Методы решения задачи и разработка основных алгоритмов предметной области. Структурная схема программного продукта. Описание эмуляции команды FSUB математического сопроцессора.
курсовая работа [172,6 K], добавлен 22.02.2011