【问题标题】:Assembly code can't handle negative integers汇编代码不能处理负整数
【发布时间】:2016-03-01 18:22:19
【问题描述】:

我的汇编代码由两部分组成,一个叫 A.s,另一个叫 B.s。

A.s 是我的“主要”,我将输出流式传输到终端。

B.s 不能处理负整数,还会显示两次'Welcome msg'。

这里是代码;

B.s 代码

some code above this-----------------
LoopNextInt:
    movq    $buffInPtr, %r10
    movq    $buffIn, %r9
    addq    (%r10), %r9
    xorq    %r8, %r8

    addq    (%r9),%r8

    cmpq    $63, (%r9)
    je  inImage

    cmpq    $' ', (%r9)
    je  retNeg

    cmpq    $'-', (%r9)
    je  negSignFound

    cmpb    $'0', (%r9)
    jl  retNeg

    cmpb    $'9', (%r9)
    jg  retNeg

    movzbq  (%r9),%r11

    imulq   $10, %rax
    subq    $'0', %r11  #asci -> dec tal
    addq    %r11, %rax
    //addq  $1, (%r10)
    incq    buffInPtr
    //addq  $1, %r9
    incq    buffIn

    jmp     LoopNextInt

some code below this-----------------
then comes this ---------------     
fillOutBuffWithChars:
    movq    $buffOutPtr,%r9
    cmpq    $63, (%r9)  
    je      outImage                
    movzbq  (%rdi), %r8             
    movb    %r8b, (%r10)                
    cmpq    $0, (%rdi)              
    je      zeroInStringFoundz

    addq    $1,%rdi
    addq    $1,%r10
    //addq  $1,%r9
    incq    buffOutPtr
    jmp     fillOutBuffWithChars

zeroInStringFoundz: 
    ret

程序的测试运行;

Start. Enter 5 numbers, both negative and pos numbers.
Start. Enter 5 numbers, both negative and pos numbers.
5 1 3 6 -5        
5+1+3+6+0=15
5
125
End
Made by Jozo

我注意到,如果我使用一个较小的句子,例如“输入 5 个数字”,它不会打印出两倍。

编辑;删除了不必要的代码,以便新用户更容易看到问题。

【问题讨论】:

    标签: assembly x86-64


    【解决方案1】:

    cmpq $0, (%rdi) 应该是 cmpb $0, (%rdi) 或只是 cmp $0, %r8b,因为无论如何该字节已经加载。假设您比较的是四字而不是字节,它将找不到字符串的结尾,这会导致从 putText 内部调用 outImage,因此已经打印了文本。但随后你再次在main 中调用outImage,因此输出加倍。

    你在LoopNextInt 中遇到了同样的问题,你所有的四字比较都应该是字节大小的。事实上,negSignFound 永远不会到达,这反过来意味着 revInt 也永远不会到达。

    PS:学习使用调试器并注释您的代码。

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      相关资源
      最近更新 更多