POJO 发表于 2021-11-12 10:33

对汇编语言比较了解的大佬或者童鞋可以来看看!!!求助

求助!!!有关汇编的知识,应该也不是太难的东西,但我大一的时候学的不好,现在回来补充!

blackboard 发表于 2021-11-12 11:09

2001年大一学的也是这个,现在看起来还是依旧

大兵马元帅 发表于 2021-11-12 11:10

blackboard 发表于 2021-11-12 11:09
2001年大一学的也是这个,现在看起来还是依旧

看起来还是依旧不会

POJO 发表于 2021-11-12 11:17

大兵马元帅 发表于 2021-11-12 11:10
看起来还是依旧不会

绝了,我也学了点,但是看到这些怎么感觉跟我学的不一样呢,在网上找题目都找不到,太离谱了有点。

少年持剑 发表于 2021-11-12 12:05

题目的要求是实现一个语言解析器, 格式看起来和汇编一样,但是实现和汇编没什么关系。应该是和编译原理有关,做一个简单的解析器

zydxx1111 发表于 2021-11-12 12:12

想学这个,但是没找到好的教程

avid 发表于 2021-11-12 23:26

本帖最后由 avid 于 2021-11-12 23:32 编辑

试试这个,这版是python写的,性能不好。
附件是从题目里抄的汇编语句,井号开头的语句不会被代码解释


class runAssemblyCode():
    '''
简单解释汇编代码
    '''
    def __init__(self, path):
      self.filepath = path
      self.code = list()
      self.pc = 0
      self.vars = {}

    def loadCode(self):
      with open(self.filepath) as f:
            lines = (line.strip() for line in f)
            lines = (line for line in lines if line and not line.startswith('#'))
            self.code.extend(lines)
   

    def runCode(self):
      statement = self.code
      while(statement):
            func, *args = statement.split()
            runAssemblyCode.__dict__(self, args)
            try:
                statement = self.code
            except IndexError:
                statement = None

    def mov(self, args):
      a = args
      v = args
      aValue = self.vars.setdefault(a, 0)
      if v.isnumeric():
            aValue += int(v)
      else:
            aValue += self.vars
      self.vars = aValue
      self.pc += 1

    def inc(self, args):
      a = args
      aValue = self.vars
      aValue += 1
      self.vars = aValue
      self.pc += 1

    def dec(self, args):
      a = args
      aValue = self.vars
      aValue -=1
      self.vars = aValue
      self.pc +=1

    def jnz(self, args):
      a = args
      offset = args
      if self.vars:
            self.pc += int(offset)
      else:
            self.pc += 1

    def output(self):
      for k, v in self.vars.items():
            print(f'{k}\t{v}')

def main():
    codeRunner = runAssemblyCode('./assembly_code.txt')
    codeRunner.loadCode()
    codeRunner.runCode()
    codeRunner.output()

if __name__ == '__main__':
    main()
页: [1]
查看完整版本: 对汇编语言比较了解的大佬或者童鞋可以来看看!!!求助