Assembly “计算汉明距离”使用MIPS打印错误的十进制,但正确的十六进制
我在使用MIPS方面是新手,我尝试计算汉明距离。然而,即使是寄存器$t3也有正确的异或结果,当我以十进制打印它时,我得到了一个错误的数字Assembly “计算汉明距离”使用MIPS打印错误的十进制,但正确的十六进制,assembly,mips,Assembly,Mips,我在使用MIPS方面是新手,我尝试计算汉明距离。然而,即使是寄存器$t3也有正确的异或结果,当我以十进制打印它时,我得到了一个错误的数字 word1: .word 0xffeff0ff word2: .word 0x00000001 当我对这两个词进行异或运算时,结果是: ffeff0fe 我的问题是如何用十进制计算它? 因为我试着在屏幕上打印它,我得到了-1052418而不是正确的26 这是我的完整代码 .text .globl _
word1: .word 0xffeff0ff
word2: .word 0x00000001
当我对这两个词进行异或运算时,结果是:
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"
打印的是两个值的异或,而不是具有不同值的位数。计算汉明距离需要做的是计算该数字,例如使用以下代码:
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
.text的行中,而不是该行
.globl __start
__开始:
lbu $t0 , B
lbu $t1 , B1
xor $s0 , $t0 , $t1
addi $s1 , $s1 , 7 # pointer for swift
add $s2 , $zero , $zero # pointer for loop
循环:
出口:
李$v0,10
系统调用
.数据
srl $t7 , $s0 , $s1 # swift
sll $t7 , $t7 , 31
slt $t7 , $t7 , -1
la $a0 , 0($t7)
li $v0 , 1
syscall
la $a0 , str
li $v0 , 4
syscall
addi $s2 , $s2 , 1 #loop
addi $s1 , $s1 , -1 #swift
beq $s2 , 8 , exit
j loop
B: .byte 3
B1: .byte 1
str: .asciiz "\n"