commit 0893e1ee17289221264a84798f0381d4405e8ab0
parent 88bbdb2d351a75fc74f33d7dd6bc0a2caca186b9
Author: Travis Geiselbrecht <geist@foobox.com>
Date: Mon, 9 Apr 2012 00:11:30 -0700
assembler: fix for indirect back label references
Diffstat:
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/assembler.c b/assembler.c
@@ -276,6 +276,7 @@ void assemble_imm_or_label(void) {
int assemble_operand(void) {
u16 n;
+
next();
switch (token) {
case tA: case tB: case tC: case tX:
@@ -303,6 +304,8 @@ int assemble_operand(void) {
if (token != tOBRACK)
die("expected [");
}
+
+ /* we must have seen a '[' */
next();
switch (token) {
case tA: case tB: case tC: case tX:
@@ -315,8 +318,7 @@ int assemble_operand(void) {
die("expected , or +");
next();
if (token == tSTRING) {
- use_label(tstring, PC);
- image[PC++] = 0;
+ use_label(tstring, PC++);
} else if (token == tNUMBER) {
image[PC++] = tnumber;
} else {
@@ -325,9 +327,11 @@ int assemble_operand(void) {
expect(tCBRACK);
return 0x10 | n;
case tSTRING:
- use_label(tstring, PC);
+ use_label(tstring, PC++);
case tNUMBER:
- image[PC++] = tnumber;
+ if (token == tNUMBER)
+ image[PC++] = tnumber;
+
next();
if (token == tCBRACK) {
return 0x1e;