为什么主引导记录的内存地址是0x7C00?

当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是32KB。我们知道,内存地址从0x0000开始编号,32KB的内存就是0x0000~0x7FFF。
8088芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号INT 19h的处理程序。)所以,内存只剩下0x0400~0x7FFF可以使用。
为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。由于一个扇区是512字节,主引导记录本身也会产生数据,需要另外留出512字节保存。所以,它的预留位置就变成了:

0x7FFF - 512 - 512 + 1 = 0x7C00

0x7C00就是这样来的。
计算机启动后,32KB内存的使用情况如下。

+——————— 0x0
| Interrupts vectors
+——————— 0x400
| BIOS data area
+——————— 0x5??
| OS load area
+——————— 0x7C00
| Boot sector
+——————— 0x7E00
| Boot data/stack
+——————— 0x7FFF
| (not used)
+——————— (…)

详细解释 org 7c00h ; MBR程序必须从0x7c00开始 mov ah, 0x0e ; BIOS中断0x10功能号,用于在屏幕上输出字符 mov al, 'W' ; 输出自己的姓名拼音 int 10h mov al, 'A' int 10h mov al, 'N' int 10h mov al, 'G' int 10h mov al, ' ' int 10h mov al, 'X' ; 输出自己的学号 int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov bx, 0 ; 将ASCII码总和初始化为0 mov al, 'W' ; 计算姓名字符的ASCII码总和 add bx, al mov al, 'A' add bx, al mov al, 'N' add bx, al mov al, 'G' add bx, al mov al, 'X' ; 计算学号字符的ASCII码总和 add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov ah, 0x0e ; 输出ASCII码总和的十进制形式 mov al, ' ' int 10h mov al, 'A' int 10h mov al, 'S' int 10h mov al, 'C' int 10h mov al, 'I' int 10h mov al, 'I' int 10h mov al, ':' int 10h mov cx, 10 ; 将ASCII码总和转换为十进制形式 mov dx, 0 div cx add dl, 48 mov ah, 0x0e mov al, dl int 10h mov ah, 0x0e mov al, dh add al, 48 int 10h jmp $ ; 无限循环 times 510-($-$$) db 0 ; MBR程序必须是512字节,填充0以达到字节数 dw 0xaa55 ; MBR程序结尾的引导标记 在运行该程序后,计算机屏幕将会输出 WANG XXXXXXX,其中 X 代表你的学号。接着,在屏幕上会输出 ASCII:xxx,其中 xxx 是自己姓名和学号的 ASCII 码总和。
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值