IT代考 INT 21h, Function 7305h (absolute disk read and write)

Chapter 14

Assembly Language for x86 Processors 7th Edition
Chapter 15: Disk Fundamentals

Copyright By PowCoder代写 加微信 powcoder

. Overview
Disk Storage Systems
File Systems
Disk Directory
Reading and Writing Disk Sectors (7305h)
System-Level File Functions

Disk Storage Systems
Tracks, Cylinders, and Sectors
Disk Partitions (Volumes)

Tracks and Sectors
Physical disk geometry – a way of describing the disk’s structure to make it readable by the system BIOS
Track – concentric circle containing data
Sector – part of a track

Cylinders and Seeking
Cylinder – all tracks readable from one head position
Seek – move read/write heads between tracks

Disk Formatting
Physical formatting
aka low-level formatting
Usually done at the factory.
Must be done before logical formatting
Defines the tracks, sectors, and cylinders
Logical formatting
Permits disk to be accessed using sequentially numbered logical sectors
Installs a file system (ex: NTFS)
May install an operating system

Fragmentation
A fragmented file is one whose sectors are no longer located in contiguous areas of the disk.
causes read/write heads to skip
slower file access
possible read/write errors

Translation
Translation – conversion of physical disk geometry to a sequence of logical sector numbers
Performed by a hard disk controller (firmware)
Logical sector numbers are numbered sequentially, have no direct mapping to hardware

Disk Partitions
Logical units that divide a physical hard disk
Also called volumes

Primary partition
Up to four permitted
Each may boot a different OS

Extended partition
Maximum of one permitted
May be divided into multiple logical partitions, each with a different drive letter

Primary and Extended
Up to three primary and one extended

Logical Partitions
Created from an extended partition
No limit on the number
Each has a separate drive letter
Usually contain data
Can be bootable (ex: Linux)

Disk Partition Table
Located in the disk’s Master Boot Record (MBR), following a block of executable code
Four entries, one for each possible partition
Each entry contains the following fields:
state (non-active, bootable)
type of partition (BigDOS, Extended, . . .)
beginning head, cylinder, & sector numbers
ending head, cylinder, & sector numbers
offset of partition from MBR
number of sectors in the partition

See also: www.datarescue.com/laboratory/partition.htm

Cascading Partition Tables
Boot, BigDOS
NA, Extended
NA, BigDOS
NA, BigDOS
Primary partition
Boot = bootable (system)
NA = non active
BigDOS = over 32 MB
Logical partitions (D, E)

Dual-Boot Example
System 98 and Win2000-A are bootable partitions
One is called the system partition when active

DATA_1 and BACKUP are logical partitions
Their data can be shared by both operating systems

Master Boot Record (MBR)
The MBR contains the following elements:
Disk partititon table
A program that jumps to the boot sector of the system partition

File Systems
Directory, File, Cluster Relationships
Primary Disk Areas

File System
This is what it does for you:
Keeps track of allocated and free space
Maintains directories and filenames
Tracks the sector location of each file and directory

Directory, File, Cluster, Sector Relationships

Cluster (1 of 2)
Smallest unit of space used by a file
Consists of one or more adjacent sectors
Size depends on both the type of file system in use and the disk partition size
A file is a linked sequence of clusters. Example:

Cluster (2 of 2)
A file always uses at least one cluster
A high percentage of space may be wasted
Example: 8,200-byte file requires three 4K clusters:

Designed for diskettes
Each FAT entry is 12 bits
Very little fault tolerance
two copies of the FAT (cluster table)
Optimal storage for small files
512-byte clusters

MS-DOS format for hard disks
16-bit FAT entries
Large cluster size when disk > 1 GB
inneficient for small files
Max 2 GB size under MS-DOS
Little or no recovery from read/write errors

Supports long filenames
Supported by all version of MS-Windows from Windows 95 onward
(except Windows NT)
32-bit FAT entries
32 GB maximum volume size
Improved recovery from read/write errors

Supported by Windows NT, 2000, and XP
Handles large volumes
can span multiple hard drives
Efficient cluster size (4K) on large volumes
Unicode filenames
Permissions on files & folders
Share folders across network
Built-in compression and encryption
Track changes in a change journal
Disk quotas for individuals or groups
Robust error recovery
Disk mirroring

