Переназначение вашего кода с адресами (и некоторыми комментариями) упрощает определение потенциальных проблем:
0000 LDWA 0xFFFF, i ; set A to -1, why?
0003 DECO 0xFFFF, i ; decimal output -1
0006 LDBA 0xFC15, d ; get input character
0009 STWA 0x001D, d ; store to variable
000c STBA 0xFC16, d ; output character
000f LDWA 0x001D, d ; get character back
0012 SUBA 0x001F, d ; presumably subtract 0x20
0015 ORA 0x0021, d ; not sure what this intends
0018 STBA 0xFC16, d
001b STOP ; 1-byte operation
001c .BLOCK 2 ; two arbitrary bytes.
001e .WORD 20 ; takes two bytes 0x0014
0020 .WORD 0x0020 ; 0x0020
.END
Исходя из этого, вы, похоже, использовали неправильные адреса для прямого храненияи поиск, возможно, потому что вы думаете, STOP
является двухбайтовой операцией, но я не уверен.
В дальнейшем вы сможете избавиться от лишнего кода и убедиться, что вы используете только заглавные буквы в нижнем регистре. действуя только в диапазоне (включительно) a..z
. Примерно так будет хорошим началом:
asc_a: .equate 0x0061 ; Lower case A.
asc_z: .equate 0x007a ; Lower case Z.
sub_val: .equate 0x0020 ; Difference from upper to lower.
in_char: .equate 0xfc15 ; Address to get char from user.
out_char: .equate 0xfc16 ; Address to put char to user.
main: deco 0xffff,i ; Decimal output -1.
ldba in_char,d ; Get input character.
cpwa asc_a,i ; If outside a..z, do not translate.
brlt no_xlat
cpwa asc_z,i
brgt no_xlat
suba sub_val,i ; Convert to upper (61..7a -> 41..5a).
no_xlat: stba out_char,d ; Output character.
stop
Там вы увидите, что нам на самом деле не нужно хранилище данных, так как мы можем просто использовать немедленный операнды для констант и аккумулятор для самого символа.
Если вам нужно сделать хранение данных, я бы хотел разместить его в фиксированном месте, чтобы изменения кода не влиялиэто что-то вроде:
0000 start: br main
0003 some_data: .block 0x20
0023 more_data: .word 0xdead
0026 more_data: .word 0xbeef
0029 main: <<Code goes here>>
Таким образом, никакие изменения в коде не влияют на ваши переменные, что будет весьма удобно, если вам придется вручную кодировать свои вещи, а не полагаться на достойного ассемблера, который можетотработать символы автоматически.