![]() |
◊ |
| www.udomlya.ru | Медиа-Центр | Удомля КТВ | Старый форум | |
|
|
#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 cs ld_ss,ssmov word ptr cs ld_sp,splea si,lfile int 2eh mov ss,cs ld_ssmov sp,cs ld_sppop 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 |
|
|
|
|
#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 cs osition,0lea bx,klava call set_msg mov cs osition,3054lea bx,exits call set_msg mov cs osition,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 |
|
|
|
|
#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 cs osition,160 push ax bx dx xor dx,dx mov ax,cs osition mov bx,80 div bx xor ah,ah mul bx mov cs osition,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 |
|
|
|
|
#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 |
|
|
|
|
#5 |
|
Супер-Модератор
|
Если честно, то лень разбираться, но на первый взгляд программа через чур усложнена! Проще всего отправить письмо преподавателю и узнать причины отклонения.
Из практики: преподаватель отклонил мою работу с 2-мя совершенно незначительными поправка, я удивился, но переделал и отправил обратно, после чего преподаватель долго извинялся и говорил, что на самом деле он работу принял и у себя так и пометил, а то что отправил мне - ошибка. Т.е. преподаватели тоже люди и могут ошибаться! Надо точно узнать причину отклонения. |
|
|
|
|
#6 |
|
Супер-Модератор
|
Ещё одна из наиболее вероятных причин отклонения: насколько мне известно преподаватели требуют построчно прокомментированных исходников. Здесь же комментарии наблюдаются чрезвычайно редко.
|
|
|
|
|
#7 | |
|
Новичок
Регистрация: 27.04.2006
Сообщений: 28
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
А еще мне кажется, что тем, кто все-таки возьмется за героический труд разобраться в чужом коде на ассемблере нехило бы помогло описание задания ... |
|
|
|
|
|
#8 | |
|
Местный
|
Цитата:
__________________
С наилучшими пожеланиями George |
|
|
|
|
|
#9 | |
|
Новичок
Регистрация: 27.04.2006
Сообщений: 28
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
Со смайлами и понтами! |
|
|
|
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| А может в Лондон? | anya | Основной | 167 | 01.11.2007 18:53 |
| Может кто в курсе... | @&@ | Автоклуб | 7 | 04.09.2006 08:11 |