您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:22 来源:未知

本文章共9822字,分7页,当前第1页,快速翻页:
 
仿98(DOS7.1)的F$.EXE(>512M模式运行),P_QUEST的P$.EXE

本文基于486DX2,主板,可带primary(启动)/secondary控制IDE器2,中断14/15,每个IDE,可带master(启动,电缆中)/slave(缆端)(跳线ds插/空)2通道,每通道,可带1台硬盘驱动器,每驱动器,可带1块NORMAL,LBA,LARGE模式的IDE硬盘.
逆风编程技术

DOS,98对硬盘,先按IDE,后按m/s,依次编号,不编闲置通道.例如,有3块盘,块1,2在pri_m/s上,块3在sec_cs上,此3块,编为80h~82h.

开机盘的IDE及通道,由BIOS的BOOT SEQ指定.

(1) DOS/98的读写F16/32格式的位置X的Y个连续扇区的BIOS中断13h参数:
ah的2/3指明读/写,al的低6位指明Y,es:bx指向内存buf首,cl的低6位指明X的扇号sector,最小1,ch,左拼cl第6,7位,齐指X的柱面号cylinder,最小0,dh指明磁头号head,最小0,dl指明软硬盘编号.

IDE原有的NORMAL,BIOS限定柱面数1024,磁头数16,扇区数63,每扇512字节,相乘=容量528MB.用作cmos_chs(cylinder:head:sector)立体寻扇.

LBA,仅磁头数异达255,容量8.4GB

LARGE,柱面数>1024,磁头数16,控制器做柱面数/2,磁头数*2,以适13h.容量2048*16*63*512=1G

周边设定:Block模式加速,PIO(并行I/O接口)模式,影响rate

(2) 针对LBA的扩展13h线性64位lba寻扇:

chs转时,lba=c*sectors_per_cylinder h*sectors_per_track (s-1)
其中,sectors_per_cylinder为每柱面扇数,sectors_per_track为每磁道扇数,因s从1编号,要减1.

互转,见"(7) 文"的chs2lba,lba2chs.

利用extblk块:

extblkdb16;块的字节数(含此字节)
db0
sec_tot dw1指明Y个扇区
buf_off dw0 ;内存buf偏移
buf_seg dw0 ;buf段值
lbaldw0 ;lba低双字低字
lbahdw0 ;lba低双字高字
dd0 ;lba高双字

读/写时,ah=42h/43h,多ds:si指向extblk

扩展i13的BIOS支持性(柱数<1024,先用chs),及导出硬盘柱数,头数,每道扇数,算法见"(7) 文"的h_geo

(3) 硬盘分区:

每硬盘,最多划为DOS主分区,DOS扩展分区,非DOS分区之1的4区,述于16字节/区的64字节分区表(dpt):

bootONdb 080H/0,是活跃/不活跃.
db ?分区启动chs的头号
dw ?低6位:扇区,低第6,7位与高字节,'齐指'柱面号
volumedb 0分区标识值
db ?结束chs
dw ?
Frontdd 0此分区之前(称隐藏)扇区数.INT_25H_dx=1,是在其后读逻辑首扇
Indd 0此分区所含扇区数

MBR(F$制的1扇盘主引导记录,软盘0:0:1,硬盘DOS分区的首扇,即INT_25H_扇号dx=1),转cpu给Format.com制的驻有OS的活跃主分区引导记录(OBR).

主分区的保留区(引导扇区PBS囿其内,软盘仅藏1区)之后,常是2份FAT,再后,是根目录.

PBS片断:

0~2:JMP引导程序
3~0AH:厂,sys_ver
(BPB首)0BH~0CH:每扇bytes
0DH:每簇扇数
0EH~0FH:保留区扇数
10H:FAT份数
11H~12H:F16根目录32字节项的数目,F32:0.
13H~14H:软盘,32M内硬盘:分区总扇数
15H:介质,软盘:F0H,硬盘:F8H
16H~17H:软盘,32M内硬盘:每FAT占用扇
18H~19H:每道扇数
1AH~1BH:磁头数
1CH~1FH:此分区之前隐藏扇数
20H~23H:32M外硬盘:分区总扇数
24H~27H:32M外硬盘:每FAT占用扇
40H:磁盘BIOS,1st硬盘:80H,软盘:0
47H~51H:vol
52H~59H:file_sys

软盘6.22的io.sys,最先分得簇,如目录项0基第13字,指向1e,此12BIT的项值,是1f0002,指明01f->020->...->fff链.

分区标识值:

闲置:0
DOS主分区:1,4,6,0bh,0ch,0eh
DOS扩展分区:5,0fh
非DOS分区:其它

笔者用P,对硬盘划分4个DOS主分区,再prw,读此盘(0:0:0)到文件0,用debug,改分区vol值为2,用prw,回写0到(0:0:0),P的分区info页,显vol对应XENIX.

释意,见"(7) 文"的FAT

若vol<20H,则高4位,1/0表示隐藏/非隐藏,后缀X,用于扩展i13接口.

各硬盘,均含0:0:1(chs)的1扇MBR,其偏移1be字节,连续存4个分区表.

各硬盘,最多1个DOS扩展分区,其内,能划分称为逻辑分区的数个DOS主分区,非DOS分区.

逻辑分区串成链.例如,vol=5的扩展分区E,先含1个DOS主分区D,后含1个非DOS分区N,则E的Front域值F,是E内的各逻辑分区位置基址,F指明扇区S1,而S1的偏移1be字节,是D的分区表,偏移1ce字节,其vol=0fh,表示DOS扩展分区,其Front域值,加上基址F,指明扇区S2,而S2的偏移1be字节,是N的分区表,偏移1ce字节,其vol=链尾0.
 
本文章更多内容1 - 2 - 3 - 4 - 5 - 6 - 7 - 下一页>>
相关文章

DEBUG命令详解
系统托盘中的快捷图标
只能在保护模式下执行的指令
任务状态段和控制门
程式语言效率分析(1)
学习更多关于“绘制”文本串的知识
给程序加个图标
MASM的反反汇编技术
进一步学习对话框
驻留exe文件
保护方式简介
实模式和任何特权级下可执行的指令
汇编语言的高级语言特性
关于div/idiv/mul/imul指令的用法
建立自己的动态链接库
超类化
驱动程序的动态加载
用汇编编写屏幕保护程序
控制转移(2)
Win32编程中请慎用ebx/esi/edi

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31