Assembly 大小写转换

Assembly 大小写转换,assembly,lc3,Assembly,Lc3,编写LC-3汇编语言程序,将ASCII字母从大写转换为小写。要转换的字母(ASCII)存储在内存地址0x4000,并在下面的代码窗口中提供(字母“s”)。结果应存储在寄存器6(R6)中,并保存在内存位置0x4001中。提示:由于(符号扩展)立即字段的长度(5位)有限,您需要多条操作指令来执行转换 编辑: 每次我试着运行我的程序时,它都会给我同样的错误,本质上说我没有做任何事情,我认为我获取内存地址的方式存在问题,但是,我不确定。如果你看这个,你会发现小写字符可以这样描述: 前3位始终为010。

编写LC-3汇编语言程序,将ASCII字母从大写转换为小写。要转换的字母(ASCII)存储在内存地址0x4000,并在下面的代码窗口中提供(字母“s”)。结果应存储在寄存器6(R6)中,并保存在内存位置0x4001中。提示:由于(符号扩展)立即字段的长度(5位)有限,您需要多条操作指令来执行转换

编辑: 每次我试着运行我的程序时,它都会给我同样的错误,本质上说我没有做任何事情,我认为我获取内存地址的方式存在问题,但是,我不确定。

如果你看这个,你会发现小写字符可以这样描述: 前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

。如果需要调试帮助,请将代码复制/粘贴到问题中,使其成为一个问题。您的第二段告诉我们的信息远远不够,无法告诉您可能出了什么问题。LC-3真的从MSB开始计算位吗?除了PowerPC之外,我认为所有的ISA都是从底部开始计数的。(因此,“第五位集”总是第五位,即使您认为它是0扩展到16位或32位整数。)为什么这么复杂?不是创建
11011111
的掩码,用它清除ASCII小写位,就完成了。或者更好的方法是,首先使用倒置的遮罩。或使用异或
00100000
翻转位,而不是无条件清除位。