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

    Join Date
    Jul 2005
    Location
    Ontario, Canada
    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. #2
  3. No Profile Picture
    Contributing User
    Devshed Intermediate (1500 - 1999 posts)

    Join Date
    Feb 2004
    Location
    San Francisco Bay
    Posts
    1,939
    Rep Power
    1313
    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?

IMN logo majestic logo threadwatch logo seochat tools logo