Forums: » Register « |  Free Tools |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support |

New Free Tools on Dev Shed!

#1
April 11th, 2006, 08:13 PM
 mike.php
Registered User

Join Date: Jul 2005
Posts: 6
Time spent in forums: 2 h 58 m
Reputation 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
April 11th, 2006, 10:02 PM
 Lux Perpetua
Contributing User

Join Date: Feb 2004
Location: San Francisco Bay
Posts: 1,939
Time spent in forums: 1 Month 1 Week 3 h 27 m 29 sec
Reputation Power: 1312
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?

 Viewing: Dev Shed Forums > Programming Languages - More > Other Programming Languages > Mathematical Assembly Language Program (Help).