Memory 汇编程序8086中的内存使用
我用汇编语言8086为我的班级编写了一个程序,一切都很好。 但除了制作工作程序外,我们还必须尽可能使用低内存。你能在这方面给我一些建议吗?我应该写什么?我应该避免什么 程序应该首先在屏幕上打印字母A,然后在每一行中再打印字母表中下一个字母的两个字母,在Z处停止,然后按任意键结束程序。用于在按下键之前停止,我使用: mov啊,00h int 16hMemory 汇编程序8086中的内存使用,memory,assembly,x86-16,Memory,Assembly,X86 16,我用汇编语言8086为我的班级编写了一个程序,一切都很好。 但除了制作工作程序外,我们还必须尽可能使用低内存。你能在这方面给我一些建议吗?我应该写什么?我应该避免什么 程序应该首先在屏幕上打印字母A,然后在每一行中再打印字母表中下一个字母的两个字母,在Z处停止,然后按任意键结束程序。用于在按下键之前停止,我使用: mov啊,00h int 16h 这是一个好方法吗?您想要的大部分内容都可以在零内存中完成(只计算数据,不计算代码本身)。一般而言: 在内存中使用寄存器而不是变量 不要使用推/弹出按
这是一个好方法吗?您想要的大部分内容都可以在零内存中完成(只计算数据,不计算代码本身)。一般而言:
- 在内存中使用寄存器而不是变量
- 不要使用推/弹出按钮
- 不要使用子程序
- 将字符输出到屏幕
- 等待按键
- 退出并返回操作系统
试试简单的
ret
;不推荐使用,但它可能只适用于某些MS-DOS版本。一个更丑陋的方法是跳转到F000:FFF0
,这将重新启动机器。保证在零内存中工作。使用以下说明:
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
这些优化使程序更快、规模更大这通常是一个过于模糊的问题,我怀疑它会被关闭。您的第一步应该是确定一个基准,即您的程序在当前版本中使用了多少内存。这是一个如此简单的程序,我相信你的老师的意思是,你应该尽可能多地使用寄存器指令,而不是分配内存来存储数据。应该可以用大约2字节的数据内存来解决这个问题。如果讲师正在计算代码内存,那么您需要寻找使用少量简短指令而不是大量和/或长指令的方法。