首页 > 解决方案 > 使用 mips 交换奇偶位

问题描述

要求用户输入一个无符号数字并读取它的程序。然后将奇数位置的位与偶数位置的位交换并显示结果数字。例如,如果用户输入数字 9,其二进制表示为 1001,那么位 0 与位 1 交换,位 2 与位 3 交换,产生二进制数 0110。因此,程序应显示 6 .

这只是将十进制转换为二进制

################### DATA SECTION #############################

.data

str1: .asciiz "Enter an integer please: "


.align 2

################## CODE SECTION #############################

.text

.globl main



main:

# ask and store the first number

li $v0, 4

la $a0, str1

syscall

li $v0, 5

syscall

move $a0, $v0



jal print_bin



print_bin:



add $t0, $zero, $a0 # put our input ($a0) into $t0

add $t1, $zero, $zero # Zero out $t1

addi $t3, $zero, 1 # load 1 as a mask

sll $t3, $t3, 3 # move the mask to appropriate position

addi $t4, $zero, 4 # loop counter

j loop



loop:



and $t1, $t0, $t3 # and the input with the mask

beq $t1, $zero, print # Branch to print if its 0



add $t1, $zero, $zero # Zero out $t1

addi $t1, $zero, 1 # Put a 1 in $t1

j print





print: 

li $v0, 1

move $a0, $t1

syscall



srl $t3, $t3, 1

addi $t4, $t4, -1

bne $t4, $zero, loop



move $a0, $v0

标签: assemblymips

解决方案


推荐阅读