汇编程序 - 理解某些行

时间:2012-09-14 15:27:13

标签: assembly nasm

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

我现在的问题是,我不明白某些界限,我希望你能帮助我, 或者告诉我,如果我是对的。

代码:

mov ax, 07C0h
add ax, 288         ; (512 + 4096) / 16 = 288
mov ss, ax
mov sp, 4096

mov ax, 07C0h
mov ds, ax
  1. line:启动程序@地址07C0h (我可以改变吗?)
  2. 为ax
  3. 添加288段的空间
  4. 我程序的空间为4096字节 (存储变量和东西?)
  5. 转到开头地址
  6. 感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

mov ax, 07C0h   
add ax, 288         ; (512 + 4096) / 16 = 288
mov ss, ax

这将堆栈段(ss)的起始位于段号07C0h + 288处。引导加载程序在段号07C0h的开头加载。引导加载程序的大小为512字节,每个段为16字节。这意味着堆栈段在引导加载程序结束后开始4096个字节。

mov sp, 4096

这将堆栈指针设置为4096.这意味着堆栈顶部现在超过堆栈段的开始4096字节。实际上,这已经为堆栈分配了4096个字节。

mov ax, 07C0h
mov ds, ax

这会将数据段设置为07C0h(引导加载程序启动的段)。当您稍后在引导加载程序中引用数据标签时,它们将使用数据段,因此您的引导加载程序必须位于数据段的开头,才能在内存中找到正确的位置。

答案 1 :(得分:3)

mov ax, 07C0h   // copy the address 07C0h into the register ax
add ax, 288     // add the number 288 to the address in ax
mov ss, ax      // copy the result to the stack segment register (07C0h + 288)
mov sp, 4096    // set the stack pointer to 4096

mov ax, 07C0h   // copy the address 07C0h to ax again
mov ds, ax      // copy the address 07c0h from ax into ds

..这就是你所有的。