2012-06-25 64 views
1

我是使用MIPS的新手,我尝试计算海明距离。然而,即使寄存器$ t3具有正确的异或结果,当我用十进制打印它时,我得到一个错误的数字。计算汉明距离打印错误的十进制数,但使用MIPS正确的十六进制

word1:  .word 0xffeff0ff 
word2:  .word 0x00000001 

当我XOR这两个词,结果是:

ffeff0fe 

我的问题是如何计算它的十进制? 因为我试图打印屏幕和我-1052418而不是正确的26

这里是我完整的代码

.text  
     .globl __start 
__start:    
    la $a1,word1 
    lw $t1,0($a1)  
    la $a1,word2 
    lw $t2,0($a1)  
    xor $t3,$t1,$t2 
    la $a0,answer  
    li $v0,4 
    syscall   
    move $a0,$t3   
    li $v0,1 
    syscall 
    la $a0,endl  
    li $v0,4 
    syscall   
EXIT: li $v0,10 
    syscall   

    .data 
word1:  .word 0xffeff0ff 
word2:  .word 0x00000001 
answer:  .asciiz "Hamming distance is : " 
endl:  .asciiz "\n" 

回答

1

正在打印的两个值的XOR代替的比特数的具有不同的价值。你需要做的计算汉明距离是什么来算,这个数字,例如使用此代码:

move $a0, $zero # $a0 will hold the result 
loop: 
    bgez $t3, skip  # test the most significative bit of $t3 
    sll $t3, $t3, 1 # (*) [NOTE below] shift left $t3 one bit 
    addiu $a0, $a0, 1 # If bit was set, increment result 
skip:  
    bnez $t3, loop  # loop while not done 
    nop    # this nop is due to delayed branching 

这段代码假定您的MIPS处理器已经推迟分支。如果不是这种情况,则必须在标签跳过后移动标有(*)的指令。如果您没有延迟分支或下一条指令没有副作用,则可以删除nop。

此代码应该去,而不是你把move $a0,$t3

+0

谢谢你行。你很棒。 – EnexoOnoma