Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 汇编程序8086中的内存使用_Memory_Assembly_X86 16 - Fatal编程技术网

Memory 汇编程序8086中的内存使用

Memory 汇编程序8086中的内存使用,memory,assembly,x86-16,Memory,Assembly,X86 16,我用汇编语言8086为我的班级编写了一个程序,一切都很好。 但除了制作工作程序外,我们还必须尽可能使用低内存。你能在这方面给我一些建议吗?我应该写什么?我应该避免什么 程序应该首先在屏幕上打印字母A,然后在每一行中再打印字母表中下一个字母的两个字母,在Z处停止,然后按任意键结束程序。用于在按下键之前停止,我使用: mov啊,00h int 16h 这是一个好方法吗?您想要的大部分内容都可以在零内存中完成(只计算数据,不计算代码本身)。一般而言: 在内存中使用寄存器而不是变量 不要使用推/弹出按

我用汇编语言8086为我的班级编写了一个程序,一切都很好。 但除了制作工作程序外,我们还必须尽可能使用低内存。你能在这方面给我一些建议吗?我应该写什么?我应该避免什么

程序应该首先在屏幕上打印字母A,然后在每一行中再打印字母表中下一个字母的两个字母,在Z处停止,然后按任意键结束程序。用于在按下键之前停止,我使用: mov啊,00h int 16h
这是一个好方法吗?

您想要的大部分内容都可以在零内存中完成(只计算数据,不计算代码本身)。一般而言:

  • 在内存中使用寄存器而不是变量
  • 不要使用推/弹出按钮
  • 不要使用子程序
但要与操作系统交互,需要进行BIOS调用和/或操作系统调用;这些需要一些内存(通常是少量堆栈空间)。在您的情况下,您必须:

  • 将字符输出到屏幕
  • 等待按键
  • 退出并返回操作系统
但是,如果您真的想在最小内存中执行此操作,那么您可以使用一些技巧

将字符输出到屏幕 在PC上,在传统的文本模式下,您可以将字符直接写入视频RAM(地址B800:0000及更高)。这需要零内存

等待按键 最便宜的方法是等待BIOS键盘缓冲头的更改(地址041A hex处16位内容的更改)。这需要零内存。 另见:

退出并返回操作系统
试试简单的
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字节的数据内存来解决这个问题。如果讲师正在计算代码内存,那么您需要寻找使用少量简短指令而不是大量和/或长指令的方法。