If statement 我需要用ARC汇编语言实现以下代码段

If statement 我需要用ARC汇编语言实现以下代码段,if-statement,assembly,architecture,arc-architecture,If Statement,Assembly,Architecture,Arc Architecture,执行比较的关键是减法指令(更新标志的版本,即subcc)。 您可以指定%r0作为目标操作数,因为不需要这种减法的结果(利用ARC三个操作数形式) 假设你这样做 ! This program executes an If/else statement .begin .org 2048 prog1: ld [X], %r1 ! this loads memory X into register 1 ld [Y], %r2 ! this loads

执行比较的关键是减法指令(更新标志的版本,即
subcc
)。
您可以指定
%r0
作为目标操作数,因为不需要这种减法的结果(利用ARC三个操作数形式)

假设你这样做

! This program executes an If/else statement
    .begin
    .org 2048
prog1:  ld  [X], %r1    ! this loads memory X into register 1 
        ld  [Y], %r2    ! this loads memory y into register 2


X:  0
Y:  0
Z:  0
    .end
以下是事实

  • 结果写入
    r0
  • 如果设置了
    C
    标志,则
    r2>r1

  • 如果未设置
    C
    标志,则执行比较的关键是减法指令(更新标志的版本,即
    subcc
    )。
    您可以指定
    %r0
    作为目标操作数,因为不需要这种减法的结果(利用ARC三个操作数形式)

    假设你这样做

    ! This program executes an If/else statement
        .begin
        .org 2048
    prog1:  ld  [X], %r1    ! this loads memory X into register 1 
            ld  [Y], %r2    ! this loads memory y into register 2
    
    
    X:  0
    Y:  0
    Z:  0
        .end
    
    以下是事实

    • 结果写入
      r0
    • 如果设置了
      C
      标志,则
      r2>r1
    • 如果未设置
      C
      标志,则
      r2
      
      subcc %r1, %r2, %r0
      
      ! This program executes an If/else statement
          .begin
          .org 2048
      prog1:  ld  [X], %r1        ! this loads memory X into register 1 
              ld  [Y], %r2        ! this loads memory y into register 2
          ld  [Z], %r3        ! this loads memory z into register 3
      
          subcc %r2, %r1, %r0 !y ? x
          bcs .else_if        ;x > y
      
          add %r2, 1, %r2     !y = y + 1
          ba .end
      
      .else_if:
          subcc %r1, %r3, $r0 ;x ? z 
          beq .else       ;x == z
      
          sub %r2, 1, %r2
          ba .end
      
      .else:
          add %r3, 1, %r3     !z = z + 1
          ba .end
      
      X:  0
      Y:  0
      Z:  0
          .end