【问题标题】:Homework in assembly language汇编语言作业
【发布时间】:2012-10-26 00:01:56
【问题描述】:

我在汇编中有这个简单的代码:

1000  Add        R3,R2,#20
1004  Susbtract  R5,R4,#3
1008  And        R6,R3,#0x3A
1012  Add        R7,R2,R4

我的问题是“和”是做什么的......我真的很困惑,我正在做我的功课,但我被卡住了。

非常感谢。

【问题讨论】:

标签: assembly computer-architecture instruction-set


【解决方案1】:

0x3A = 00111010b 用于 8 位机器。这看起来像一个 64 位机器,所以在前面加上 56 个零。

它会屏蔽 R3 中除 [starts from 0](1st, 3rd, 4th, 5th and 6th) 之外的所有位,从右开始。所有其他位将被无效并存储在 R6 中

例如,如果 R3 包含 0x5848,则 (0x5848 (and) 0x3A) = 0x08(将存储在 R6 寄存器中)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0101 1000 0100 1000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 1010 (AND)
--------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000
--------------------------------------------------------------------------------------

与运算的真值表 =

A    B    A(and)B
-----------------
0  | 0  |  0
0  | 1  |  0
1  | 0  |  0
1  | 1  |  1
-----------------

【讨论】:

    【解决方案2】:

    它在两个源操作数之间按位执行and,并将结果放入目标操作数。要详细显示结果,请将每个数字转换为二进制,然后执行and。例如,如果 R0 = 0x1234 且 R1 = 0x8765,则:

    R0 = 0x1234 =  0001 0010 0011 0100
    R1 = 0x8765 =  1000 0111 0110 0101
    
    Result      =  0000 0010 0010 0100
    Hex result  =  0x0224
    

    即,结果中的每一位都是1,当且仅当两个输入操作数中该位置的位都是 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2013-01-17
      • 2013-09-04
      相关资源
      最近更新 更多