Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| ЛеРуСяКа |
9.12.2009, 11:02
Сообщение
#1
|
|
Пользователь Группа: Пользователи Сообщений: 1 Регистрация: 9.12.2009 Пользователь №: 22 438 |
.286
.MODEL TINY JUMPS S SEGMENT STACK db 128 dup(?) S ENDS DATA SEGMENT buffer db 32770 dup(0) number_drive db 0 sectors dw 0 numb_s dw 0 ; номер копируемого сектора handle dw 0 LengthBlock dd 32768 SourceHandle dw 0 SourceOffset dd 0 DestHandle dw 0 DestOffset dd 0 HMMEntryPt dd 0 all db "Всего : 0000 секторов",13,'$' mess db 10,13,"Вставьте дискету-приемник и нажмите любую клавишу",10,13,'$' mess1 db "Ошибка при работе с линией A20 (82h) !",10,13,'$' mess2 db "Вся расширенная память уже распределена!!!",10,13,'$' mess3 db "Больше нет свободных блоков EMB.",10,13,'$' mess4 db "Ошибка!!!: Нет диска в дисководе.",10,13,'$' mess5 db "Ошибка!!!: Диск защищен от записи или нет диска в дисководе.",10,13,'$' mess6 db "Копируем данные c дискеты-источника",10,13,'$' mess6_1 db "Записываем данные на дискету-приемник",10,13,'$' mess8 db "Драйвер himem.sys отсутствует",10,13,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:S start: mov bx,DATA mov ds,bx ; считывание корневого сектора дискеты mov al,number_drive mov cx,1 mov dx,0 mov bx,offset buffer int 25h pop ax jnb ok1 mov bl,01h jmp Error ok1: mov ax,word ptr [bx][13h] mov sectors,ax ; проверка наличия himem.sys mov ax,4300h int 2fh mov bl,0eeh cmp al,80h jne Error mov ax,4310h int 2Fh ;получение адреса программы управления XMS mov word ptr [HMMEntryPt][0],bx mov word ptr [HMMEntryPt][2],es mov ah,05h ; локальное открытие линии A20 call HMMEntryPt or ax,ax jz Error mov ah,09h ; запрос блока памяти mov dx,1500d call HMMEntryPt or ax,ax jz Error mov handle,dx ; первоначальное заполнение таблицы для копирования mov bx,offset buffer mov word ptr SourceOffset[0],bx mov word ptr SourceOffset[2],ds mov bx,handle mov DestHandle,bx mov word ptr DestOffset[0],0 mov word ptr DestOffset[2],0 mov ah,09h mov dx,offset mess6 int 21h mov cx,45 ; кол-во секторов на диске mov si,offset LengthBlock next_sector: ; считывание группы секторов mov al,number_drive mov dx,numb_s push cx mov cx,64d mov bx,offset buffer int 25h pop cx pop cx add numb_s,64d ; копирование блока памяти в EMB mov ah,0Bh ;ф-ия 0B - копирование блока call HMMEntryPt ;вызов драйвера or ax,ax ;проверка на ошибку jz Error ;если ошибка то переход на метку Error call OutDec ;вызов процедуры OutDec add word ptr DestOffset[0],32768d ;увеличение текущего смещения в EMB adc word ptr Destoffset[2],0 ;прибавляем 32кб в первое слово ;и 0 - во второе loop next_sector ;продолжение цикла mov ah,09h ;вывод на экран сообщения mov dx,offset mess ;"Вставьте следующий диск ..." int 21h mov ah, 10h ; яюфюцфрЄ№ эрцрЄш int 16h ; mov ah,08h ; ожидание нажатия клавиши ;int 21h ; первоначальное заполнение таблицы для копирования mov numb_s,0 mov DestHandle,0 mov bx,offset buffer mov word ptr DestOffset[0],bx mov word ptr DestOffset[2],ds mov bx,handle mov SourceHandle,bx mov word ptr SourceOffset[0],0 mov word ptr SourceOffset[2],0 mov cx,45 ; кол-во секторов на диске mov ah, 10h ; int 16h mov ah,09h mov dx,offset mess6_1 int 21h mov si,offset LengthBlock next_copy: ; копирование блока из EMB в память mov ah,0Bh call HMMEntryPt or ax,ax jz Error add word ptr SourceOffset[0],32768d adc word ptr SourceOffset[2],0 ; запись группы секторов на диск mov al,number_drive mov dx,numb_s push cx mov cx,64 mov bx,offset buffer int 26h pop cx jnb ok2 mov dx,offset mess5 mov ah,09h int 21h jmp err1 ok2: pop cx add numb_s,64d call OutDec loop next_copy err1:mov ah,0Ah ; освобождение блока памяти mov dx,handle call HMMEntryPt or ax,ax jz Error mov ah,06h ; локальное закрывание линии A20 call HMMEntryPt .EXIT Error: mov dx,offset mess8 cmp bl,0eeh je print mov dx,offset mess1 ; проблема с линией A20 cmp bl,82h je print mov dx,offset mess2 ; вся XMS распределена cmp bl,0A0h je print mov dx,offset mess3 ; больше нет свободных блоков EMB cmp bl,0A1h je print mov dx,offset mess4 ; нет диска в дисководе cmp bl,01h je print print: mov ah,09h int 21h .EXIT ; вывод результатов копирования(записи) в процентах OutDec proc near mov dx,0 mov bx,10 mov ax,numb_s div bx mov bx,offset all add dl,30h mov byte ptr [bx][11d],dl mov dx,0 mov bx,10 div bx mov bx,offset all add dl,30h mov byte ptr [bx][10d],dl mov dx,0 mov bx,10 div bx mov bx,offset all add dl,30h mov byte ptr [bx][9],dl mov dx,0 mov bx,10 div bx mov bx,offset all add dl,30h mov byte ptr [bx][8],dl mov dx,offset all mov ah,09h int 21h ret OutDec endp CODE ENDS END start Мне нужен комментарий к каждой строке программы... Помогите, плиз! |
![]() ![]() |
|
Текстовая версия | Сейчас: 20.5.2012, 23:06 |