Язык 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.