Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переделывание программы под загрузочную, загрузка с дискеты, переделывания, 7сХХ 
:(
    Опции темы
Hohhi
Дата 31.10.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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

PM MAIL ICQ   Вверх
111u3
Дата 2.11.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 31.8.2009
Где: Омск

Репутация: нет
Всего: нет



Для начала надо самому установить прерывания за которые отвечает ДОС.(0x21 и т.п.) потом дофига еще чего тут надо менять - см любой тутор по "написанию своей ос". короче rtfm
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0404 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.