Жоспар №10859

Ассемблер тілінде жазылған экрандық меню бағдарламасын құру және талдауы

Сұрақ-жауап

Сұрағыңызға жасанды интеллект жауап береді

 ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Қаныш Сатпаев атындағы қазақ ұлттық техникалық университеті Есептеу техника кафедрасы КУРСТЫҚ ЖОБА Тақырыбы: Меню жетекші: аға оқытушы Мустафина Б.М. нормоконтролер: оқытушы Азембаева Г.Т. Тапсырған күні: “___” _________ 2003 г. қолы: _____________________ студент: Бектасова Г. тобы: ЗБИ-00-1 мамандығы: 3704 Алматы 2003 Қазақстан Республикасының Білім және Ғылым Министірлігі Қ.И.Сәтпаев атындағы Қазақ Ұлттық Техникалық Университеті Ақпараттану және Ақпараттық Технологиялар Институты Есептеуіш техникасы кафедрасы Мамандығы Курстық жұмысты орындауға тапсырма Студент Бектасова Г. А. Жұмыстың тақырыбы ”Меню“программасын құру. Оны толық экранда көру, Аяқталған жұмысты тапсыру уақыты:19.05.03. Тапсырманың берілген уақыты: 15.03.03. Жұмыстың жетекшісі Мұстафина Б.М. Мазмұны Кіріспе 1.Есеп қойылымы және шешудің алгоритімі...............................5 Ассемблер тілінде программалау..........................................5 Ассемблер командасының пішімі.........................................6 Программаның жазылуы........................................................6 Есепті шешудің алгоритімі....................................................7 Программаның жолдық көрсетілуі.......................................8 2.Программадағы инструкция..........................................................9 2.1 Прогрммистке (жүйелік) басқару..............................................9 2.2 Операторлық босқару.................................................................9 3. Программада қолданылған функциялар мен командалар........10 Қортынды..........................................................................................14 Қолданылған әдебиеттер Қосымша А Кіріспе Бұл курстық жобада маған қойылған тапсырма “Меню” программасын Берілген курстық жұмыс программасы меню вариантын ұсынады. Программаны Есеп қойылымы және шешудің алгоритімі Ассемблар тілінде программалау Ассемблер тілінде программа жазу кезінде қолданылатын кейбір қажетті Оператор- бұл белгілі бір әрекет жасау үшін машинаға Макрокоманда - бастапқы программадағы бірнеше машинелік командалардың Ассемблер тілінде тұрақты шамалардың бірнеше түрі қолданылады. Екілік тұрақты шама (0 және 1). Бұл символдар Оналтылық тұрақты шамалар (0 – 9,A,B,C,D,E,F). Міндетті түрде Ондық тұрақты шамалар (0-9). Соңына D әрпін қоюғада, Символдық тұрақты шамалар. Тырнақшаға алынған кез-келген символдар немесе 1.2 Ассемблер командасының пішімі [таңба:] шартбелгі [1-операнд],[ 2-операнд] [;түсініктеме]. Тікжақшаға Таңба Таңба символдардан тұрады. Бұл символдар жинағы қос нүктемен - таңба аталымының арасында бос аралық болмау керек; таңба аталымы ішінде (.) пайдаланылатын болса, ол бірінші регистлердің аттарын таңба ретінде алуға болмайды; таңбаның аталымы үшін белгілі бір мағананы білдіретін сөздер көп қайталанатын бірдей әріптерді пайдаланбаған дұрыс (мысалы: АААА). Операцияның шартбелгісі. Шартбелгі- команданың мнемоникалық шартбелгілерінен құралады.Таңбадан және басқа Операндтар. Операндта деректер, деректердің мекені және регистрлердің аттары сақталады. Түсініктеме. Белгісі- нүктелі үтір (;) . Алдындағы команданың бөліктерінен 1.3 Программаның жазылуы “Меню” программасы ассемблер тілінде жазылған. Бұл программаны орындау үшін осы ассемблер тілінің Жүйелік талап: компъютер IBM PC және операциялық жүйе Бұл программа Intel Pentium 166, MMX ,VGA.28 электронды Программаны орындауға шақыру командалық жолдағы Nazym.exe файлын шақыру Бұл программа “UP” ,”DOWN”, ”ENTER” және ”ESC” пернелерімен Графикалық режимде экранға енгізілетін ақпарат: негізгі меню. Тапсырма шешімінің алгоритімі 1,4 пункте берілген. 1.4 Есептi шешудiң алгоритмi Программа бойынша инструкция 2.1. Программистке (жүйелік) басқару. Программаның қолданылуы – текстік файлды қарау. IBM PC Программа GULNARA.EXE файлын жүктеу арқылы іске асады. Кіріс мәліметтер – командалық жолда файл аты. Шығыс мәліметтер – дисплейде текстік ақпарат. 2.2. Операторлық басқару (пользователь) Программаны іске қосу KURS каталогындағы GULNARA.EXE файлын жүтеу Бұл программаны іске қоспас бұрын кез-келген кеңейтілуі .TXT ”Ch.DIR” пунктін және пернесін басқаннан кейін Перне атауы Атқаратын қызметі Төменге бағыттаушы стрелка Курсорды төмен жылжыту Жоғарыға бағыттаушы стрелка Курсорды жоғары жылжыту ESC Шығу 3. ПРОГРАММАДА ҚОЛДАНЫЛҒАН ФУНКЦИЯЛАР МЕН КОМАНДАЛАР Мен бұл курстық жұмысты орындау барысында Ассемблер машиналық Енді жоғарыда айтылған функцияларды сипаттап өтейік: DOS (21h) үзуінің функциясы: 09h – дисплейге символдар қатарын шығаруды жүзеге асырады. Символдық жолды стандартты шығу құрылғысына шығарады. Жол $ Шақыруда: DS:DX - $ -белгісімен бітетін 01h – пернетақтадан символды енгізуді жүзеге асырады. Стандартты енгізу құрылғысынан қатарды шығарады да оны стандартты 3Fh – деректерді құрылғыдан енгізуді жүзеге асырады. Деректерді файлдан қолданушының буферіне жібереді де көрсеткішті модифициялайды. Шақыруда: BX – файлды сипаттаушы DS:DX –деректерді оқу үшін буфер адресі CX – оқылатын байт саны Қайта келу кезінде: AX – қате коды, егер CF орнатылған AL –оқылған байттардың нақты саны 40h – Файлды жазуды немесе құрылғыға шығаруды жүзеге Деректерді файлдан қолданушының буферіне жібереді де көрсеткішті модифициялайды. Шақыруда: BX – файлдың немесе құрылғының логикалық номері. Дисплейдің CX – шығарылатын символдар саны DS:DX – буфер адресі Қайта келу кезінде: AL – нақты саналған байт саны Егер CF=0, онда AX-ке фактілі жазылған байттар 4Ah –Жадының белгіленген блогының өлшемін өзгертуін жүзеге асырады. Жадының белгіленген блогының өлшемін кішірейтеді немесе кеңейтеді. Шақыруда: BX – блоктың қажет өлшемі ES – модифицияланған блоктың сегменттік адресі Қайта келу кезінде: AX – қате коды BX –жады блогының ең үлкен өлшемі 10h үзуінің функциясы – видио сервис: 01h – Курсордың конфигурациялық орнатылуын жүзеге асырады. Текстілік видиорежимде ашылатын аппараттық курсордың бастапқы және соңғы Шақыруда: CH-тің 0…4 биттері – бастапқы қатар СL-тің 0…4 биттері– соңғы қатар 02h – Курсордың позициясын орнатуды жүзеге асыру. Көрсетіген бетте экранға текстілік координатта курсордың орнатады. Курсорды Шақыруду: BH – видио беттің номері, 0- бірінші бет DH, DL – қатар, бағана 06h – Терезені жоғары айналдыру (немесе тазалау). Терезені берілген координаттармен, берілген атрибуттармен ASCII–ің пробелдерімен немесе Функцияны экранды немесе экранның кез-келген тікбұрышты ауданын тез Шақыруда: CH, CL – терезенің жоғарғы сол бұрыш қатары, DH, DL – терезенің төмнегіоң бұрыш қатары, бағанасы AL – бос қатар саны, төменнен жоғары жылжыту(0 BH – бос қатарлар үшін қолданылатын видио атрибут 08h – Курсордың позициясында қатарды және атрибутты Берілген бетте ASCII символын және оның атрибутын курсордың Шақыруда: BH – бет Қайта келу кезінде: AL – символ AH – атрибут. 09h – Символды атрибутымен курсордың ағымдағы позициясына шығаруды Ағымдағы курсор позициясына қатарды және оның атрибуттарын графикалық Шақырылу: ВL – атрибут (текстілік режим) немесе түс ВH – бет AL – символ СХ – қайталану коэффициенті 0Сh – Пиксельдерді жазу. Берілген графикалық позицияда берілген түсті нүктені видиобуферге жазады. Шақыруда: АL – түс (түсті регистрдің номері) ВH – бет DX – графикалық қатар СХ – графикалық бағана BIOS (16h) үзуінің функциясы: 00h – пернетақтадан символды оқуды жүзеге асырады. Перне басылғаннан кейін (егер ASCII кодасы бар символды Қорытынды Курстық жобамен жұмыс істеу уақытында ASSЕMBLER тіліндегі объективті Дайындау барысында программалық документация., программалық ASSЕMBLER, MICROSOFT WORD, Қолданылған әдебиеттер 1. Тұрым А. ЭВМ кешендер, 2. Куцый А.П, Мұстафина Б.М, Ахметова М.А 3. Финогенов К.Г Самаучитель по системным функциям Москва 1993. sseg segment db 512 dup(?) sseg ends dseg segment paramblk dw 7 dup(0) exname db '2.exe',0 fname db 'readme.txt',0 bufin db 80 dup(' ') handle dw 0 left = 8 top = 1 wids = 10 height = 5 StrNum db ? StbNum db ? atr db ? ramka2 db ' Файл ramka1 db 218,9 dup (196),191,10,13 db left dup(0),179,' Кpасный ',179,10,13 db left dup(0),179,' Желтый ',179,10,13 db left dup(0),179,' Зеленый ',179,10,13 db left dup(0),179,' Синий ',179,10,13 db left dup(0),192,9 dup (196),217,10,13,'$' ramka3 db 218,7 dup (196),191,10,13 db 179,' *.EXE ',179,10,13 db 179,' *.TXT ',179,10,13 db 179,'Ch. DIR',179,10,13 db 179,'Ch.DISC',179,10,13 db 179,'See DIR',179,10,13 db 192,7 dup (196),217,10,13,'$' DirPr dw DP1,DP2,DP3 path1 db 66,0,64 dup errdir db 'Error!!! Directory does not exist...','$' disks db 26 dup(0) diskkol db 0 files db 0 filefind db '*.*',0 newDTA db 128 dup (0) dseg ends cseg segment assume ds:dseg, ss:sseg, cs:cseg ;---------------------------------clear screen------------------------------- Proc cls mov cx,0 mov dx,184fh mov al,0 mov ah,06h mov bh,8 int 10h ret cls endp ;--------------------------------LineHOR-------------------------------------- proc lineHOR mov cx,7 mov dh,0 mov ah,2 int 10h lnhor: push cx mov cx,1 mov ah,8 int 10h mov ah,9 int 10h inc dl mov ah,2 int 10h pop cx loop lnhor ret lineHOR endp ;--------------------------------Line3-------------------------------------- proc line3 mov cx,8 mov dl,0 mov ah,1 int 10h ln3: push cx mov cx,1 mov ah,8 Int 10h mov ah,9 int 10h inc dl mov ah,2 int 10h pop cx loop ln3 ret line3 endp ;--------------------------------Line-------------------------------------- proc line mov cx,wids-1 mov dl,left+1 mov ah,2 int 10h ln: push cx mov cx,1 mov ah,8 int 10h mov ah,9 int 10h inc dl mov ah,2 int 10h pop cx loop ln ret line endp ;--------------------------------Draw HOR ramka----------------------------- proc HorDrawRamka mov ah, 02h ;Draw HOR Ramka mov dh,0 mov dl,0 mov bx,0 int 10h mov ah,09h lea dx,ramka2 int 21h ret HorDrawRamka endp ;--------------------------------Draw ramka3----------------------------- proc DrawRamka3 mov ah, 02h ;DrawRamka mov dh, 1 mov dl,0 mov bx,0 int 10h mov ah,09h lea dx,ramka3 int 21h ret DrawRamka3 endp ;--------------------------------Draw ramka----------------------------- proc DrawRamka mov ah, 02h ;DrawRamka mov dh, top mov dl,left mov bx,0 int 10h mov ah,09h lea dx,ramka1 int 21h ret DrawRamka endp ;--------------------------------Draw HOR background----------------------------- proc HorBackground mov ah,06h mov al,0 mov bh,atr mov ch,0 mov cl,0 mov dh,0 mov dl,79 int 10h ret HorBackground endp ;--------------------------------Draw background3----------------------------- proc Background3 mov ah,06h mov al,0 mov bh,atr mov ch,1 mov cl,0 mov dh,7 mov dl,8 int 10h ret Background3 endp ;--------------------------------Draw background----------------------------- proc Background mov ah,06h mov al,0 mov bh,atr mov ch,top mov cl,left mov dh,top+height mov dl,left+wids int 10h ret Background endp ;---------------------------------------------------------------------------- DP1: ;Процедура установки директория mov ah,2 ;Установить mov bx,0 ;курсор mov dh,4 ;в позицию mov dl,10 ;4х10 int 10h mov ah,0Ah ;Ввод lea dx,path1 ;строки символов в пересенную path1 int 21h xor bx,bx mov bl,path1[1] ;Записать в BL количество введенных символов mov path1[bx+2],0 mov ah,3Bh ;Установить lea dx,path1[2] ;текущий директорий int 21h jc errchdir ;Если ошибка - перейти на call cls ;Обновить call HorBackGround ;экран call HorDrawRamka ; mov ah,02 ;Установить xor bx,bx ;курсор mov dh,20 ;в позицию mov dl,0 ;20x0 int 10h mov ah,09h ;Вывести lea dx,mes1 ;сообщение mes1 int 21h ret errchdir: call cls ;Обновить call HorBackGround ;экран call HorDrawRamka mov ah,02 ;Установить xor bx,bx ;курсор mov dh,20 ;в позицию mov dl,0 ;20x0 int 10h mov ah,9 ;Вывести lea dx,errdir ;сообщение errdir int 21h ret ;---------------------------- DP2: ;Процедура переключения текущего диска mov disks[0],'A' ;Записать в таблицу имен дисков "A" mov diskkol,0 ;Сбросить количество обнаруженных дисков xor dx,dx ;В DX будет логический номер mov bx,1 mov cx,24 ;кол-во проверяемых дисков mov dl,03h ;Начать проверку с жестких дисков lea si,diskpath ;строка, куда будет возвращаться путь на checkdisks: test cx,cx ;если CX=0 jz chngdisk ;то перейти на chngdisk mov ah,47h ;определить текущий директорий на int 21h ;проверяемом диске jc nodisk ;идти на nodisk, если ошибка mov disks[bx],dl ;иначе записать в таблицу имен дисков add disks[bx],40h ;и преобразовать его в латинскую букву inc bx ;перейти к следующему имени диска inc dl ;следующий логический номер диска dec cx ;уменьшить счетчик jmp checkdisks ;вернуться на проверку nodisk: ;если диск не определился inc dl ;проверить следующий логический номер dec cx ;уменьшить счетчик jnz checkdisks ;если счетчик не = 0, chngdisk: mov diskkol,bl ;в DISKKOL - количество найденных call cls ;Обновить call HorBackGround ;экран call HorDrawRamka mov ah,02h ;Установить mov bh,0 ;курсор mov dh,20 ;в позицию mov dl,0 ;20x0 int 10h xor cx,cx ;Обнулить счетчик mov cl,diskkol ;записать в счетчик количество дисков xor bx,bx diskout: ;Вывод имен найденных дисков mov al,disks[bx] ;Поместить имя диска в AL int 29h ;Вывести его на экран inc bx ;перейти к следующему имени loop diskout mov ah,02h ;Установить mov bh,0 ;курсор mov dh,20 ;на имя первого mov dl,0 ;диска (A) int 10h dec diskkol readdiskkey: mov ah,0 ;Ожидание нажатия на клавишу int 16h cmp ah,01h ;ESC je ret1 cmp ah,4Bh ;Стрелка ВЛЕВО je d_left cmp ah,4Dh ;Стрелка ВПРАВО je d_right cmp ah,1Ch ;Enter je d_enter jmp readdiskkey ;Вернуться, пока не будет нажата ret1: ret d_left: cmp dl,0 ;Если курсор находится в je readdiskkey ;то вернуться на ожидание нажатия dec dl ;иначе - mov ah,02h ;сдвинуть mov bh,0 ;курсор mov dh,20 ;влево на одну позицию int 10h jmp readdiskkey d_right: cmp dl,diskkol ;Если курсор находится на имени je readdiskkey ;то вернуться на ожидание нажатия inc dl ;иначе - mov ah,02h ;сдвинуть mov bh,0 ;курсор mov dh,20 ;вправо на одну позицию int 10h jmp readdiskkey d_enter: xor bx,bx mov bl,dl ;Записать в BL позицию курсора mov dl,disks[bx] ;Записать в DL имя выбранного диска sub dl,41h ;Преобразовать из латинской буквы в mov ah,0Eh ;Функция, устанавливающая диск текущим int 21h ret ;---------------------------- DP3: ;Процедура вывода на экран Int 10h Mov ah,4Eh ;Найти первый файл в Xor cx,cx mov cl,00010111b ;Атрибут файла (папка, скрытый, системный, архив) lea dx,filefind ;Маска поиска файлов(*.* - все файлы) int 21h xor bx,bx writefname: cmp files,24 ;Если выведено 24 файла, то je newscr ;на newscr mov al,newDTA[1Eh+bx] ;Иначе - запись в AL очередной cmp al,0 ;Если все имя полностью je findnext ;то перейти на findnext int 29h ;Иначе - вывести букву inc bx ;и перейти к следующей jmp writefname findnext: xor bx,bx inc files ;Увеличить число выведенных файлов mov ah,4Fh ;Найти следующий файл int 21h jc nofiles ;Если ошибка - перейти на mov al,10 ;/ int 29h ;|перевести курсор mov al,13 ;|на следующую строку int 29h ;\ jmp writefname ;вернуться на вывод имени фала newscr: mov ah,0 ;Ожидать нажатия любой клавиши int 16h mov ax,0003h ;Очистить экран int 10h mov files,0 ;Сбросить кол-во выведенных файлов jmp writefname ;Вернуться на вывод имени файла nofiles: mov ah,0 ;Ожидать нажатия любой клавиши int 16h call cls ;Обновить call HorBackGround ;экран call HorDrawRamka ret ;---------------------------------Context menu------------------------------- Rab1: mov atr,01000111b jmp Menu2 Rab2: mov atr,01100111b jmp Menu2 Rab3: mov atr,00100111b jmp Menu2 Rab4: mov atr,00010111b jmp Menu2 Enter2: cmp StrNum,2 je Rab1 cmp StrNum,3 je Rab2 cmp StrNum,4 je Rab3 cmp StrNum,5 je Rab4 jmp Menu2 Up2: cmp StrNum,2 je Begin1 sub StrNum,1 jmp Menu2 Down2: cmp StrNum,5 je Menu2 add StrNum,1 jmp Menu2 Enter2_: jmp Enter2 Up1: cmp StrNum,2 je Begin1 sub StrNum,1 jmp Menu1 Down1: cmp StrNum,6 je Menu1 add StrNum,1 jmp Menu1 Enter1: cmp StrNum,3 je fl1 cmp StrNum,2 je fl21 jmp Enter1_1 Begin2: jmp Begin1 halt1: call cls mov ax,4c00h int 21h Begin1: jmp Begin Menu2: call BackGround call DrawRamka mov dh,StrNum ;т»чют яЁюЁшёютъш ышэшш mov bl,00110111b ;рІЁшсіІ ъіЁёюЁр call line zapros2:mov ah,0h int 16h ;Press any key cmp ah,72 je Up2 cmp ah,80 je Down2 cmp al,13 je Enter2_ cmp al,27 je Halt1 jmp zapros2 jmp Zapros fl1: jmp fl fl21: jmp fl2 Up11: jmp up1 Menu22: jmp Menu2 Menu1: call BackGround3 call DrawRamka3 mov dh,StrNum ;т»чют яЁюЁшёютъш ышэшш mov bl,00110111b ;рІЁшсіІ ъіЁёюЁр call line3 zapros1:mov ah,0h int 16h ;Press any key cmp ah,72 je Up11 cmp ah,80 je Down1 cmp al,13 je Enter1 cmp al,27 je Halt1 jmp zapros1 Enter1_1: cmp StrNum,4 je dirproc cmp StrNum,5 je dirproc cmp StrNum,6 je dirproc Left_: cmp StbNum,1 je Begin sub StbNum,8 jmp Begin Right_: cmp StbNum,25 je Begin add StbNum,8 jmp begin Down_: cmp StbNum,9 je Menu22 cmp StbNum,1 je Menu1 jmp zapros dirproc: xor bx,bx mov bl,StrNum sub bl,4 shl bx,1 call dirpr[bx] jmp Menu1 ;--------------------------------Main program-------------------------------- start: mov ax, dseg mov ds,ax mov ah,1Ah ;Установить новую область, lea dx,newDTA ;куда будет записываться имя файла int 21h ;при обращении фунцкий поиска mov StrNum,top+1 mov StbNum,1 mov atr,01000111b begin: call cls call HorBackGround call HorDrawRamka mov dl,StbNum ;т»чют яЁюЁшёютъш ышэшш mov bl,00110111b ;рІЁшсіІ ъіЁёюЁр call lineHOR zapros: mov StrNum,2 mov ah,0h int 16h ;Press any key cmp ah,75 je Left_ cmp ah,77 je Right_ cmp ah,80 je down_ cmp al,13 je Enter_ cmp al,27 je Halt jmp zapros ;--------------------------------Enter----------------------------- Enter_: cmp StbNum,17 je Video cmp StbNum,25 je Halt jmp zapros halt: ;mov ah,0h ;int 16h call cls mov ax,4c00h int 21h fl2: mov bx,abcd mov ax,es mov bx,ax mov ah,4ah int 21h push ds ;эрёІЁюшь es pop es mov ah,4bh ; exec mov al,0 ; яюфґіэъ¶ш чряіёър mov bx,offset paramblk ; эхІ ярЁрьхІЁют mov dx,offset exname int 21h jmp halt video: mov ds,ax ; іёІрэютър тшфхюЁхцшьр mov ah,0h mov al,10h int 10h mov ah,0ch mov al,0eh mov bh,0 mov cx,50 c2: mov dx,10 c1: int 10h inc dx cmp dx,330 jne c1 inc cx cmp cx,610 jne c2 mov ah,01h ; stop int 21h mov ax,3 ; юсЁрІэю т int 10h mov ah,0h int 16h jmp halt fl: call cls mov ah, 2h mov dl, 1 mov dh, 1 int 10h mov ah,3dh mov al,2 mov dx,offset fname int 21h mov handle, ax mov ah,3fh mov bx,handle mov cx,80 mov dx,offset bufin int 21h mov cx,ax mov ah,40h mov bx,1 mov dx,offset bufin int 21h mov ah,0h int 16h mov ax,4c00h int 21h cseg ends abcd segment abcd ends end start 1 

Мәтінді көшіру үшін белсенді жазылым қажет.

Пайдаланушы ID: 287694

Жарияланған күні: