Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

по теме- ВВОДВЫВОД НА АССЕМБЛЕРЕ В DOS И LINUX

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ

САНКТ-ПЕТЕРБУРГСКИЙ

ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ

им. проф. М.А. БОНЧ-БРУЕВИЧА

Курсовая работа по дисциплине:

Машинно-зависимые языки программирования

по теме:

"ВВОД-ВЫВОД НА АССЕМБЛЕРЕ (В DOS И LINUX) "

Направление 23100 «Программная инженерия»

Студент группы СП-12

Осипов А.И.

Преподаватель Коробов С.А.

Санкт – Петербург

2013г.

Цель работы

ЦЕЛЬЮ НАПИСАНИЯ КУРСОВОЙ РАБОТЫ ЯВЛЯЕТСЯ:

Реализация целочисленного вычисления, сделанного в лабораторной работе  №2(по указанию преподавателя), полностью используя язык Ассемблера для организации корректного ввода-вывода информации:

  1.  исходные данные должны вводиться с проверкой правильности вводимых символов;
  2.  входные данные и результат должны быть проверены на область допустимых значений;
  3.  при наличии ошибки должно быть выдано соответствующее сообщение.

          Реализация задачи должна быть выполнена для MS DOS и для Unix.

ПОРЯДОК РАБОТЫ:

  1.  внимательно изучить свой вариант ввода-вывода целочисленной информации применительно к решаемой задаче;
  2.  написать на языке Ассемблера программу ввода исходных данных (с контролем допустимого диапазона), и вывода полученного результата;
  3.  встроить вызов уже разработанного и отлаженного ранее в лабораторной работе ASM-модуля в программу;

Операции ввода с клавиатуры и вывода на экран в DOS приложениях

Вывод на экран средствами DOS осуществляет 09 функция INT 21H DOS. Номер функции указывается в регистре AH. Адрес выводимой строки в DS:DX. В процессе выполнения операции конец сообщения определяется по oграничителю ($).

Знак ограничителя '$' можно кодировать непосредственно после cимвольной строки (как показано в примере), внутри строки: 'Имя покупателя?$', или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$". Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретиться в памяти. 

Команда LEA загружает адрес области PRMP в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля PRMP, загружаемый в DX по команде LEA, является oтносительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).

ВВОД ДАННЫХ С КЛАВИАТУРЫ.

Для ввода с клавиатуры используется функция 0AH INT 21H. Она требует наличия cписка параметров, содержащего поля, которые необходимы при выполнении команды INT.

  1.  должна быть определена максимальная длина вводимого текста;
  2.  должно быть определенное поле, куда команда возвращает действительную длину введенного текста в байтах.
  3.  должно быть зарезервировано в памяти место для вводимой строки

ПРЕОБРАЗОВАНИЕ СТРОКИ В ЧИСЛО И ЧИСЛА В СТРОКУ.

Данные, вводимые с клавиатуры, имеют ASCII-формат, например, буквы SAM имеют в памяти шестнадцатеричное представление 53414D, цифры 1234 - шест.31323334. Во многих случаях формат алфавитных данных, например, имя человека или описание статьи, не меняется в программе. Но для выполнения арифметических операций над числовыми значениями, такими как шест.31323334, требуется специальная обработка.

ПРЕОБРАЗОВАНИЕ ASCII-ФОРМАТА (СТРОКИ) В ДВОИЧНЫЙ ФОРМАТ (ЧИСЛО).

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

Процедура преобразования заключается в следующем:

  1.  Начинают с самого правого байта числа в ASCII-формате и обрабатывают справа налево.
  2.  Удаляют тройки из левых шестнадцатеричных цифр каждого ASCII-байта.
  3.  Умножают ASCII-цифры на 1, 10, 100 (шест.1, A, 64) и т.д.
  4.  Cкладывают результаты

ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО ФОРМАТА В ASCII-ФОРМАТ.

Для того, чтобы напечатать или отобразить на экране pезультат выполнения арифметических операций, необходимо преобразовать его в ASCII-формат. Данная операция включает в себя процесс обратный предыдущему. Вместо умножения используется деление двоичного числа на10 (шест.0A) пока результат не будет меньше 10. Остатки, которые лежат в границах от 0 до 9, образуют число в ASCII формате. В качестве примера рассмотрим преобразование шест.4D2 обратно в десятичный формат:

Частное

Остаток

4D2 : A =

7B

4

7B : A =

C

3

C : A =

1

2

Так как последнее частное 1 меньше, чем шест.A, то операция завершена. Остатки вместе с последним частным образуют результат в ASCII-формате, записываемый справа налево 1234. Все остатки и последнее частное должны записываться в память с тройками, т.е. 31323334.

Программирование в UNUX.

УТИЛИТА MAKE.

