---- 整理自狄泰软件唐佐林老师课程
问题:
指定打印参数(AX = 0x1301,BX = 0x0007) |
---|
指定打印字符串的内存地址(ES:BP = 串地址) |
指定字符串的长度(CX = 串长度) |
中断调用(int 0x10) |
; 指定字符串地址
mov ax, msg
mov bp, ax
mov ax, ds
mov es, ax; 指定字符串长度
mov cx, 6; 指定打印参数
mov ax, 0x1301
mov bx, 0x0007; 中断调用
int 0x10
call function
CHANGLIANG equ 0x7c00 ; #define CHANGLIANG 0x7c00
只打印6个字符:
【参看链接】:06-07-08 - 突破512字节的限制 / 06 / 01print2
问题:
2 * 80 * 18 * 512Byte = 1440 KB
1张软盘 | 2个盘面 | 编号0~1 |
---|---|---|
1个盘面 | 80个柱面(磁道) | 编号0~79 |
1个柱面 | 18个扇区 | 编号1~18 |
1个扇区 | 512字节 | – |
逻辑扇区号(相对扇区号)/ 柱面扇区数
注:
- 执行:锁定/解锁驱动器
- 输入:
DL = 驱动器号
AL = 00h 锁定驱动器
AL = 01h 驱动器解锁
AL = 02h 返回锁定/解锁状态
AL = 03h-FFh 保留- 返回:
CF = 0, AH = 0 成功
CF = 1, AH = 错误码- 这个调用用来锁定指定驱动器中的介质
==> 指定逻辑扇区号AX、指定读取扇区数CX
==> 指定内存位置(ES:BX)
==> 重置软驱状态
==> 根据逻辑扇区号计算:柱面号、磁头号、扇区号
==> int 0x13
==> ret
被除数 ➗ 除数 = 商 ...... 余数
AX ➗ 通用reg或内存单元 = AL ...... AH
【参看链接】:06-07-08 - 突破512字节的限制 / 06 / 02read
FAT12文件格式 | 数据区 |
根目录区 | |
FAT2 | |
FAT1 | |
引导扇区 |
问题:
指定源起始地址(DS:SI) |
---|
指定目标起始地址(ES:DI) |
判断在期望长度(CX)内每一个字节是否相等 |
cmp cx, 0 ; 比较cx的值是否等于0
jz equal ; 如果比较结果为真,则跳转到equal标签处
【参看链接】:06-07-08 - 突破512字节的限制 / 07 / 00mem_cmp
查找根目录区是否存在目标文件
mov cx, [sp]
push cx
mov bp, sp
mov cx, [bp]
【参看链接】:06-07-08 - 突破512字节的限制 / 07 / 01find_entry
ndisasm -o 0x7c00 boot.bin > boot.txt
问题:
如果si大于di,就跳转到btoe标签处执行。
【参看链接】:06-07-08 - 突破512字节的限制 / 08 / 00mem_cpy
si < di
,从头部开始拷贝【参看链接】:06-07-08 - 突破512字节的限制 / 08 / 00mem_cpy2
si > di
,从尾部开始拷贝【参看链接】:06-07-08 - 突破512字节的限制 / 08 / 00mem_cpy3
FAT表中的 每个表项占用 1.5字节,即:使用3个字节表示2个表项
FatVec[j] 的动态组装:
被乘数 × 乘数 = 积
AL × 通用reg或内存单元 = AX
【参看链接】:06-07-08 - 突破512字节的限制 / 08 / 01FatVec