首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与MIPS一起使用scanf

与MIPS一起使用scanf
EN

Stack Overflow用户
提问于 2016-10-15 19:17:18
回答 1查看 1.4K关注 0票数 0

这个问题与我贴出的这个问题有关:Why isn't syscall working for MIPS

我试图在MIPS程序集中使用scanf从命令行读取用户输入。

这是我的代码:

代码语言:javascript
运行
复制
    .option pic0

    .rdata # read-only data

    .align  2

fromatInt:
    .asciz "%d"
    .asciz "%c"

    .align 2

resultFormat:
    .asciz  "(%d/%u)\n"

    .text
    .align  2

scanFormat:
    .word 1

    .text
    .align 2


        .global print

print:

    addiu $sp, $sp, -4  
    sw    $ra, ($sp)    

    move $a1, $a0
    la   $a0, resultFormat
    jal  printf
    move $a0, $a1

    lw    $ra, ($sp)    
    addiu $sp, $sp, +4  

    jr    $ra

    .global main

main:

    la    $a0, fromatInt
    la    $a1, scanFormat
    jal   scanf
    lw    $s0, scanFormat

    move  $a0, $s0
    jal   print

    jal exit

当我运行a.out文件时,我会得到一个分段错误。而且,当我运行gdb时,这是在逐步执行时得到的结果:

代码语言:javascript
运行
复制
Program received signal SIGSEGV, Segmentation fault.
0x77e821b0 in _IO_vfscanf_internal (s=0x77fa5bc0 <_IO_2_1_stdin_>, 
    format=<optimized out>, argptr=0x7fff6614, errp=0x0) at vfscanf.c:1826
1826    vfscanf.c: No such file or directory.

我们使用的是真正的MIPS处理器,否则我会使用syscall打印和扫描。我也不理解linux内核syscall,不足以有效地使用它。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-17 04:56:54

我无法理解如何使用此方法,但您可以轻松地使用堆栈中的空间。

代码语言:javascript
运行
复制
addiu $sp, $sp, -4

add $s0, $0, $sp

la $a0, fromatInt
add $a1, $0, $s0
jal scanf
lw $a0, 0($s0)
#----------------------
#add function calls here
#----------------------
addiu $sp, $sp, +4 #deallocate
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40063226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档