Бывалый

Профиль
Группа: Участник
Сообщений: 171
Регистрация: 25.2.2006
Где: Молдова
Репутация: нет Всего: нет
|
Привем всем! Есть некая программа(лабораторка по предмету "Операционные системы"), которая меня устраивает своей работой. Есть программы, которая записывает эту программу в первый сектор дискеты, то есть делает загрузочную дискету на базе этой программы. загрузившись, программа не работает так как под виндой. Я в курсе, что необходимо переписать часть кода. К примеру , OFFSET->7cXX, где ХХ-адрес переменной в Com файле. Какие ещё вещи необходимо переписать? если у кого то есть список, привидете, пожалуйста. на всякий пожарный, сама программа: | Код | CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG org 100h begin: jmp main ;----------------------------------------------------------------- Welcome db 'PROMT>',0 mlength EQU $-Welcome Buffer db 200 DUP(?) ofset dw (?) scan_code db (?) ;----------------------------------------------------------- main proc near mov ax,cs mov es,ax call Initialize_The_Cursor loop_ext: call Get_Cursor call Print_Promt loop_in: call Read_A_Symbol call Remember ;<if enter> cmp al,13 jnz tstbackspace call Get_Cursor call Print_Message mov ofset,0 jmp loop_ext ; if <backspace> tstbackspace:cmp al,8 jnz tstarrows ; if not backspace ;<if up the line> cmp dl,0 jnz up ; not the most left position dec dh mov dl,80 jmp left up:dec dl left:call Print_Cursor mov al,20h call Print_One_Symbol call Print_Cursor sub ofset,2 jmp loop_in ; if <arrows> tstarrows: cmp al,0 jnz skip mov ah, scan_code ;< right arrow> cmp ah,4Dh jnz skipleft call Get_Cursor inc dl call Print_Cursor jmp loop_in ;<leftarrow> skipleft: cmp ah,4Bh jnz skip call Get_Cursor dec dl call Print_Cursor sub ofset,2 jmp loop_in skip:call Get_Cursor mov bx,ofset mov al,Buffer+bx call Print_One_Symbol inc dl call Print_Cursor jmp loop_in ret mov ax,4C00h int 21h main endp
Print_Message proc xor dl,dl inc dh mov bp,7c09h mov cx, ofset mov ax,1301h mov bx,0005h int 10h ret Print_Message endp
Print_PROMT proc xor dl,dl inc dh mov bp,7c03h mov cx, mlength mov ax,1301h mov bx,000Ah int 10h ret Print_PROMT endp
Initialize_The_Cursor proc mov bh,0 mov cx,0 mov ax,03h int 10h ret Initialize_The_Cursor endp
Read_A_Symbol proc mov ah, 00h int 16h ret Read_A_Symbol endp
Remember proc mov bx, ofset inc bx mov buffer+bx,al mov ofset,bx mov scan_code,ah ret Remember endp
Get_Cursor proc mov ax,0300h int 10h ret Get_Cursor endp
Print_Cursor proc mov bx,0 mov ah,02h int 10h ret Print_Cursor endp
Print_One_Symbol proc mov bh,0 mov cx,1 mov ah,0Ah int 10h ret Print_One_Symbol endp
codesg ends end begin
|
а также загрузчик | Код | CSEG SEGMENT PARA 'Code' ASSUME CS:CSEG,DS:CSEG,SS:CSEG,ES:CSEG org 100h begin: jmp main ;----------------------------------------------------------------- File_Name_Src db 100 DUP(?),'$',0 Error db 'ERROR! ','$',0 OK db 'The file was written. Everything is Ok', '$',0 MDisk db 'Enter the disk in hex (0-A),(1-B) ','$',0 MHead db 'Enter the head number ','$',0 MCylinder db 'Enter the cylinder number ','$',0 MSector db 'Enter the sector number ','$',0 MSectorNumber db 'Enter the number of sectors ','$',0 Bytes db 'The number of bytes to read ', '$',0 Disk db 0 Head db 0 Cylinder db 0 Sector db 0 SectorNumber db 0 File_Handle_Src dw 0FFFFh Buffer db 512 Dup(?) Src_Length EQU $-File_Name_Src In_Src db 'The source path: ','$',13 buff db 0,0 leng EQU $-buff ;----------------------------------------------------------- main proc near mov dx,OFFSET In_Src mov ah,09h int 21h MOV AH,3FH MOV BX,00 MOV CX,100 LEA DX,File_Name_Src INT 21H mov bx,ax sub bx,2 mov File_Name_Src+bx,24h inc bx mov File_Name_Src+bx,0 lea dx, File_Name_Src call Open_File_Src ; in number of bytes mov dx,OFFSET Bytes mov ah,09h int 21h call inhex mov cl,buff mov head,cl call inhex mov ch,head mov cl,buff mov ah,3Fh mov bx,File_Handle_Src lea dx, Buffer int 21h ; in disk mov dx, OFFSET MDisk mov ah,09h int 21h call inhex mov Disk,cl ;in head mov dx, OFFSET MHead mov ah,09h int 21h call inhex mov Head,cl ;in Cylinder mov dx, OFFSET MCylinder mov ah,09h int 21h call inhex mov Cylinder,cl ;in Sector mov dx, OFFSET MSector mov ah,09h int 21h call inhex mov Sector,cl ;in NumberOfSectors mov dx, OFFSET MSectorNumber mov ah,09h int 21h call inhex mov SectorNumber,cl ;diskette input mov dl,Disk mov dh,Head mov ch,Cylinder mov cl, Sector mov al,SectorNumber mov bx,OFFSET Buffer mov ah,3 int 13h jnc OK1 mov dx, OFFSET ERROR mov ah,09h int 21h jmp skippen not_Ok1: OK1:mov dx, OFFSET OK mov ah,09h int 21h ;wait skippen:mov ah,10h int 16h ret mov ax,4C00h int 21h main endp
;Procedures Open_File_Src proc ;opens the file cmp File_Handle_Src,0FFFFh ;Finding out if the file is opened jne is_opened ; jump if not opened mov ax, 3D00h ;3D-to open the file int 21h mov File_Handle_Src,ax ret is_opened: stc ;carry_flag=1 ret Open_File_Src endp
Close_File_Src proc ;closes the file mov ah,3Eh ;3E-to close the file mov bx,File_Handle_Src; closing exactly this file int 21h ret Close_File_Src endp
inhex proc mov ah,3Fh mov bx,00 mov cx,100 lea dx,buff int 21h xor dx,dx mov dl,buff+1 cmp dx,0Dh jnz skiper mov buff+1,0 skiper:mov cx,2 xor bx,bx lop: cmp buff+bx,39h jbe tr sub buff+bx,37h jmp trans tr:cmp buff+bx,30h jb skip2 sub buff+bx,'0' trans:cmp bx,0 jz skip mov dl,buff+bx add buff,dl jmp skip2 skip:cmp buff+1,30h jb skip2 shl buff,4 jmp skip2 skip2:inc bx loop lop mov cl, buff ret inhex endp
CSEG ends end begin
|
|