首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >汇编8086 -从键盘读取一个值并将其与另一个值进行比较。

汇编8086 -从键盘读取一个值并将其与另一个值进行比较。
EN

Stack Overflow用户
提问于 2016-01-14 12:07:55
回答 1查看 320关注 0票数 1

我编写了一个程序,要求插入一个值:如果值小于或等于100,则程序退出,没有错误;否则,它打印错误消息并退出。不幸的是,当我插入大于100的值时,它从不打印错误消息,所以在转换输入刺时可能会出现一些问题,但我不知道在哪里!下面是代码:

代码语言:javascript
运行
复制
.section .data
 str:
    .ascii "Insert value:\n"
 str_len:
    .long . - str   
 err:
    .ascii "Error\n"
 err_len:
    .long . - err       
 car:
    .byte 0     
 .section .text
    .global _start  

 _start:
    movl $4, %eax     #print string with sys read
    movl $1, %ebx
    leal str, %ecx
    movl str_len, %edx
    int $0x80
    xorl %eax, %eax

 again:
    pushl %eax          #save eax on stack
    movl  $3, %eax      # read from keyboard with sys write
    xorl  %ebx, %ebx    
    leal  car, %ecx     
    mov   $1, %edx      # read 1 char at the time
    int   $0x80         
    cmp   $10, car      # if it reads '\n' then end
    je    end
    subb  $48, car      # else it converts ASCII code of char to correspondent values
    popl  %eax
    movl  $10, %ebx
    mull  %ebx          # eax = eax * 10 + car  
    addl  car, %eax 
    jmp   again 

end:
    popl %eax  
    cmpl $100, %eax
    jg error

error:
    movl $4, %eax       #print error message
    movl $1, %ebx
    leal err, %ecx
    movl err_len, %edx

exit:  
    movl $1, %eax
    xorl %ebx, %ebx
    int $0x80
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-14 12:41:45

在您的代码中有一些问题:

此指令将导致32位比较(cmpl):

代码语言:javascript
运行
复制
cmp   $10, car

因此,您需要指定使用cmpb进行8位比较。

在程序的error部分,您忘记了int $0x80,所以它不会打印任何内容。

您已经得到了一个jg error,但是error:标签就在下一行,所以不管跳转是否进行,您都会在那里结束。应该将跳转更改为jng exit

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34789257

复制
相关文章

相似问题

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