---- 整理自狄泰软件唐佐林老师课程
问题:
| 指定打印参数(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 functionCHANGLIANG 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的值是否等于0jz 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






