- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 68000 汇编语言程序在我的 Commodore Amiga 500 上运行,它可能会使用大量堆栈空间,所以我想进行边界检查。
如果我调用 FindTask(NULL),并检查 tc_SPUpper 和 tc_SPLower,我得到 $c22c24 和 $c21fa4,这是 3200 字节的堆栈;然而,CLI 分配了 8000 字节的堆栈,程序以 $c29598 的堆栈指针开始——内存比 tc_SPUpper 高大约 26K。
我在 AmigaDOS 开发人员手册中读到,在开始时,4(sp) 包含堆栈大小。该值确实包含 8000。(“在 4(SP) 处堆栈的下方是堆栈的大小(以字节为单位,如果您希望执行堆栈检查,这可能很有用。”)
我可以安全地将 sp - 4(sp) 作为堆栈的下限吗?我是否需要考虑堆栈大小、返回地址以及 CLI 堆栈中可能具有的其他一些数据?
最佳答案
在重新(…)阅读手册之后,我可能已经明白了。
来自 Amiga ROM 内核引用手册:库和设备,第 584 页:
The CLI does not create a new process for a program; it jumps to the program's code and the program shares the process with the CLI.
据此,我了解到 FindTask(NULL) 返回的进程是 CLI 进程,而 tc_SPUpper 和 tc_SPLower 指的是该进程的堆栈。
摘自 AmigaDOS 开发人员手册,第 1 页160:
When the CLI starts up a program, it allocates a stack for that program. This stack is initially 4000 bytes, but you may change the stack size with the STACK command. AmigaDOS obtains this stack from the general free memory heap just before you run the program; it is not, however, the same as the stack that the CLI uses.
据此,我得出结论,我的程序堆栈与 FindTask(NULL) 返回的任务中的堆栈是分开的。
同样来自 AmigaDOS 开发者手册,p. 160:
AmigaDOS pushes a suitable return address onto the stack that tells the CLI to regain control and unload your program. Below this on the stack at 4(SP) is the size of the stack in bytes…
据此,我得出结论,对于从 CLI 运行的程序,以下代码将为我提供堆栈中可用的最低地址。
move.l sp,d0 ; current stack pointer
addq.l #8,d0 ; return address and stack size
sub.l 4(sp),d0 ; size of stack
move.l d0,stack_lowest ; save for stack checking
对于从 Workbench 启动的程序,我认为 tc_SPUpper 和 tc_SPLower 是我想要的值。
来自 Amiga ROM 内核引用手册:库和设备,第 584 页:
When a user activates a tool or project, Workbench runs a program. This program is a separate process and runs asynchronously to Workbench.
我已经确认这两个值之间的差异确实是 .info 文件中指定的堆栈大小。
关于amiga - Amiga 500 上的堆栈边界检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61578536/
我有一个 68000 汇编语言程序在我的 Commodore Amiga 500 上运行,它可能会使用大量堆栈空间,所以我想进行边界检查。 如果我调用 FindTask(NULL),并检查 tc_SP
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
有人认识这个吗? +++++++++++.>+++++++++[>++++++++++++++ .-------------------------.+++++++++++++ 我读到,它与 Amig
在 AmigaOS 中的 Devs:Monitors 中找到的文件,它们包含什么? 它们的内部格式是什么?您如何修补一个或从头开始创建一个? 最佳答案 Amiga 程序 MonEd ( http://
任何人都可以发布一些源代码,这些源代码在编译(如有必要)并运行时,会在Amiga上产生“大师冥想错误”。 汇编程序,C或ARexx都可以。 谢谢。 最佳答案 尝试Alert()的exec.librar
使用 开发包 3 ,我需要生成一个以类似于 DPaint 的方式显示图形的应用程序。没有右手工具栏,只有一个垂直滚动的图像,最好是在 HAM 模式下。 申请摘要: 在硬件允许的范围内打开一个新员工的隔
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 7年前关闭。 Improve thi
HTML 十六进制颜色用 6 位数字(3 个字节,所谓的十六进制三元组)书写。Amiga 的颜色寄存器采用一个字(2 个字节,16 位)来定义颜色。 示例: 黄色 - HTML 十六进制 #FFFF0
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!