/******************************************************* * File: while_loop_ex_Delay_w_annul.m * Dir: cis235/Examples * Date: Sept 25, 2002 * Author: DSS * Computer: KUNET suns * Assembler: as under the gcc compiler * Compile: sa while_loop_ex_Delay_w_annul * Execute: while_loop_ex_Delay_w_annul * Purpose: implement a while loop branch *******************************************************/ /* While loop to implement int temp; int x = 0; int y = 0x9; int z = 0x42; temp = y; while( temp > 0 ) { x = x + z; temp = temp - 1; } */ .data x: .word 0 y: .word 0x9 z: .word 0x42 .text start: set y, %r1 ld [%r1], %r2 ! we'll use %r2 for temp set z, %r1 ld [%r1], %r3 ! we'll use %r3 for z mov %r0, %r4 ! we'll use %r4 for x add %r2, 1, %r2 ! set up for decrement top: subcc %r2, 1, %r2 ! temp - 1 --> temp bg,a top ! temp > 0 ? add %r4, %r3, %r4 ! x + z --> x set x, %r1 st %r4, [%r1] ! store x end: ta 0