我为我的课程在汇编程序8086中创建了一个程序,一切正常。 但除了制作工作程序之外,我们还必须尽可能地使用低内存。你可以在这方面给我一些提示吗?我应该写什么,我应该避免什么?
该程序应首先在屏幕上打印字母A,然后在每个新行中打印两个字母表中的下一个字母的字母,在Z处停止并在按下任何键结束程序之后。为了停止直到按下键,我使用: mov啊,00h int 16h 是不是这样做的好方法?
答案 0 :(得分:1)
您想要的大部分内容都可以在零内存中完成(仅计算数据,而不是代码本身)。一般来说:
但要与操作系统交互,您需要进行BIOS调用和/或OS系统调用;这些需要一些内存(通常是少量的堆栈空间)。在您的情况下,您必须:
但是,如果您认真考虑在最小内存中执行此操作,那么您可以使用一些黑客。
在PC上,在传统文本模式下,您可以将字符直接写入视频RAM(地址B800:0000以及更远)。这需要零内存。
最便宜的方法是等待更改BIOS键盘缓冲区头(更改地址041A hex的16位内容)。这需要零内存。 另见:http://support.microsoft.com/kb/60140
尝试一个简单的ret
;不推荐它,但可能只适用于某些版本的MS-DOS。一个更丑陋的逃脱是跳转到F000:FFF0
,这将重启机器。这保证在零内存中工作。
答案 1 :(得分:0)
使用以下说明:
INC (Register*) instead of ADD (Register*), 1
DEC (Register*) instead of SUB (Register*), 1
XOR (Register)(same register) instead of MOV (Register), 0 (Doesn't work with variables)
SHR (Register*), 1 instead of DIV (Register*), 2
SHR (Register*), 2 instead of DIV (Register*), 4
..
SHL (Register*), 1 instead of MUL (Register*), 2
..
*Register or variable
这些优化使程序更快,尺寸更大