Задача утилиты make - автоматически определять, какие файлы проекта были изменены и требуют компиляции, и применять необходимые для этого команды. Хотя примеры применения относятся к использованию утилиты для описания процесса компиляции программ на языке С/С++, утилита может использоваться для описания сценариев обновления любых файлов.

СТРУКТУРА MAKEFILE.

Мakefile состоит из так называемых "правил", имеющих вид: 

имя-результата:     исходные-имена ...
команды
... 
... 

имя-результата - это обычно имя файла, генерируемого программой, например, исполняемый или объектный файл. "Результатом" может быть действие никак не связанное с процессом компиляции, например, clean - очистка. 

исходное -имя - это имя файла, используемого на вводе, необходимое, чтобы создать файл с именем-результата. 

команда- это действие, выполняемое утилитой make. Правило может включать более одной команды, В начале каждой команды надо вставлять отступ (символ "Tab"). Команда выполняется, если один из файлов в списке исходные-имена изменился. Допускается написание правила содержащего команду без указания зависимостей. Например, можно создать правило "clean", удаляющее объектные файлы проекта, без указания имен. 

Итак, правила объясняют как и в каком случае надо пересобирать определённые файлы проекта. 

Стандартные правила:
К числу стандартных правил относятся:

  1.  all - основная задача, компиляция программы.
  2.  install - копирует исполняемые коды программ, библиотеки настройки и всё что необходимо для последующего использования
  3.  uninstall - удаляет компоненты программы из системы
  4.  clean- удаляет из директории проекта все временные и вспомогательные файлы.

Пример makefile:
Ниже приводится простой пример (номера строк добавлены для ясности).
# Создать исполняемый файл "client"
1 client: conn.o
2     g++ client.cpp conn.o -o client

# Создать объектный файл "conn.o"
3 conn.o: conn.cpp conn.h
4     g++ -c conn.cpp -o conn.o

В этом примере строка, содержащая текст client: conn.o, называется "строкой зависимостей", а строка g++ client.cpp conn.o -o client называется "правилом" и описывает действие, которое необходимо выполнить.

1 Задается цель -- исполняемый файл client, который зависит от объектного файла conn.o;
2 Правило для сборки данной цели;
3 Задается цель conn.o и файлы, от которых она зависит -- conn.cpp и conn.h;
4 Описывается действие по сборке цели conn.o.

Строки, начинающиеся с символа "#", являются комментариями.


ВЫЗОВ ФУНКЦИЙ SCANF И PRINTF ИЗ NASM.

 Функции scanf и printf определены в библиотеке glibc. Эти функции можно указать в ассемблерной программе как внешние с помощью директивы EXTERN. Объектный файл получается стандартным образом. А вот при компоновке (линковке) необходимо указать библиотеку libc.so либо использовать для компоновки gcc, который, в отличие от ld по умолчанию компонует все объектные файлы с библиотекой libc.so

Реализация  лабораторной работы №2 «Организация условных переходов»  

16

100+a/b         , если a < b
  32            , a > b
a*a/b           ,
если a = b


Листинг программы :

cseg segment

assume ss:cseg,es:cseg,cs:cseg,ds:cseg

org 100h

Start:

call main

; Данные

aaI dw ?

bbI dw ?

res dw ?

CR_LF db 10,13,'$'

msga db 'In A: $'

msgb db 'In B: $'

msgres db 'Res : $'

msge db 'Error!$'

msgp db 'Any key...$'

inbuf label byte

maxlen db 11

actlen db ?

field db 11 dup(?),'$'

L dw 6

outbuf db 11 dup (?),'$'

 

; MAIN

main proc

 mov dx,offset msga

 call print

 call readstr

 mov bx,dx

 call aib

 mov aaI,ax

 call ent

 

 mov dx,offset msgb

 call print

 call readstr

 mov bx,dx

 call aib

 mov bbI,ax

 call ent

 

 call lab2

 

 mov dx,offset msgres

 call print

 mov ax,res

 lea bx,outbuf

 call bia

 lea dx,[bx]

 call print

 call ent

 

 mov dx,offset msgp

 call print

 call waitkey

 int 20h

 ret

main endp

; Ввод строки

readstr proc

 push ax

 lea dx,inbuf

 mov ah,0ch

 mov al,0ah

 int 21h

 xor cx,cx

 mov cl,actlen

 add dx,2

 pop ax

 ret

readstr

 ; Преобразование из строки в двоичную систему

 aib proc

 push bx

 push cx

 xor ax,ax

 chkneg:

  cmp byte ptr [bx],'-'

  jne chkpos

  inc bx

  dec cx

  call constr

  neg ax

  jmp Quit

 chkpos:

  call constr

 Quit:

  pop cx

  pop bx

 ret

