Робота з записами мови ассемблера - Курсовая работа

бесплатно 0
4.5 62
Навички роботи з записами мови ассемблера, зокрема, створення масивів записів з можливістю управління елементами і очищення поля. Програма дозволяє ввести з клавіатури запис, а потім за допомогою функціональних клавіш дозволяє редагувати цей запис.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Запис - структурний тип даних, що складається з фіксованого числа елементів завдовжки від одного до декількох біт. Використовування записів в програмі, так само, як і структур, організовується в три етапи: Задання шаблона запису, тобто визначення набору бітових полів, їх довжин і, при необхідності, ініціалізація полів. Так само, як і для структур, цей етап має на увазі ініціалізацію конкретної змінної типом наперед визначеної за допомогою шаблона запису. Компілятор TASM, крім стандартних засобів обробки записів, підтримує також і деякі додаткові можливості їх обробки. Для використовування шаблона запису в програмі необхідно визначити змінну з типом даного запису, для чого застосовується наступна синтаксична конструкція (мал.У ході розробки курсового проекту були вивчені навички роботи з записами мови ассемблера, зокрема, створення масивів записів, доступу до них, створення в них записів, з можливістю управління елементами і очищення поля.

План
Зміст

Вступ

Загальні відомості

Функціональне призначення

Опис логічної структури

Використовувані технічні засоби

Виклик і завантаження

Вхідні дані

Вихідні дані

Висновки

Література

Вывод
У ході розробки курсового проекту були вивчені навички роботи з записами мови ассемблера, зокрема, створення масивів записів, доступу до них, створення в них записів, з можливістю управління елементами і очищення поля. Розроблена програма дозволяє ввести з клавіатури запис, представлений у вигляді прізвища, імені, по батькові, назва міста і дати народження, а потім за допомогою функціональних клавіш дозволяючих: -додати запис;

-видалити запис;

-змінити поле;

-очистити поле.

Список литературы
1. Финагенов К.Г. “Основы системного программирования” изд.”Радио и Связь”2001 год.

2. Питер Абель “Ассемблер- язык и программирование для IBM PC” изд. Киев “НТИ” 2003 год.

3. Зубков С.В.”Ассемблер для DOS,WINDOWS И UNIX ” Москва 2004г.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”

Кафедра"Обчислювальної техніки та програмування"

Затверджую

__________________________

_________________/ /

“___” ________________2005 р.

Робота з записами мови ассемблера

Текст програми

Лист затвердження xxxxxxxxxxxx

Виконав ст. гр xxxxxx xxxxxxx

“___” ________________2005 р.

Перевірив xxxxxxxxxx.

“___” ________________2005 р.

Харків

2005

ЗАТВЕРДЖЕНО xxxxxxxxxxxx

Робота з записами мови ассемблера

Текст програми xxxxxxxxx - 12 00-01

Харків

2005

РАЗРАБОТКА ТЕКСТА ПРОГРАММЫ

Главная программа: LOCALS include defs.inc

.model tiny

.386

.387

.code org 100h start: call clrscr ;очитска экрана mov al,17h mov bx,0000h mov cx,80*25 call settextattr ;установка атрибутов текста mov ax,0016h call gotoxy lea dx,title1 call writestring ;вывод заголовка mov ax,0100h call gotoxy lea dx,separ call writestring ;вывод разделителя mov ax,1700h call gotoxy lea dx,separ call writestring call main ;вызов главной финкции call clrscr ret main proc near call writemenu ;вывод меню cmp proglevel,3 jne @@l1 call viewel ;вывод текущего элемента

@@l1: mov ax,1900h call gotoxy xor ax,ax int 16h ;ожидание и чтение сканкода нажатой клавиши cmp ah,SF10 je @@exit1 cmp proglevel,1 jne @@l2 call keyb1lvl jmp main

@@l2: cmp proglevel,2 jne @@l3 call keyb2lvl jmp main

@@l3: call keyb3lvl jmp main

@@exit1: ret main endp writemenu proc near ;вывод меню push ax dx si mov ax,1800h call gotoxy lea dx,clr call writestring mov ax,1800h call gotoxy xor ax,ax mov al,proglevel dec al shl ax,1 lea si,menux add si,ax mov dx,[si] call writestring pop si dx ax ret writemenu endp keyb1lvl proc near cmp ah,SF2 jne @@ex1 mov proglevel,2

@@ex1: ret keyb1lvl endp keyb2lvl proc near cmp ah,SF3 jne @@ex1 mov ax,0 call input_record mov proglevel,3 mov curitem,1 mov itemscnt,1

@@ex1: ret keyb2lvl endp keyb3lvl proc near cmp ah,SF3 jne @@l1 mov ax,itemscnt call input_record inc itemscnt jmp @@ex1

@@l1: cmp ah,SF6 jne @@l2 cmp curitem,1 je @@ex1 dec curitem jmp @@ex1

@@l2: cmp ah,SF7 jne @@l3 push ax mov ax,curitem cmp ax,itemscnt je @@ll2 inc curitem

@@ll2: pop ax jmp @@ex1

@@l3: cmp ah,SF4 jne @@l4 mov ax,curitem dec ax call input_record jmp @@ex1

@@l4: cmp ah,SF8 jne @@l5 pusha mov ax,curitem dec ax xor dx,dx mov bl,size STUD mul bl add ax,offset mas mov di,ax mov si,ax add si,size STUD mov ax,itemscnt sub ax,curitem xor dx,dx mul bl mov cx,ax rep movsb mov ax,curitem cmp ax,itemscnt jne @@ll4 dec curitem

@@ll4: dec itemscnt cmp itemscnt,0 jne @@lll4 mov proglevel,2 call clrworkfield

@@lll4: popa jmp @@ex1

@@l5: @@ex1: ret keyb3lvl endp include funcs.inc include record.inc proglevel db 1 ; 1 - массива еще нет

; 2 - создан пустой массив

; 3 - есть непустой массив title1 db "Работа с записями языка ассемблера",0 data1 db "Элемент ",0 data2 db " из ",0

INPNAME db " Имя : ",0

INPAGE db " Возраст: ",0

INPCITY db " Город : ",0 separ db 80 dup (196),0 clr db 79 dup (" "),0 menux dw offset menu1,offset menu2,offset menu3 menu1 db " F2 - Создание массива F10 - Выход",0 menu2 db " F3 - Добавление элемента F10 - Выход",0 menu3 db " F3-Добав. эл. F4-Изм. эл. F6->",\

F8-Удал. эл. F10-Выход",0

АП 02093 curitem dw 1 itemscnt dw 0 mas: ;начало массива записей end start

Ввод записи с клавиатуры: input_record proc near ;ввод записи с клавиатуры pusha push ax call clrworkfield mov ax,0500h call gotoxy lea dx,INPNAME call writestring lea dx,TMP.SNAME mov al,20 call readstring mov ax,0600h call gotoxy lea dx,INPAGE call writestring call readword mov TMP.SAGE,ax mov ax,0700h call gotoxy lea dx,INPCITY call writestring lea dx,TMP.SCITY mov al,20 call readstring xor dx,dx mov ax, size STUD mov cx,ax pop bx mul bx add ax,offset mas mov di,ax lea si,TMP rep movsb popa ret

TMP STUD input_record endp viewel proc near ; вывод записи на экран pusha mov ax,curitem dec ax xor dx,dx mov bl,size STUD mul bl add ax,offset mas mov si,ax call clrworkfield cmp itemscnt,0 je @@ex2 mov ax,0500h call gotoxy lea dx,INPNAME call writestring lea dx,[si].SNAME call writestring mov ax,0600h call gotoxy lea dx,INPAGE call writestring mov ax,[si].SAGE call writeword mov ax,0700h call gotoxy lea dx,INPCITY call writestring lea dx,[si].SCITY call writestring

@@ex2: mov ax,1600h call gotoxy lea dx,data1 call writestring mov ax,curitem call writeword lea dx,data2 call writestring mov ax,itemscnt call writeword

@@ex1: mov ax,1900h call gotoxy popa ret viewel endp memzero proc near ;Обнуление памяти

;DS:DX->Mem

;CX=SIZE push ax cx di es xor ax,ax mov di,dx push ds pop es cld rep stosb pop es di cx ax ret memzero endp readstring proc near ;Чтение строки с клавиатуры

;DS:DX->буффер

;AL=макс. колво символов push ax dx xor cx,cx mov cl,al call memzero mov @@buf,al mov ah,0Ah lea dx,@@buf int 21h lea si,@@buf inc si xor cx,cx mov cl,[si] inc si pop di push dx rep movsb pop dx ax ret

@@buf db 0, 60 dup (?) readstring endp readword proc near ;Чтение числа с клавиатуры push bx dx si lea dx,@@tmps mov al,3 call readstring xor ax,ax lea si,@@tmps cmp byte ptr [si 1],0 jne @@l2 mov al,[si] xor bx,bx jmp @@l1

@@l2: mov al,[si] cmp al,"0" jb @@ex1 cmp al,"9" ja @@ex1 sub al,"0" mov bl,10 mul bl mov bx,ax mov al,[si 1]

@@l1: cmp al,"0" jb @@ex1 cmp al,"9" ja @@ex1 sub al,"0" add ax,bx jmp @@ex2

@@ex1: xor ax,ax

@@ex2: pop si dx bx ret

@@tmps db 3 dup (?) readword endp writestring proc near ;Вывод строки на экран

;DS:DX->STR push ax si mov si,dx cld

@@l1: lodsb test al,al jz @@l2 push si mov ah,0Eh int 10h pop si jmp @@l1

@@l2: pop si ax ret writestring endp writeword proc near ;Вывод числа на экран

;EAX=WORD pusha cmp ax,0 jne @@ll1 mov ax,0E30h int 10h popa ret

@@ll1: lea dx,@@res_str mov cx,20 call memzero mov @@value,eax fild @@value ;загрузка числа в сопроцессор fbstp @@bcd_value ;выгрузка из сопроцессора в память

;в BCD формате (двоично-десятичный) mov si,offset @@bcd_value 10-1 lea di,@@res_str std

@@l1: lodsb test al,al jz @@l1 push ax shr al,4 test al,al jz @@l3 add al,"0" mov [di],al inc di

@@l3: pop ax and al,0Fh add al,"0" mov [di],al inc di cmp si,offset @@bcd_value jb @@l2 jmp @@l1

@@l2: lea dx,@@res_str call writestring popa ret

@@value dd 0

@@bcd_value dt 0

@@res_str db 20 dup (0) writeword endp gotoxy proc near ;Установить позицию курсора

;AH=Y AL=X push ax bx dx mov dx,ax xor bh,bh mov ah,2 int 10h pop dx bx ax ret gotoxy endp clrscr proc near ;Очитска экрана push ax mov ax,0003 int 10h pop ax ret clrscr endp settextattr proc near ;установка атрибутов текста

;AL=атрибут

;BL=X BH=Y - начальная позиция

;CX - количество знакомест push ax bx cx di es mov dl,80*2 push ax xor ax,ax mov al,bh mul dl xor dx,dx mov dl,bl shl dx,1 add ax,dx mov di,ax inc di pop ax mov dx,0B800h push dx pop es

@@l1: stosb inc di loop @@l1 pop es di cx bx ax ret settextattr endp clrworkfield proc near ; очитска рабочей части экрана push ax cx dx mov ax,0500h lea dx,clr mov cx,3

@@l1: call gotoxy call writestring inc ah loop @@l1 mov ax,1600h call gotoxy lea dx,clr call writestring pop dx cx ax ret clrworkfield endp.

SF2 equ 3Ch

SF3 equ 3Dh

SF4 equ 3Eh

SF5 equ 3Fh

SF6 equ 40h

SF7 equ 41h

SF8 equ 42h

SF9 equ 43h

SF10 equ 44h

STUD STRUC

SNAME db 20 dup (" ")

SAGE dw 0

SCITY db 20 dup (" ")

STUD ends

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?