◊ | |
www.udomlya.ru | Медиа-Центр | Удомля КТВ | Старый форум |
23.06.2006, 13:44 | #1 |
Новичок
Регистрация: 26.04.2006
Сообщений: 10
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Может кто подскажет
У меня возникла такая проблема, мне прислали незачет по трем программам, а в рецензии не написали почему. Можек кто свежим взглядом посмотрит и подскажет что не так в листинге программ.
1.comment # assume cs:code code segment public 'code' org 100h ; ---------------------------------------------------------------------------- ; Основная процедура ; ---------------------------------------------------------------------------- main proc near ; освобождаем память. надо то всего немного mov bh,10h mov ah,4ah int 21h ; начало цикла и вывод сообщения о вводе имени floop: mov ah,9 lea dx,fnter int 21h ; ввод имени файла mov ah,0ah mov dx,offset bfile int 21h ; если длина введеного имени 0, то выход cmp cs:lfile,0 jz exit push ds push es mov word ptr csld_ss,ss mov word ptr csld_sp,sp lea si,lfile int 2eh mov ss,csld_ss mov sp,csld_sp pop es pop ds mov ah,9 lea dx,fdone int 21h ; заворачиваем на начало цикла jmp floop ; выход exit: mov ax,4c00h int 21h ; переменные bfile db 81 lfile db 0 nfile db 81 dup (0) blocp db 14 dup (0) old_ss dw ? old_sp dw ? fnter db 'Enter the name file (*.bat):', 0ah, 0dh, 24h fdone db 'All done..', 0ah, 0dh, 24h main endp code ends end main 2. code segment public assume cs:code ; обьявление процедур public set_init, set_simbol, set_msg, set_cursor ; ---------------------------------------------------------------------------- ; Процедура инициализации ; в bh установка цвета фона ; в bl установка цвета символов ; ---------------------------------------------------------------------------- set_init proc push ax bx cx dx jmp start_init atribut db 0 position dw 0 start_init: cmp bh,7 ja init_error cmp bl,7 ja init_error shl bh,4 add bl,bh xor bl,00001000b mov atribut,bl mov al,3 int 10h call set_cl mov position,0 init_error: pop dx cx bx ax ret set_init endp ; ---------------------------------------------------------------------------- ; Процедура очистки экрана ; ---------------------------------------------------------------------------- set_cl proc mov ax,0b800h mov es,ax mov cx,2000 mov bx,1 mov al,atribut attr: mov es:[bx],al inc bx inc bx loop attr mov cx,2000 xor bx,bx mov al,32 asc: mov es:[bx],al inc bx inc bx loop asc ret set_cl endp ; ---------------------------------------------------------------------------- ; Процедура вывода символа ; Входные данные al - символ ; ---------------------------------------------------------------------------- set_simbol proc push ax bx cx dx push 0b800h pop es cmp al,24h je set_simbol_24 cmp al,0ah je set_simbol_0a cmp al,0dh je set_simbol_0d jmp set_simbol_next set_simbol_0a: add position,160 jmp set_simbol_ret set_simbol_24: stc jmp set_simbol_ret set_simbol_0d: push ax bx dx xor dx,dx mov ax,position mov bx,80 div bx xor ah,ah mul bx mov position,ax pop dx bx ax jmp set_simbol_ret set_simbol_next: mov bx,position mov es:[bx],al inc position inc position set_simbol_ret: pop dx cx bx ax ret set_simbol endp ; ---------------------------------------------------------------------------- ; Процедура вывода строки ; Входные данные bx - смещение текста ; ---------------------------------------------------------------------------- set_msg proc @msg: mov al,[bx] call set_simbol jc @mret inc bx jmp @msg @mret: ret set_msg endp ; ---------------------------------------------------------------------------- ; Процедура установки курсора ; Входные данные ax - курсор ; ---------------------------------------------------------------------------- set_cursor proc mov position,ax ret set_cursor endp ;set_cursor proc ; ; получаем доступ к регистру младшего байта ; mov dx,3b4h ; mov al,15 ; out dx,al ; ; посылаем младший байт результата ; mov ax,position ; inc dx ; out dx,al ; ; получаем доступ к регистру старшего байта ; mov al,14 ; dec dx ; out dx,al ; ; посылаем старший байт результата ; inc dx ; mov al,ah ; out dx,al ; ret ;set_cursor endp code ends end code segment public assume cs:code org 100h ; процедуры из proc.asm extrn set_init:near ; инициализация extrn set_simbol:near ; вывод символа extrn set_msg:near ; вывод сообщения extrn set_cursor:near ; установка курсора ; ---------------------------------------------------------------------------- ; Основная процедура ; ---------------------------------------------------------------------------- main proc near mov bh,0 ; цвет фона mov bl,1 ; цвет символов call set_init ; инициализация ; уберем курсор mov dh,25 mov ah,2 int 10h ; покажем 'init device' mov ax,1828 ; назначаем позицию курсора call set_cursor ; устанавливаем свой курсор lea bx,pre1 ; загружаем в bx смещение.. call set_msg ; выводим строку символов.. mov cx,7 @pre: push cx lea bx,pre mov ax,1674 call set_cursor @mes: mov al,[bx] cmp al,'^' je @pos call set_simbol jc @mess inc bx jmp @mes @pos: mov ax,1674 call set_cursor mov sec,2 call set_wait inc bx jmp @mes @mess: pop cx loop @pre mov bh,0 ; цвет фона mov bl,1 ; цвет символов call set_init ; инициализация ; покажем ' all done ' mov ax,1828 call set_cursor lea bx,pre2 call set_msg ; задерка в 2 секунды mov sec,36 call set_wait ; инициируем (по заданию) mov bh,4 mov bl,5 call set_init ; покажем строку 'msg' (по заданию) lea bx,msg call set_msg ; покажем 'msg1' mov ax,2620 call set_cursor lea bx,msg1 call set_msg ; ждать нажатия любой клавиши, можно было бы сделать задерку. mov ah,0 int 16h ; вернем курсор mov bh,0 mov dh,0 mov dl,0 mov ah,2 int 10h mov ax,4c00h ; возврат в дос с кодом int 21h ; завершения програмы 0 set_wait proc |
23.06.2006, 13:52 | #2 |
Новичок
Регистрация: 26.04.2006
Сообщений: 10
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
3.
; ; Proc.asm ; Author: Barnaeva Natasha ; code segment public assume cs:code ; обьявление процедур public key, set_init, set_simbol, set_msg, set_cursor, set_wait ;================================================= ============================= ; Инициализация клавиатуры ;================================================= ============================= key proc near jmp kstart exit_pressed db 0 cps_pressed db 0 old9 dd 0 buf_s dw 0 buf db 50 dup (?) end_buf db 24h att dw 0 TABm db ' 1234567890-= qwertyuiop[] asdfghjkl;''\ zxcvbnm,./ ' TABb db ' !@#$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:" ZXCVBNM<>? ' klava db ' ' db ' г===============================================¬ ' db ' ¦ --¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬ ¦ ' db ' ¦ ¦e¦¦1¦¦2¦¦3¦¦4¦¦5¦¦6¦¦7¦¦8¦¦9¦¦0¦¦-¦¦=¦¦\¦¦-¦ ¦ ' db ' ¦ L--L--L--L--L--L--L--L--L--L--L--L--L--L--L-- ¦ ' db ' ¦ ----¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬---¬ ¦ ' db ' ¦ ¦ # ¦¦q¦¦w¦¦e¦¦r¦¦t¦¦y¦¦u¦¦i¦¦o¦¦p¦¦[¦¦]¦¦ ¦ ¦ ' db ' ¦ L----L--L--L--L--L--L--L--L--L--L--L--L--¦ ¦ ¦ ' db ' ¦ -----¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--- ¦ ¦ ' db ' ¦ ¦ # ¦¦a¦¦s¦¦d¦¦f¦¦g¦¦h¦¦j¦¦k¦¦l¦¦;¦¦"¦¦ < ¦ ¦ ' db ' ¦ L-----L--L--L--L--L--L--L--L--L--L--L--L----- ¦ ' db ' ¦ ------¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬-------¬ ¦ ' db ' ¦ ¦ # ¦¦z¦¦x¦¦c¦¦v¦¦b¦¦n¦¦m¦¦,¦¦.¦¦/¦¦ # ¦ ¦ ' db ' ¦ L------L--L--L--L--L--L--L--L--L--L--L------- ¦ ' db ' ¦ ---¬---¬----------------------------¬---¬---¬ ¦ ' db ' ¦ ¦ #¦¦ #¦¦ # ¦¦# ¦¦# ¦ ¦ ' db ' ¦ L---L---L----------------------------L---L--- ¦ ' db ' L===============================================- ' db ' ',24h exits db 'Выход по нажатию 24h, т.е. при включеном caps lock нажав 4', 0dh, 0ah, 24h kstart: ; инициируем или закрываем? cmp bp,1 jne uninstall ; установка своего int9 call Install_Int ; покажем ascii рисунок mov csosition,0 lea bx,klava call set_msg mov csosition,3054 lea bx,exits call set_msg mov csosition,3360 ; цикл ввода - пока не будет нажат caps locc а после 4 vvod: cmp exit_pressed,0 jne done jmp vvod ; покажем программе где буфер символов и возвратимся done: lea bx,buf ret uninstall: ; восстановление вектора call uninstall_int jmp done key endp |
23.06.2006, 13:53 | #3 |
Новичок
Регистрация: 26.04.2006
Сообщений: 10
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
;================================================= =============================
; Новый вектор прерывания int9 ;================================================= ============================= proc int_09 push ax bx cx jmp key_begin klav: and al,01111111b push ax bx mov al,00011111b push 0b800h pop es mov bx,cs:att mov es:[bx],al pop bx ax jmp quit key_begin: cli in al,60h sti and al,11111111b out 61h,al test al,10000000b jnz klav push bx ax cmp al,13 ja @dva xor ah,ah mov bl,6 mul bl mov bx,503 add bx,ax call set_image jmp @konec ; второй ряд @dva: cmp al,16 jb @tri cmp al,27 ja @tri mov bl,6 mul bl mov bx,903 add bx,ax call set_image jmp @konec ; третий ряд @tri: cmp al,30 jb @chetire cmp al,40 ja @chetire mov bl,6 mul bl mov bx,1301 add bx,ax call set_image jmp @konec ; четвертый ряд @chetire: cmp al,44 jb @func cmp al,53 ja @func mov bl,6 mul bl mov bx,1699 add bx,ax call set_image jmp @konec ; обрабатываем функ. клавиши ; \ @func: cmp al,43 jne @d1 mov bx,587 call set_image jmp @konec ; backspace @d1: cmp al,14 jne @d2 mov bx,593 call set_image jmp @konec ; tab @d2: cmp al,15 jne @d3 mov bx,991 call set_image jmp @konec ; enter @d3: cmp al,28 jne @d4 mov bx,1549 call set_image jmp @konec ; caps lock @d4: cmp al,58 jne @d5 mov bx,1471 call set_image jmp @konec ; lshift @d5: cmp al,42 jne @d6 mov bx,1951 call set_image jmp @konec ; lcrtl @d6: cmp al,29 jne @d7 mov bx,2431 call set_image jmp @konec ; lalt @d7: cmp al,56 jne @d8 mov bx,2439 call set_image jmp @konec ; probel @d8: cmp al,57 jne @d9 mov bx,2471 call set_image jmp @konec ; rshift @d9: cmp al,54 jne @d10 mov bx,2029 call set_image jmp @konec @d10: @konec: pop ax bx ; если это 24h cmp cps_pressed,0 je noexit cmp al,5h jne noexit mov bx,buf_s mov buf[bx],24h inc buf_s mov exit_pressed,1 jmp quit ; если это caps lock noexit: cmp al,3ah jne nocps not cps_pressed jmp quit ; если это enter nocps: cmp al,1ch jne noent mov bx,buf_s mov buf[bx],0ah inc bx mov buf[bx],0dh add buf_s,2 call set_position jmp quit ; выбор регистра noent: cmp cps_pressed,0 jne @1 mov bx,offset tabm xlat tabm jmp @2 @1: mov bx,offset tabb xlat tabb @2: mov bx,buf_s mov buf[bx],al inc buf_s call set_simbol quit: mov al,20h out 20h,al pop cx bx ax iret endp ;================================================= ============================= ; Процедура установки 9 прерывания ;================================================= ============================= Install_Int proc mov ax,3509 int 21h mov word ptr old9,bx mov word ptr old9+2,es mov ax,2509h mov dx,offset int_09 int 21h ret Install_Int endp ;================================================= ============================= ; Процедура восстановления 9 прерывания ;================================================= ============================= uninstall_Int proc push ds cli mov ax,2509h mov si,offset old9 mov dx,word ptr [si] mov ds,word ptr [si+2] int 21h sti pop ds ret uninstall_Int endp ;================================================= ============================= ; Процедура установки курсора ;================================================= ============================= set_position proc add csosition,160 push ax bx dx xor dx,dx mov ax,csosition mov bx,80 div bx xor ah,ah mul bx mov csosition,ax pop dx bx ax ret set_position endp ; ---------------------------------------------------------------------------- ; Процедура инициализации ; в bh установка цвета фона ; в bl установка цвета символов ; ---------------------------------------------------------------------------- set_init proc push ax bx cx dx jmp start_init atribut db 0 position dw 0 start_init: shl bh,4 add bl,bh xor bl,00001000b mov atribut,bl mov al,3 int 10h call set_cl mov position,0 init_error: pop dx cx bx ax ret set_init endp ; ---------------------------------------------------------------------------- ; Процедура очистки экрана ; ---------------------------------------------------------------------------- set_cl proc mov ax,0b800h mov es,ax mov cx,2000 mov bx,1 mov al,atribut attr: mov es:[bx],al inc bx inc bx loop attr mov cx,2000 xor bx,bx mov al,32 asc: mov es:[bx],al inc bx inc bx loop asc ret set_cl endp ; ---------------------------------------------------------------------------- ; Процедура вывода символа ; Входные данные al - символ ; ---------------------------------------------------------------------------- set_simbol proc push ax bx cx dx push 0b800h pop es cmp al,24h je set_simbol_24 cmp al,0ah je set_simbol_0a cmp al,0dh je set_simbol_0d jmp set_simbol_next set_simbol_0a: add position,160 jmp set_simbol_ret set_simbol_24: stc jmp set_simbol_ret set_simbol_0d: push ax bx dx xor dx,dx mov ax,position mov bx,80 div bx xor ah,ah mul bx mov position,ax pop dx bx ax jmp set_simbol_ret set_simbol_next: mov bx,position mov es:[bx],al inc position inc position set_simbol_ret: pop dx cx bx ax ret set_simbol endp ; ---------------------------------------------------------------------------- ; Процедура вывода строки ; Входные данные bx - смещение текста ; ---------------------------------------------------------------------------- set_msg proc @msg: mov al,[bx] call set_simbol jc @msg_ret inc bx jmp @msg @msg_ret: ret set_msg endp ; ---------------------------------------------------------------------------- ; Процедура установки курсора ; Входные данные ax - курсор ; ---------------------------------------------------------------------------- set_cursor proc mov position,ax ret set_cursor endp ; ---------------------------------------------------------------------------- ; Процедура задержки программы ; Входные данные ax - сколько секунд ; ---------------------------------------------------------------------------- set_wait proc push bx dx ax cx mov ax,0 int 1ah mov cx,ax add dx,cx mov bx,dx @wait: int 1ah cmp dx,bx jne @wait pop cx ax dx bx ret set_wait endp set_image proc mov al,00011100b push 0b800h pop es mov es:[bx],al mov cs:att,bx ret set_image endp code ends end |
23.06.2006, 13:54 | #4 |
Новичок
Регистрация: 26.04.2006
Сообщений: 10
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
code segment public
assume cs:code org 100h ; процедуры из proc.asm extrn key:near extrn set_init:near ; процедура инициализации extrn set_simbol:near ; процедура вывода символа extrn set_msg:near ; вывод сообщения extrn set_cursor:near ; установка курсора extrn set_wait:near ; установка курсора ; ---------------------------------------------------------------------------- ; Основная процедура ; ---------------------------------------------------------------------------- main proc near ; инициируем видео драйвер mov bh,1 mov bl,7 call set_init ; запустим драйвер клавиатуры, подав на вход bp=1 mov bp,1 call key ; key вернул смещение строки, вот её и покажем call set_msg ; завершим работу драйвера клавиатуры, подав на вход bp=0 mov bp,0 call key ; возврат в дос с кодом завершения програмы 0 mov ax,4c00h int 21h main endp code ends end main |
23.06.2006, 17:41 | #5 |
Супер-Модератор
|
Если честно, то лень разбираться, но на первый взгляд программа через чур усложнена! Проще всего отправить письмо преподавателю и узнать причины отклонения.
Из практики: преподаватель отклонил мою работу с 2-мя совершенно незначительными поправка, я удивился, но переделал и отправил обратно, после чего преподаватель долго извинялся и говорил, что на самом деле он работу принял и у себя так и пометил, а то что отправил мне - ошибка. Т.е. преподаватели тоже люди и могут ошибаться! Надо точно узнать причину отклонения. |
23.06.2006, 18:41 | #6 |
Супер-Модератор
|
Ещё одна из наиболее вероятных причин отклонения: насколько мне известно преподаватели требуют построчно прокомментированных исходников. Здесь же комментарии наблюдаются чрезвычайно редко.
|
23.06.2006, 23:57 | #7 | |
Новичок
Регистрация: 27.04.2006
Сообщений: 28
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
А еще мне кажется, что тем, кто все-таки возьмется за героический труд разобраться в чужом коде на ассемблере нехило бы помогло описание задания ... |
|
30.06.2006, 16:52 | #8 | |
Местный
|
Цитата:
__________________
С наилучшими пожеланиями George |
|
03.07.2006, 21:45 | #9 | |
Новичок
Регистрация: 27.04.2006
Сообщений: 28
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Со смайлами и понтами! |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
А может в Лондон? | anya | Основной | 167 | 01.11.2007 18:53 |
Может кто в курсе... | @&@ | Автоклуб | 7 | 04.09.2006 08:11 |