编写一个LC-3汇编语言程序,将ASCII字母从大写转换为小写。要转换的字母(ASCII)存储在内存地址0x4000中,并在下面的代码窗口中提供(字母'S')。结果应存储在寄存器6(R6)中,还应保存到存储单元0x4001中。提示:由于(符号扩展)立即数字段的长度有限(5位),因此您需要多个操作指令来执行转换。
编辑: 每次尝试运行程序时,它都会给我同样的错误,本质上说我一开始没有做任何事情,我认为我首先获取内存地址的方式存在问题,但是,我不确定。
答案 0 :(得分:0)
如果您查看此table,将会发现小写字符可以这样描述: 前3位始终为010。 其余的位表示字母。
如果用010替换前3位,则会得到小写字母。
因此,您需要用(010)替换保存“ S”的寄存器的前3位,以获得“ s”。
此代码的作用是切换第三位。大写字母因此变成小写字母。
.orig x3000
; XOR:
; field is R0
; R1 is mask of bits to toggle
; R2 is scratch
LDI R0, 0x4000 ; load whatever is at x4000 into R0
LD R1, #0b00100000 ;third bit
NOT R2, R0
AND R2, R2, R1
NOT R1, R1
AND R0, R0, R1
ADD R0, R0, R2
LDI R6, R0 ;store result in R6
STI R6, .FILL x4001; store result in x4001
HALT