1

您好,提前感谢!

我正在做一个汇编项目,我需要将我的程序代码移动到堆栈中,并从那里继续程序的流程。

这意味着程序将从代码段开始并在运行时移动到堆栈段。在那里它将执行给它的任务(现在,让它无限循环)。

我尝试了一些想法:

PUSH word [cs:jump]
MOV cx, sp
PUSH SS
PUSH SP
MOV BP, SP
ADD word [word BP], 2
JMP FAR [BP]
jump:
JMP cx

这可以编译,但不起作用。

汇编语言是英特尔针对 80x86 的 16 位汇编。汇编器是nasm。

感谢所有的帮助者。

4

1 回答 1

0

我假设您正在使用默认的 bin 输出格式编译代码以生成 .COM 文件。如果是这样,您需要注意 .COM 文件在内存中以 100h 的偏移量加载。您需要通过在代码开头添加 ORG 指令来让汇编器意识到这一点。

ORG 100h

完成此操作后,您的代码应该可以按预期工作。如果没有 ORG 指令,汇编器假定起始地址为 0,因此跳转内存引用将关闭 100h 字节。

有关详细信息,请参阅NASM 文档

于 2013-07-07T22:24:05.747 回答