Чтение FAT12 - Assembler
Формулировка задачи:
Здравствуйте! Помогите подправить программу, кто знает. Программа читает таблицу FAT в память. Необходимо чтобы таблица выводилась на экран и выходной файл был не .com а .exe. Заранее благодарен.
.model tiny .code .386 org 100h start: mov ax,0003h int 10h call ReadFAT ret ReadSect proc push di push es push cs pop ds mov cx,[gnTrackSect] mov si,dx mov ax,si xor dx,dx div cx mov di,ax mov ax,di imul cx mov dx,si sub dx,ax inc dx mov [AbsSectNum],dx mov ax,di and ax,1 mov [AbsHeadNum],ax imul cx push ax mov ax,si pop dx sub ax,dx mov dx,[AbsSectNum] dec dx sub ax,dx mov dx,cx shl dx,1 push ax push dx xor dx,dx pop bx pop ax div bx mov cx,ax mov al,cl shr cx,2 and cl,0C0h mov ch,al and cx,0FFC0h mov ax,[AbsSectNum] or cl,al pop es pop bx mov dx,[AbsHeadNum] mov dh,dl mov dl,0 mov al,1 mov ah,2 int 13h ret ReadSect endp ReadFAT proc pusha mov dx,1 mov di,offset Mem_FAT Cont_Read_Fat: push dx push di push es Call ReadSect pop es pop di pop dx add di,512 inc dx cmp dx,10 jne Cont_Read_Fat popa ret ReadFAT endp AbsSectNum dw 0 AbsHeadNum dw 0 gnTrackSect dw 18 Mem_FAT db 9*512 dup(?) end start
Решение задачи: «Чтение FAT12»
textual
Листинг программы
.386 .model small ;------------------------------------------------------------ .DATA AbsSectNum dw 0 AbsHeadNum dw 0 gnTrackSect dw 18 ; Число секторов на дорожку Mem_FAT db 4608 dup(0) ;Столько байт занимает FAT12 ;------------------------------------------------------------- .CODE start: mov ax,@data mov ds,ax mov ax,0003h int 10h call ReadFAT ReadSect proc push di push es ; Начало расчета сектора/дорожки/головки push cs pop ds mov cx,[gnTrackSect] ;В счетчик помещаем mov si,dx ; tmp=(Sector/TrackSectors); mov ax,si xor dx,dx div cx mov di,ax ; Sec=Sector-(tmp*TrackSectors)+1; mov ax,di imul cx mov dx,si sub dx,ax inc dx mov [AbsSectNum],dx ; Head=tmp & 1; mov ax,di and ax,1 mov [AbsHeadNum],ax ; Trk=(Sector-(Head*TrackSectors)-(Sec-1))/(TrackSectors*2); imul cx push ax mov ax,si pop dx sub ax,dx mov dx,[AbsSectNum] dec dx sub ax,dx mov dx,cx shl dx,1 push ax push dx xor dx,dx pop bx pop ax div bx ; AX = AbsTrackNum ; Конец расчетов mov cx,ax mov al,cl shr cx,2 and cl,0C0h mov ch,al and cx,0FFC0h mov ax,[AbsSectNum] or cl,al pop es pop bx ; ES:BX = Куда считывать mov dx,[AbsHeadNum] mov dh,dl ; Номер головки mov dl,0 ; Номер диска 0 = A mov al,1 ; Количество считываемых секторов mov ah,2 ; Номер функции int 13h mov ah,4Ch int 21h ReadSect endp ReadFAT proc ;Чтение таблицы размещения файлов в оперативную память pusha mov dx,1 mov di, offset Mem_FAT Cont_Read_Fat: push dx push di push es Call ReadSect pop es pop di pop dx add di,512 inc dx cmp dx,10 jne Cont_Read_Fat popa mov ah,4Ch int 21h ReadFAT endp ;++++++++++++++++++++++++++++++++++++++++++++ end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д