【问题标题】:LC-3 Assembly Language - swapping valuesLC-3 汇编语言 - 交换值
【发布时间】:2013-02-22 18:02:35
【问题描述】:

如何交换地址中的值。目前我有 2 个包含地址的寄存器。然后我有 2 个临时变量来存储这些地址。然后我加载了值,因为我有地址。但我不知道如何交换值。我正在尝试进行冒泡排序。下面的代码是我目前拥有的

IF          ;swapping condition
   ST R2,idata    ;temporily hold the smaller data
   ST R1,imindata ;temporaily hold the larger data
   ST R2,iminaddres ;store the values into that address
   ST R2,iaddress   ;finish the swaping of the two values
   LD R1,iminaddres ;reput the address back into the register
   LD R2,iaddres    ;reput the address back into the register to be used for next cycle

【问题讨论】:

  • 什么不起作用?你怎么知道它不起作用?

标签: linux assembly lc3


【解决方案1】:

你会如何在 C 中做到这一点?

temp = a;
a = b;
b = temp;

然后了解需要从内存中加载这些值,这会改变一些事情

tempa = a;
tempb = b;
b = tempa;
a = tempb;

然后隔离负载和存储

rega <= load(a);
regb <= load(b);
store(a) <= regb;
store(b) <= rega;

然后在汇编中实现它。这闻起来像家庭作业,所以我不会为你做。

【讨论】:

    【解决方案2】:

    如果您只想交换两个寄存器的内容,有一个简单的位旋转技巧:

    XOR R1,R2
    XOR R2,R1
    XOR R1,R2
    

    这将在不使用任何内存的情况下交换两个寄存器的内容。

    【讨论】:

    • 我实际上想更改内存地址而不是寄存器的内容。您将如何处理?
    • lc3 没有异或,可以用非和与来完成,但需要一堆指令。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2010-12-24
    相关资源
    最近更新 更多