Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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
Python 你对这些汇编助记符有什么建议吗?_Python_Assembly_Whitespace_Mnemonics_Esoteric Languages - Fatal编程技术网

Python 你对这些汇编助记符有什么建议吗?

Python 你对这些汇编助记符有什么建议吗?,python,assembly,whitespace,mnemonics,esoteric-languages,Python,Assembly,Whitespace,Mnemonics,Esoteric Languages,上学期在大学里,我的老师在计算机语言课上教了我们一门名为。为了在繁忙的课程(期中考试)中更好地学习这门语言,我写了一篇和。一个是为了方便编写程序而设计的,一个是用给定的程序集编写的 现在是夏天,一个新的项目已经开始,目标是重写0.3的解释器和汇编程序,之后还有进一步的开发。由于有比以前更多的时间来进行它的设计,所以这里向您介绍了一个大纲,它提供了一组经过修改的汇编语言助记符。这篇文章被标记为他们讨论的wiki 您过去是否有过汇编语言方面的经验?是否有一些您认为应该重命名为其他名称的说明?你是否发

上学期在大学里,我的老师在计算机语言课上教了我们一门名为。为了在繁忙的课程(期中考试)中更好地学习这门语言,我写了一篇和。一个是为了方便编写程序而设计的,一个是用给定的程序集编写的

现在是夏天,一个新的项目已经开始,目标是重写0.3的解释器和汇编程序,之后还有进一步的开发。由于有比以前更多的时间来进行它的设计,所以这里向您介绍了一个大纲,它提供了一组经过修改的汇编语言助记符。这篇文章被标记为他们讨论的wiki

您过去是否有过汇编语言方面的经验?是否有一些您认为应该重命名为其他名称的说明?你是否发现自己的思维方式与命名助记符的思维方式不同?如果你能对这些问题中的任何一个回答“是”,欢迎你来这里。主观的回答是赞赏的


堆栈操作(IMP:[空格])

堆栈操作是更常见的操作之一,因此IMP[空间]很短。有四个堆栈指令

hold N       Push the number onto the stack
copy         Duplicate the top item on the stack
copy N       Copy the nth item on the stack (given by the argument) onto the top of the stack
swap         Swap the top two items on the stack
drop         Discard the top item on the stack
drop N       Slide n items off the stack, keeping the top item

算术(IMP:[制表符][空格])

算术命令对堆栈顶部的两个项进行操作,并用操作结果替换它们。按下的第一个项目被认为是操作员的左侧

add          Addition
sub          Subtraction
mul          Multiplication
div          Integer Division
mod          Modulo

堆访问(IMP:[Tab][Tab])

堆访问命令查看堆栈以查找要存储或检索的项的地址。要存储项目,请先按地址,然后按值,然后运行store命令。要检索项目,请按地址并运行retrieve命令,该命令将存储在堆栈顶部位置的值

save         Store
load         Retrieve
print chr    Output the character at the top of the stack
print int    Output the number at the top of the stack
input chr    Read a character and place it in the location given by the top of the stack
input int    Read a number and place it in the location given by the top of the stack

流量控制(IMP:[LF])

流量控制操作也很常见。子例程由标签以及条件和无条件跳转的目标标记,通过这些跳转可以实现循环。程序必须通过[LF][LF][LF]结束,以便解释器可以干净地退出

L:           Mark a location in the program
call L       Call a subroutine
goto L       Jump unconditionally to a label
if=0 L       Jump to a label if the top of the stack is zero
if<0 L       Jump to a label if the top of the stack is negative
return       End a subroutine and transfer control back to the caller
halt         End the program


问题:您将如何重新设计、重写或重命名以前的助记符?原因是什么?

我想我建议的第一个更改是将按住和放下分别更改为按下和弹出

然后我可能会将copy重命名为dup(我认为这是面向堆栈语言中此操作最常见的名称)

我有点困惑,为什么你经常会有不同于记忆法的简短的一个词解释。例如,助记符是Save,解释是Store。助记符是加载,解释是检索。顺便说一句,这两种记忆法没有向我充分解释。保存什么在哪里?从哪里装载什么?(编辑该问题随后进行了编辑,以明确这些含义)


谢谢你这篇有趣的帖子。

我不确定我是否完全理解你的问题,所以如果我不理解,请原谅我

除了堆栈之外,我可能会添加一个“状态寄存器”,其中包含由算术运算符设置的各种不同标志(如进位、溢出和零)

然后,我将添加测试这些标志的“if”表单

我将添加位移位和旋转(左右)指令,以及对位进行操作的and/OR/XOR/NOT操作

您很可能希望有某种内存访问,除非您希望I/O指令将内存作为一个值流来处理,以获得良好的老式图灵机感觉。

  • 按下n,以明确n是立即数
  • 我认为“交换”有时是“exc”或“exch”
  • “保存”通常是“st”(存储)
  • “load”通常是“ld”
  • “call”也可以是“jsr”或“bl”
  • “goto”通常是“jmp”或“bra”
  • “if=0”通常是“beq”

  • “天哪,一个空白汇编程序?我相信你的极客计价器刚升到11!解释来自于这里的教程:由于我没有编写语言,并且目前只打算为该语言的0.3版本重写解释器,因此更改它的选项是有限的。如果一切顺利,我可能会冒昧地对指令集进行一些小的修改,并主要关注该语言扩展版本0.4的汇编代码。继续下去,版本0.5可能会专注于指令,并涉及对空白汇编进行更大的修改。此外,将语言从使用三个空格字符改为全部六个空格字符是一个小小的额外目标。谢谢!hold指令最初是push指令,drop指令最初是WAVE指令。考虑了Pop,但push和Pop都不能很好地描述操作(尽管它们是标准的)。你关于将退出改为停止的建议是有道理的。“print chr”是一条指令:它没有操作数。也许学习4D对我来说越来越重要了。奇怪的是,他们在指令中留有空格。:)这取决于您使用的范例。x87有“fstp”,意思是“浮点存储和pop”,即存储与弹出正交(许多x87指令都有“和pop”变体)。在Unix halt中添加来自Wapedia:
    的编辑…是关闭计算机的命令。在x86汇编语言中,HLT是一条指令,它会停止CPU,直到触发下一个外部中断。
    这可能会在以后将空白扩展到其他版本时派上用场。在语言中编程一个中断系统将是一次很好的学习经历。在一些系统上,{{halt}}和{{poweroff}之间有区别。