![]() |
◊ |
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 ![]() mov word ptr cs ![]() lea si,lfile int 2eh mov ss,cs ![]() mov sp,cs ![]() 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 |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
А может в Лондон? | anya | Основной | 167 | 01.11.2007 18:53 |
Может кто в курсе... | @&@ | Автоклуб | 7 | 04.09.2006 08:11 |