2013-10-17 25 views
0

拜托我。一个段只有64KB长。所以如果段寄存器的值不被改变,那么一个程序最大可以有64KB的大小。如何为8086处理器编写大于64KB的程序?

假设我们想为8086系统写一个大于64KB的程序。当然,它需要在程序中间改变段寄存器的值。我们是否明确地在程序内部更改它,或者我们只是编写代码并让操作系统处理它?像DOS这样的操作系统如何处理这样大的程序?

+0

也许它得到16,然后最后4个有两个时钟周期? – Leonardo

回答

1

x86处理器有JMPCALL的变种,其中您指定CS(代码段寄存器)的新值。这被称为farJMP/CALL,并且不同汇编器之间的确切语法不同。如果我们使用NASM作为一个例子,你会写:

; Do an inter-segment jump to the label named foobar 
jmp (seg foobar):foobar 

; Do an inter-segment call to the subroutine named foobar 
call (seg foobar):foobar 

有可能是装配的是有足够的智慧找出产生一个远跳转,即使你只是写jmp foobarfoobar位于不同的段,尽管我不能命名任何示例,因为这不是我测试过的。

0

如果您的程序将被编译为.com文件,那么您的代码不能大于〜63 KB。 如果要添加代码,则必须将该代码写入单独的文件并在运行时从文件加载代码。 要创建数组或在已加载.com文件的段外添加代码或数据,您必须预留空闲内存。 为此,请使用DOS功能预留空闲空间。在执行此操作之前,使用DOS函数返回程序期望使用当前段的空间内存。

相关问题