汇编程序 - 理解某些行

use*_*682 0 assembly nasm

在一些教程的帮助下,我写了一小段代码,在从软盘启动后向我显示一个字符串.

我的问题是现在,我不明白一些线路,我希望你能帮助我,或者只是告诉我,如果我是对的.

码:

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)
  1. line:启动程序@地址07C0h(我可以更改吗?)
  2. 为ax增加288个段落的空间
  3. 我的程序空间为4096字节(存储变量和东西?)
  4. 转到开始地址

谢谢你的帮助.

Dir*_*ple 6

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(引导加载程序启动的段).当您稍后在引导加载程序中引用数据标签时,它们将使用数据段,因此您的引导加载程序必须位于数据段的开头,才能在内存中找到正确的位置.