Boot Record (1 of 2)
Fields in a typical MS-DOS boot record:
Jump to boot code (JMP instruction)
Manufacturer name, version number
Bytes per sector
Sectors per cluster
Number of reserved sectors (preceding FAT #1)
Number of copies of FAT
Maximum number of root directory entries
Number of disk sectors for drives under 32 MB
Media descriptor byte
Size of FAT, in sectors
Sectors per track

Boot Record (2 of 2)
(continued)
Number of drive heads
Number of hidden sectors
Number of disk sectors for drives over 32 MB
Drive number (modified by MS-DOS)
Extended boot signature (always 29h)
Volume ID number (binary)
Volume label
File-system type (ASCII)
Start of boot program and data

Keeping Track of Files
MS-DOS Directory Structure
Long Filenames in MS-Windows
File Allocation Table

MS-DOS Directory Structure (1 of 2)

MS-DOS Directory Structure (2 of 2)
Time field equals 4DBDh (9:45:58), and the Date field equals 247Ah (March 26, 1998). Attribute is normal:

Date and Time Fields
Date stamp field:

Time stamp field:

File Attribute Values
What type of file has attribute 00100111 . . . ?

Long Filenames in Windows
Filename: ABCDEFGHIJKLMNOPQRSTUV.TXT

File Allocation Table (1 of 2)
A map of all clusters on the disk, showing their ownership by specific files
Each entry corresponds to a cluster number
Each cluster contains one or more sectors
Each file is represented in the FAT as a linked list, called a cluster chain.
Three types of FAT’s, named after the length of each FAT entry:

File Allocation Table (2 of 2)
Each entry contains an n-bit integer that identifies the next entry. (n=12,16, or 32)
Two cluster chains are shown in the following diagram, one for File1, and another for File2:

Reading and Writing Disk Sectors (7305h)
INT 21h, Function 7305h (absolute disk read and write)
Reads and writes logical disk sectors
Runs only in 16-bit Real-address mode
Does not work under Windows 2000, XP, Vista, Windows 7
Tight security!

DISKIO Structure
Used by Function 7305h:

DISKIO STRUCT
startSector DWORD 0 ; starting sector number
numSectors WORD 1 ; number of sectors
bufferOfs WORD buffer ; buffer offset
bufferSeg WORD @DATA ; buffer segment
DISKIO ENDS

buffer BYTE 512 DUP(?)
diskStruct DISKIO <>
mov ax,7305h ; absolute Read/Write
mov cx,0FFFFh ; always this value
mov dl,3 ; drive C
mov bx,OFFSET diskStruct
mov si,0 ; read sector
Example: Read one or more sectors from drive C:

Sector Display Program
Pseudocode:
Ask for starting sector number and drive number
do while (keystroke <> ESC)
Display heading
Read one sector
If MS-DOS error then exit
Display one sector
Wait for keystroke
Increment sector number
View the source code

System-Level File Functions
Common Disk-Related Functions
Get Disk Free Space
Create Subdirectory
Remove Subdirecrory
Set Current Directory
Get Current Directory

Common Disk-Related Functions

ExtGetDskFreSpcStruc Structure (1 of 2)
StructSize: A return value that represents the size of the ExtGetDskFreSpcStruc structure, in bytes.
Level: Always 0.
SectorsPerCluster: The number of sectors inside each cluster.
BytesPerSector: The number of bytes in each sector.
AvailableClusters: The number of available clusters.
TotalClusters: The total number of clusters in the volume.

Structure data returned by Fucntion 7303h:

ExtGetDskFreSpcStruc (2 of 2)
AvailablePhysSectors: The number of physical sectors available in the volume, without adjustment for compression.
TotalPhysSectors: The total number of physical sectors in the volume, without adjustment for compression.
AvailableAllocationUnits: The number of available allocation units in the volume, without adjustment for compression.
TotalAllocationUnits: The total number of allocation units in the volume, without adjustment for compression.
Rsvd: Reserved member.

Function 7303h – Get Disk Free Space
AX = 7303h
ES:DI points to a ExtGetDskFreSpcStruc
CX = size of the ExtGetDskFreSpcStruc variable
DS:DX points to a null-terminated string containing the drive name

View the DiskSpc.asm program

Create Subdirectory
pathname BYTE “\ASM”,0

mov ah,39h ; create subdirectory
mov dx,OFFSET pathname
jc DisplayError
DisplayError:

Remove Subdirecrory
pathname BYTE ‘C:\ASM’,0

mov ah,3Ah ; remove subdirectory
mov dx,OFFSET pathname
jc DisplayError
DisplayError:

Set Current Directory
pathname BYTE “C:\ASM\PROGS”,0

mov ah,3Bh ; set current directory
mov dx,OFFSET pathname
jc DisplayError
DisplayError:

Get Current Directory
pathname BYTE 64 dup(0) ; path stored here by MS-DOS

mov ah,47h ; get current directory path
mov dl,0 ; on default drive
mov si,OFFSET pathname
jc DisplayError
DisplayError:

Disk controller: acts as a broker between the hardware and the operating system
Disk characteristics
composed of tracks, cylinders, sectors
average seek time, data transfer rate
Formatting & logical characteristics
master boot record, contains disk partition table
clusters – logical storage units
file allocation table – used by some systems
directory – root directory, subdirectories

rotating spindle

File System
Logical sectors
Cluster chain
Physical sectors
File Allocation Table

File size: 8,200 bytes
4,096 used
8 bytes used,
4,088 empty
4,096 used

.$.$…Mz$ …..

read-only file
hidden file
system file
volume label
subdirectory
archive bit
(reserved, 0)
(reserved, 0)

01A0 42 4E 00 4F 00 50 00 51 00 52 00 0F 00 27 53 00 BN.O.P.Q.R…’S.
01B0 54 00 55 00 56 00 2E 00 54 00 00 00 58 00 54 00 T.U.V…T…X.T.
01C0 01 41 00 42 00 43 00 44 00 45 00 0F 00 27 46 00 .A.B.C.D.E…’F.
01D0 47 00 48 00 49 00 4A 00 4B 00 00 00 4C 00 4D 00 G.H.I.J.K…L.M.
01E0 41 42 43 44 45 46 7E 31 54 58 54 20 00 AF 78 62 ABCDEF~1TXT ..xb
01F0 2F 2B 30 2B 00 00 59 B9 30 2B 02 00 52 01 00 00 /+0+..Y.0+..R…
first long
attribute (long
create date
last modified
last modified

File1: starting cluster number = 1, size = 7 clusters
File2: starting cluster number = 5, size = 5 clusters

程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com