Assembly 汇编程序中关联数组或哈希表的模拟

Assembly 汇编程序中关联数组或哈希表的模拟,assembly,hashtable,masm,Assembly,Hashtable,Masm,我是PHP程序员。现在,我需要在masm中创建一个简单的脚本,其中我需要使用key=>value对(即按键快速选择值-一对一)。其主要思想是键可以是字符串。masm中是否有类似的功能(关联数组、哈希表等)?正确执行此操作的最佳方法是什么?非常感谢 @Igor:欢迎使用Assembler,您必须自己在生铁上构建它,或者找到一个可链接的库来实现这一点 大多数进入汇编程序的人都有一些事情要做,他们希望没有现成的库(通常是用于有趣任务的高性能代码) 但是如果你的汇编代码大小合理,你只想写高性能的部分。这

我是PHP程序员。现在,我需要在masm中创建一个简单的脚本,其中我需要使用key=>value对(即按键快速选择值-一对一)。其主要思想是键可以是字符串。masm中是否有类似的功能(关联数组、哈希表等)?正确执行此操作的最佳方法是什么?非常感谢

@Igor:欢迎使用Assembler,您必须自己在生铁上构建它,或者找到一个可链接的库来实现这一点

大多数进入汇编程序的人都有一些事情要做,他们希望没有现成的库(通常是用于有趣任务的高性能代码)

但是如果你的汇编代码大小合理,你只想写高性能的部分。这些程序剩下的大部分都是非常普通的东西(打开文件,读取记录),。。。只是你被困在汇编程序里了

链接编辑器是您的朋友。许多高级语言(C,C++,FORTRAN,艾达,COBOL:)实际上编译成本地汇编代码。这就意味着,如果你能找到你想要的,用这种语言编写的例程,你可以找到一种从汇编代码中调用它的方法。其细节取决于高级语言的编译器约定以及计算机的精确指令集。您几乎可以依靠核心接口来使用汇编程序确实知道的调用子例程机器指令。最后,您必须向您的汇编器解释您希望它链接到感兴趣的编译代码,并学习如何使用链接编辑器将代码缝合到您想要的库中

对于文件I/O等标准活动,总会有一个库为汇编语言程序员提供所有操作系统功能。(否则怎么会有更高级的编程语言?)

所以,您应该做的是查找实现哈希表的C库,然后了解如何从汇编程序中调用它们

或者,您可以成为一名优秀的汇编语言程序员,自己编写这些代码。 这取决于你是想花大量时间学习,还是只想完成工作

PS:若你们并没有速度惊人的东西,那个么用C语言编写代码可能比用汇编语言编写代码要好。您仍然可以使用这些库:-}


PPS:考虑到你是一名PHP程序员,每天都使用哈希,因为它们是可用的,这可能是因为你使用PHP的方式污染了你的思维。您的计算真的需要散列吗,或者其他数据结构会工作吗?

不会。汇编程序中没有散列。有数组,但没有散列。哈希是一个“更高”的概念。您必须实现自己的哈希/桶算法来创建它们。@MarcB,非常感谢!那么,在您看来,实现这些功能的最佳方式是什么?我知道使用几十个条件句是一种丑陋和肮脏的方式——但这里哪一个更好?您需要在哈希表中存储多少项?如果只有几十个,只需快速地遍历一个标准数组,检查字符串匹配或其他内容。如果是任意数或“大”数,那么您应该为您的汇编程序挖掘一个真正的assoc数组库。@MarcB,是的,这里最好使用标准方法。但是如何模拟key=>value对呢?键-字符串,值-一些数字我认为没有任何快捷方式,您必须实现一个从字符串到int的良好哈希函数,使用它映射到数组中,并处理冲突(例如,让数组元素是匹配值的列表以及匹配的完整键),谢谢您的详细回答!你的猜测是对的-我需要快速完成这项任务-这是我学院现在学习的一部分:)所以我只需要使用汇编程序来完成这部分。我还试图记住其他我已知的实现方法——我认为链表比哈希表等更容易创建。此外,我的任务听起来像“创建程序,返回给定命令PUSH和POP的机器代码”(控制台I/o)——即输入的“PUSH CS”程序将返回“0E”。您认为,在没有哈希表的情况下创建此类功能的最佳方法是什么?谢谢!)第一个教训是,您需要了解数据结构。哈希表通常使用链表构建。若你们能很好地理解数据结构,汇编语言就是一种难看的编程语言。如果您不理解数据结构,您将无法编写任何有趣的汇编代码。(根据你们的描述,我不知道你们被要求做什么。)哦,是的,当我知道汇编程序中有结构时,我很满意。所以我也可以建立链表。请原谅我解释得不好-我会再解释一遍。所以,其主要思想是,在启动程序(程序在命令行中运行)后,用户输入带有参数的命令PUSH,程序返回该命令的代码(例如,输入“PUSH CS”,程序返回“OE”)。所有i/o(用户输入的命令和程序显示的代码)通过控制台。所以我需要实现给定命令的机器码的生成和返回算法,我认为关联数组和链表可以帮助我实现。我将非常感谢您的帮助!:)所以这不是“给我密码”。到目前为止,你说“我不知道怎么做”。去读一本关于数据结构的技术书。好的人会谈论构建哈希表。你不知道这个建议有多好。除非你证明自己已经付出了努力,否则你不会得到很多帮助。