2013-02-25 152 views
0

我想在Mips中显示“Hello World”(来自互联网上的一个例子),看看它是如何工作的,但是我最终出现了错误。我首先出现以下错误: “spim:(parser)标签在文件C的第6行第二次定义:程序文件(x86) main:#执行从标签”main“开始” ^ 要修复它,我重新初始化并重新加载。然后我运行Qtspim,结果出现以下错误:“0x00400028/Notepad ++/test.asm [0x00400028] 0x3c010000 lui $ 1,0 [Greetings]; 8:la $ a0,Greetings#指令引用未定义符号字符串被打印成$ a0Mips:“Hello World”遇到错误

有人可以请解释是什么导致第一个和第二个错误?我只是想测试我在网上找到的代码,并理解Qtspim如何工作,然后再尝试我的任务。在Windows 08.您的帮助将非常感激。贝娄是代码。

# Program: Hello, World! 
.data    # data declaration section; specifies values to be stored 
        # in memory and labels whereby the values are accessed 
Greeting: .asciiz "\nHello, World!\n" 
.text    # Start of code section 
main:    # Execution begins at label "main" 
li $v0, 4   # system call code for printing string = 4 
la $a0, Greetings # load address of string to be printed into $a0 
syscall    # call operating system to perform operation; 
        # $v0 specifies the system function called; 
        # syscall takes $v0 (and opt arguments) 

        #This illustrates the basic structure of an assembly language program. 
+0

我不知道第一个错误是什么,但第二个意思是没有叫* Greetings *的标签。我明白你的意思是*问候*。 – m0skit0 2013-02-25 09:18:12

+0

Oups !!!!我没有看到那个!我修复了它,但现在,我有另一个错误:“尝试在0x00400030处执行非指令”。我知道它与内存位置有关。但我无法弄清为什么我有这个新错误。 – T4000 2013-02-25 09:22:25

+0

如果你不断改变问题,我们永远不会结束。 – m0skit0 2013-02-25 16:37:29

回答

0

你打成字符串Greeting但称其为Greetings你代码,无法识别。

此外,您似乎永远不会从syscall之后的函数(例如jr $ra或类似函数)返回,因此在未定义的数据上继续执行。

+0

我不确定是否需要添加我自己的代码行,但是这里是我找到要测试的代码的位置:http://courses.cs.vt.edu/~cs2505/summer2010/Notes/pdf /T21.IntroMIPSAssembly.pdf我所做的只是复制,粘贴和运行它。 – T4000 2013-02-25 09:26:28

+0

你必须从函数返回(或不太可能执行'syscall'来暂停) – MByD 2013-02-25 09:29:10

+0

我在系统调用后添加了jr $ ra来检查。这次没有错误,除了程序不显示“Hello World”。我在重新运行Qtspim后显示了一次,然后再次出现错误“尝试在0x00400030处执行非指令”。 – T4000 2013-02-25 09:47:06