在一些教程的帮助下,我写了一小段代码,在从软盘启动后向我显示一个字符串.
我的问题是现在,我不明白一些线路,我希望你能帮助我,或者只是告诉我,如果我是对的.
码:
mov ax, 07C0h
add ax, 288 ; (512 + 4096) / 16 = 288
mov ss, ax
mov sp, 4096
mov ax, 07C0h
mov ds, ax
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
mov ax, 07C0h
add ax, 288 ; (512 + 4096) / 16 = 288
mov ss, ax
Run Code Online (Sandbox Code Playgroud)
这将堆栈段(ss)的起始位于段号07C0h + 288处.引导加载程序在段号07C0h的开头加载.引导加载程序的大小为512字节,每个段为16字节.这意味着堆栈段在引导加载程序结束后开始4096个字节.
mov sp, 4096
Run Code Online (Sandbox Code Playgroud)
这将堆栈指针设置为4096.这意味着堆栈顶部现在超过堆栈段的开始4096字节.实际上,这已为堆栈分配了4096个字节.
mov ax, 07C0h
mov ds, ax
Run Code Online (Sandbox Code Playgroud)
这会将数据段设置为07C0h(引导加载程序启动的段).当您稍后在引导加载程序中引用数据标签时,它们将使用数据段,因此您的引导加载程序必须位于数据段的开头,才能在内存中找到正确的位置.
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |