2017-10-12 27 views
0

내 코드에 표시된대로 사용자 입력을 얻을 수 있었지만 필자는 가장 작은 숫자를 얻지 못했습니다. 고마워요 ...루프를 사용하지 않고 MIPS에서 세 정수의 가장 작은 값을 결정하는 방법

다음은 지침입니다.

"사용자로부터 3 개의 32 비트 부호있는 정수를 읽는 어셈블리 프로그램을 작성하십시오.이 세 가지 숫자 중 가장 작은 것을 판별하고 결과를 표시합니다. 루프를 사용하지 마십시오. 입력 된 각 정수에 대해 사용자에게 프롬프트하십시오."

.data 
Msg1: .asciiz "Enter the first integer: " 
Msg2: .asciiz "Enter the second integer: " 
Msg3: .asciiz "Enter the third integer: " 
Msg4: .asciiz "the the smallest numberis: " 

.text 
    # Print the first message 
li $v0, 4 
la $a0, Msg1 
syscall 

# Prompt the user to enter the first integer 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t0, $v0 

# Print the second message 
li $v0, 4 
la $a0, Msg2 
syscall 

# Prompt the user to enter the second integer 
li $v0, 5 
syscall 

# Store the first integer in $t1 
move $t1, $v0 

# Print the third message 
li $v0, 4 
la $a0, Msg3 
syscall 

# Prompt the user to enter the third interger 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t2, $v0 

# Determine the smallest Number 
slt $s0, $t1, $t0 
beq $s0, $zero, L1 
+0

분기 할 수 있습니까? 그렇다면 이동 명령을 조건부로 건너 뛰고 처음 두 개 중 최대 값을 얻은 다음 다시 수행하는 것이 매우 간단합니다. 그렇지 않으면 분기없는 최소/최대 시퀀스를 찾습니다. (MIPS가'cmov '을 가지고 있거나 SUB/SRA/AND에서 그것을 빌드해야만한다면 IDK). –

+2

두 개의 숫자에 대해이 작업을 수행 할 수 있습니까? 그런 다음 2에서 가장 작은 값을 얻은 후 결과를 인쇄하는 대신 2에서 다시 작게 (이전 결과 대 제 3의 값에서 가장 작음) 3에서 가장 작습니다. 단지 몇 줄의 코드 일뿐입니다. – Ped7g

+0

min (a, b, c) = min (min (a, b), c) – Tommylee2k

답변

0

답장을 보내 주셔서 감사합니다. 결국 가장 작은 숫자를 결정할 수있었습니다. 이 코드는 MARS에서 완벽하게 작동합니다.

.data 
Msg1: .asciiz "Enter the first integer: " 
Msg2: .asciiz "Enter the second integer: " 
Msg3: .asciiz "Enter the third integer: " 

.text 
    # Print the first message 
li $v0, 4 
la $a0, Msg1 
syscall 

# Prompt the user to enter the first integer 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t0, $v0 

# Print the second message 
li $v0, 4 
la $a0, Msg2 
syscall 

# Prompt the user to enter the second integer 
li $v0, 5 
syscall 

# Store the first integer in $t1 
move $t1, $v0 

# Print the third message 
li $v0, 4 
la $a0, Msg3 
syscall 

# Prompt the user to enter the third interger 
li $v0, 5 
syscall 

# Store the first integer in $t0 
move $t2, $v0 

# Determine the smallest Number 
blt $t0, $t1, L0 
blt $t1, $t0, L3 


li, $v0, 10 
syscall 

L0: 
    blt $t0, $t2, L2 
    blt $t2, $t0, L3 

L2: 
    li $v0, 1 
    move $a0, $t0 
    syscall 
    li, $v0, 10 
    syscall 

L3: 
    blt $t1, $t2, L4 
    blt $t2, $t1, L5 

L4: 
    li $v0, 1 
    move $a0, $t1 
    syscall 
    li, $v0, 10 
    syscall 

L5: 
    li $v0, 1 
    move $a0, $t2 
    syscall 
    li, $v0, 10 
    syscall 


li, $v0, 10 
syscall 
+0

힌트 : 전체 2-syscall 블록을 복제하는 대신'move' 명령어를 중심으로 분기하고'li' /'syscall' 블록을 마지막에 한 번 표시하도록하는 코드가 훨씬 적습니다. '$ a0'의 오른쪽 정수. –