We are just beginning to study branch instructions, but they are actually quite easy to understand. In a branch instruction, a test is made for a certain condition, normally comparing two registers or perhaps determining the value of a single register. An example is bgez $t1,next. This branch instruction instructs the computer to evaluate the contents of the register $t1. If the contents are greater than or equal to 0 (≥ 0), then the computer immediately goes to the instruction labeled "next," wherever it is in the program, and executes it, continuing to execute instructions from that point. If the contents of $t1 are less than zero, the computer simply executes the instruction that follows the branch instruction.
Let’s use that simple branch instruction to do the following:
Load the two words declared in the data statement shown to the right into registers, and then determine if either is ≥ 0. If either number is ≥ 0, print it out using syscall 1 (you do not have to include a leader of any sort). If a number is negative, do not print it out. End the program with a syscall 10. Note: you can declare words as either decimal or hexadecimal. SPIM understands both number systems.

If only one number is printed out, which number is it?

Respuesta :

Answer:

Code is given as below:

Explanation:

globl main

   main:

       li $v0, 4      

       la $a0, prompt

       syscall

       li $t0, 0      #count for the loop to get two integers

   getnum:

       li $v1, 5   #read integer

       syscall

       addi $t0, $t0, 1    #increment the counter

       ble $t0, 2, getnum        

   printnum:  

       bgez $v0,syscall1

       bgez $v1,syscall1        #load address of num to print

       

       li $v0, 10

       syscall

.data

   data1: .word 0x63f2e3

   data2: .word 0x9100ab72

   prompt:

       .asciiz "Enter 2 numbers:"

ACCESS MORE