aib endp

 ; Преобразование из двоичной системы в строку

 bia proc

 push dx

 push si

 push ax

 mov cx,L

 FB:

  mov byte ptr [bx], ' '

  inc bx

  loop FB

 mov si,10

 or ax,ax

 jns DV

 neg ax

 DV:

  xor dx,dx

  div si

  add dx,'0'

  dec bx

  mov byte ptr [bx],dl

  inc cx

  or ax,ax

  jnz DV

  pop ax

  or ax,ax

  jns NM

  dec bx

  mov byte ptr [bx],'-'

  inc cx

 NM:

  pop si

  pop dx

 ret

bia endp

 ; Процедура конвертирования строки

 constr proc

 push bp

 push bx

 push si

 mov bp,bx

 xor bx,bx

 mov si,10

 digit:

  push dx

  mul si

  pop dx

  mov bl,ds:[bp]

  and bx,0fh

  add ax,bx

  jc endcon

  inc bp

  loop digit

 endcon:

  pop si

  pop bx

  pop bp

 ret

 constr endp

 

; Процедура перевода строки

 ent proc

 push dx

 mov dx,offset CR_LF

 call print

 pop dx

 ret

ent endp

 ; Процедура отлавливания кода клавиши

 waitkey proc

 push ax

 mov ah,8

 int 21h

 pop ax

 ret

waitkey endp

 

 

; Вывод

print proc

 push ax

 mov ah,09h

 int 21h

 pop ax

 ret

print endp

 ; Вторая лабораторная работа

 lab2 proc

 push ax

 push bx

 mov res,0

 mov ax,aaI

 mov bx,bbI

 cmp ax,bx

 JL Less

 JE EqInt

 JG Great

 jmp Cont

Less:

 mov ax,aaI

 mov bx,bbI

 cwd

 idiv bx

 add ax,100

 mov res,ax

 jmp Cont

Great:  

 mov res,32

 jmp Cont

EqInt:

 xor dx,dx

 mov ax,aaI

 mov bx,bbI

 imul aaI

 idiv bx

 mov res,ax

 jmp Cont

Cont:

 pop bx

 pop ax

 ret

lab2 endp

cseg ends

end Start
Листинг программы «LINUX»

global main

extern exit

extern puts

extern scanf

extern printf

section .text

main:

push dword bbbS ;Помещение в стек

push dword aaaS ; Команда уменьшает значение регистра

push dword msg1 ; указателя стека ESP(SP) на 4(2) и затем

call scanf ; записывает значение источника в

sub esp, 12 ; вершину стека.

mov eax,dword[aaaS]

mov ebx,dword[bbbS]

cmp ax,bx

JL Less

JE EqInt

JG Great

Less:

cwd

idiv bx

add ax,100

jmp Cont

Great:  

mov ax,32

jmp Cont

EqInt:

imul aaaS

idiv bx

Cont: cwd ;Преобразование слова в двойное слово

xchg ax,dx ; Обмен значениями между операндами

shl eax,16 ; Сдвиг всех битов операнда влево на количество разрядов

mov ax,dx

push eax

push dword msg2

call printf

sub esp,8

push dword 0

call exit

ret

;code ends

section .data

msg1 db "%d%d",0

msg2 db "%d",0xA,0

aaaS dd 0

bbbS dd 0



Вывод

В данной курсовой работе я освоил ввод и вывод данных, условные и безусловные переходы, подключение библиотечных функций, уяснил особенности реализации задачи на MASM и NASM компиляторах и в различных операционных системах (DOS, UNIX).




1. Загальна характеристика країнипартнера 1
2. а вывод. В таблице.
3. Формирует спрос и способствует обеспечению сбыта различных товаров услуг в отдаленных от места их произво
4. 1 Понятие и признаки наследования как основания возникновения права собственности
5. Конституционное право ldquo;Constitutionl lwrdquo; Язык и обучения- русский Трудоемкость- 6 зачетных един.html
6. преподавать во всем христианском мире и сделали его международным центром образования
7. Legl nd linguistic spects of trnslting english legl terminology
8. издательским советом университета Омск 2002 УДК 101 ББК Ю
9. Государственное устройство РФ Конституционно-правовые основы местного самоуправления в России, его сущностные признаки
10. Гражданство Республики Беларусь
11. Возможности графических карт
12. Разработка системы краткосрочного прогнозирования спроса на продукцию с использованием принципа самоорганизации
13. а б в Рис
14. физическом сближении с помощью современных средств коммуникации стран и народов всех континентов делают в.html
15. запустила свои руки во все изучаемые школьные предметы
16. Проектування каталогу мобільних телефонів у ccess
17. пенные и жидкостные для подачи воздушномеханической пены получаемой из водных растворов пенообразователе
18. I. Поведение преподавателя
19. ПСИХОЛОГИЯ И ФИЛОСОФИЯ КУЛЬТУРЫ 5 курс 2013 - 2014 уч
20. і Б~л ~орытынды к~рсеткішті~ статистикалы~ ж~не кездейсо~ ба~асы болып келеді