### Thread: Mathematical Assembly Language Program (Help).

1. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Jul 2005
Location
Posts
6
Rep Power
0

#### Mathematical Assembly Language Program (Help).

Hey,

I'm writing assembly language code to run this pseudocode:
Code:
***************************************************
* This program will run the structure:                  *
*                                                                     *
* while (a <= 10)                                              *
* {                                                                   *
*     if ((a +b) >= c)                                          *
*     {                                                               *
*            a = a - b                                             *
*            c = c - 1                                             *
*      }                                                              *
*      else                                                          *
*      {                                                              *
*            a = a + b                                            *
*            c = c + 1                                            *
*      }                                                              *
*            c = c + 10                                          *
* }                                                                   *
* with starting values of a = -2, b = 4, c = 0        *
***************************************************
Here is what I have written so far:

Code:
* This program will run the if structure:

*data location starts at \$8000
ORG \$8000
AVAL FCB -2
BVAL FCB 4
CVAL FCB 0
CINC FCB 10

*main program starts at \$9000
ORG \$9000
LDS #\$01FF	; initialize SP
LDAA AVAL	; load the A register with the value of A
LDAB CVAL	; load B with the value of C
ADDA BVAL	; add B to A and store the result in A

WHILE	CMPA #10	; subtract 10 from value of A (running total)
BLT  IF		; branch to IF if A is less than 10

IF	CMPA CVAL	; compare (A + B) to C
BLT  ELSE	; branch to the else part if (a + b) < c
SUBA BVAL       ; a = (a + b)-b
SUBA BVAL	; a = a - b
STAA AVAL	; save the A value
DECB		; c = c - 1
BRA NEXT	; skip the else code

ELSE	STAA AVAL	; a = a + b
INCB		; c = c + 1
NEXT	ADDB CINC	; c= c + 10
ENDWHL	BRA WHILE	;loop back up

DONE	BRA DONE	; stupid, but necessary
END		; pseudo-op, tells the assembler that we're done
However, when I put it through the assembler, it doesn't run correctly.

Can anybody offer some suggestions to help me along?

Thanks
2. No Profile Picture
Contributing User
Devshed Intermediate (1500 - 1999 posts)

Join Date
Feb 2004
Location
San Francisco Bay
Posts
1,941
Rep Power
1314
I've never seen that language before, so I'm having to assume some things. I think I see some errors already:

- The "BLT IF" seems to be a no-op: if true, it goes to IF (the next instruction), and if false, it just goes to the next statement (which happens to be IF), right? I think what you really want to do is branch to DONE if A > 10.
- After the first pass through the "if", register A no longer contains A + B, but you continue to use it as such.
- I don't understand "DONE BRA DONE". Isn't that a one-instruction infinite loop?