目前正在编写汇编语言分配。我最初在MARS编译器中使用伪编码对其进行编码,然后逐个翻译伪命令。目前我无法收到错误消息"无效的语言元素:[str1]"。这只是我代码的一小部分。
1|.data
2|val1: .word 1 #0x10010000
3|val2: .word 2 #0x10010004
4|val3: .word 3 #0x10010008
5|name: .asciiz "Jacob McDonald" #0x1001000C length 15
6|str1: .asciiz "Enter a number: " #0x1001001B length 17
7|newln: .asciiz "\n" #0x1001002C
8|.globl main
9|.text
10|main:
11|addi $16, $0, 23 #Load 23 into $s0
12|addi $2, $0, 4 #Set syscall command 4, print string
13|lui $1, 4097 [str1] #Load string to be printed to queue
14|ori $4, $1, 27 [str1]
15|syscall #syscall print string str1
我不确定我需要修复什么,因为如果我通过qtSpim运行代码将执行正常,但不会执行并将中继错误消息"无效的语言元素:[str1]& #34;
错误是我写第13和14行的原因吗?我是否需要解决实际的十六进制地址而不是.asciiz名称?
答案 0 :(得分:2)
错误信息很清楚:[str1]
不应该在那里。 lui
只需要两个操作数;登记册和直接登记。没有lui
形式的lui $reg, imm [foo]
。
类似地,ori
只需要三个操作数,而行尾的[str1]
是垃圾,不应该在那里。
(我假设1|
,2|
等字符串不在您的实际源代码文件中,因为这也是一个问题)