-3

内存中地址为 $9000 的字节。

编写一个程序来清除第 7 位和第 6 位,设置第 5 位和第 4 位,并切换第 3、2、1 和 0 位。

这就是我所拥有的,它不起作用。

     ORG    $9000
    
        MOVE.B  #00, D0
   
        MOVE    #7, D1
        BCLR    #7, D0

NEXT    BTST    D1,D0

        BEQ     ZERO
        BCHG    #7,D0

ZERO    SUB.B   #1,D1

        BCC     NEXT
        
EXIT    TRAP    #14

        END     $9000

任何帮助将非常感激

4

1 回答 1

4

我不知道 68k 汇编,但为什么这么长的程序,以及为什么你需要比较和跳转,而它只是一些简单的按位运算。这是C中的一个实现

a &= 0x3f; // 0011 1111 clear bit 7 and 6
a |= 0x30; // 0011 0000 set bit 5 and 4
a ^= 0x0f; // 0000 1111 toggle bit 3~0

转换为汇编时只需要 3 个简单的操作(不包括可变负载和 3 个恒定负载,如果需要),根本不需要跳转和比较

关于 brownbot 编译器资源管理器的演示。Browncc 编译为

bitwise:
        move.b 7(%sp),%d0
        and.b #63,%d0
        or.b #48,%d0
        eor.b #15,%d0
        rts
于 2013-11-08T01:43:22.950 回答