|
|
|||||||||
|
|||||||||
| |||||||||
|
|
|
| |||||||||
![]() |
|
|
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
Stop making mediocre tutorials.The best tutorials are video! Camtasia Studio makes it easy to create engaging, buzz-building screen videos at any size, in any popular format. Download the free trial!
|
|
#1
|
|||
|
|||
|
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
|
|||
|
|||
|
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). |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|
|
|
|