gpt4 book ai didi

assembly - 试图理解这个简短的汇编指令,但我不明白

转载 作者:行者123 更新时间:2023-12-04 18:03:19 27 4
gpt4 key购买 nike

We had a task, given was an assembler instruction of a 2-addressing machine:

mov 202, 100[r1+]

Note down a minimal assembler instruction sequence which replaces this instruction (see above)



在哪里
  • n[rx+] : 由后增量索引的寄存器; n 是索引值,rx 是寄存器 x
  • 单个数值:直接寻址/存储

  • 我们应该使用的地址是:
  • rx - 寄存器直接寻址
  • [rx] - 寄存器间接寻址
  • #n - 直接寻址

  • 而且我们只允许使用add、sub、mov。

    我特别不明白 # 代表什么以及为什么我们需要减法,实际上我什么都不明白......
    任务已经解决,所以我不是在寻找解决方案。我需要一个解释它是如何完成的,试图自己理解它,但它没有用。
    我希望有人能够帮助我,对你太好了!

    解决方案:
    add #100, r1
    mov #202, r2
    mov[r2],[r1]
    sub #99, r1

    最佳答案

    明白汇编语言不是一些通用的标准化的东西。它由读取它的程序正式定义,即汇编程序。因此,无论该代码定义为该汇编程序的语言的是该语言。机器代码对处理器来说很重要,因此您可以拥有与用户数量一样多的不同汇编程序和汇编语言,只要它们都能生成正确的机器代码。因此,如果您希望这是普遍的,那么一条规则适用于所有并非如此的事情。

    您已经提供了足够的信息,让有经验的人看到这里反射(reflect)的其他汇编语言的习惯。

    mov 202, 100[r1+]

    因此,正如您所说,这似乎正在移动 202 寄存器直接寻址地址处的内容。到地址 r1+100 寄存器索引的位置和后增量。

    用更多指令替换它,因为就代码行而言,一行是最简单的(就复杂性和时钟数量而言,不一定)。
  • 所以需要读取地址202的内容,
  • 您需要暂时将 100 添加到 r1,
  • 需要将地址202的内容写入位置r1+100,
  • 然后你需要取 r1 并增加它(不是 r1+100 增加,而是 r1 没有增加索引)。

  • 给出的解决方案几乎可以做到:
    add #100, r1
    mov #202, r2
    mov[r2],[r1]
    sub #99, r1

    它将 100 加到 r1 上,这是我们需要暂时做的(并且稍后必须撤消,因为从长远来看 r1 现在是错误的)。
    然后因为它们限制了寻址模式,你需要一个寄存器来保存地址 202,所以值 202 被加载到 r2 中,就像值 100 被添加到 r1 一样。 #number 表示只使用这个数字。

    现在您可以使用 [rn],因此移动读取地址 r2(地址 202)处的内容并将其写入地址 r1(原始 r1 加 100)处的内容。最后,因为我们希望 r1 最终成为原来的加 1 但我们把它变成了原来的加 100 我们需要减去 99 r1+100-99 = r1+1

    在 C 中,它会是这样的:
    unsigned *r1;
    unsigned *r2;

    //r1 is set somewhere in here to something that is not defined in your question or problem.

    r1 += 100; //add #100,r1
    r2 = 202; //mov #202,r2
    *r1 = *r2; //mov [r2],[r1]
    r1 -= 99; //sub #99,r1

    目标在右侧,操作数在左侧并不直观,因为我们主要使用左侧的结果和右侧的操作数来编写和编码。

    我们不编码 202 = r2;我们改为写 r2 = 202;所以 mov r2,#202更直观,但同样,汇编语言是由编写汇编程序的人定义的,有些人喜欢从左到右,有些人喜欢从右到左。

    关于assembly - 试图理解这个简短的汇编指令,但我不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38108865/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com