我是新来的汇编语言,我收到一个奇怪的错误。该程序应该显示用户输入的整数的4个最低有效位。它适用于大于8的数字,但对于小于或等于8的数字,它会输出数字。对于8输出8000而不是1000,五输出0401.我不明白为什么,有人可以帮忙吗?汇编语言奇怪的错误
.data
inPrompt: .asciiz "Enter an integer: "
outLab: .asciiz "Least significant 4 bits of int entered are "
############################ code segment ################################
.text
.globl main
main:
li $v0, 4
la $a0, inPrompt
syscall # print input prompt
li $v0, 5
syscall # read input integer
move $t0, $v0
li $v0, 4
la $a0, outLab
syscall
li $v0, 1
andi $a0, $t0, 8
syscall
andi $a0, $t0, 4
syscall
andi $a0, $t0, 2
syscall
andi $a0, $t0, 1
syscall
##########################################################
li $v0, 10 # exit
syscall
我试图实现你的第一个建议,但我只允许使用16行代码,我无法管理它。因为如果它是零,我需要输出这两个,所以我需要两个分支?对于你的第二个建议,你是指sll还是sra? – 2013-03-04 06:47:49
@EmilyAnnHall a)如果它是0,它也输出给定的建议片段;不需要'else':在这两种情况下我们输出,唯一的区别是,如果零,我们跳过设置值为1. b)第二个建议意味着'SRL',即右移逻辑(尽管因为我们只有正值,'SRA'会有同样的效果)c)保持东西在16行以下,请参阅编辑。 – mjv 2013-03-04 07:11:48
你的第二个建议完全奏效!你真了不起,我真的很感谢你的帮助。 – 2013-03-04 07:21:27