首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NASM:验证输入

NASM:验证输入
EN

Stack Overflow用户
提问于 2018-02-01 22:15:10
回答 1查看 487关注 0票数 2

我有一个小的汇编程序,我试图读入一个整数,并验证它是否在0-100,000之间。这目前不起作用。此时,一个有效的整数(例如10)将使程序跳转到invalidInput标签,然后程序退出。

我认为这个错误的原因是由于在跳转之前的比较。用户输入的整数是否有不同的比较方式?

我认为读入的值必须更改为整数(从“字符串”转换而来?)

这是我的第一个汇编程序,所以我还在学习基础知识。

代码语言:javascript
复制
section .bss
    value: resb 4
section .data

    prompt db 'Enter a integer between [0-100000]: ', 0xa
    promptLen equ $-prompt

    invalidMsg db 'Invalid data. Integers between [0-100000] are valid. Exiting.', 0xa
    invalidMsgLen equ $-invalidMsg

section .text 
global _start 
_start:

    ; Display prompt
    mov rdx, promptLen  ; message length 
    mov rcx, prompt     ; message to write 
    mov rbx, 1          ; file descriptor for stdout 
    mov rax, 4          ; system call for sys_write
    int 0x80            ; call kernel

    ;Read the value and store it
    mov rax, 3      ; sys_read
    mov rbx, 0      ; descriptor value for stdin
    mov rcx, value  ; where to store the input
    mov rdx, 5      ; 5 bytes 
    int 80h         ; call kernel 

    mov edx, value  ; move value to a register before comparing

    cmp edx, 100000 
    jg invalidInput ; jump if the input is greater than 100000

    cmp edx, 0
    jl invalidInput ; jump if the input is less than 0


    ; Other instructions (that aren't important for now) here


invalidInput:
    mov rdx, invalidMsgLen  ; message length
    mov rcx, invalidMsg     ; message to write
    mov rbx, 1              ; file descriptor for stdout
    mov rax, 4              ; system call for sys_write
    int 0x80                ; call kernel

    mov rax, 1    ; exit
    int 0x80 

如何验证此输入?

EN

回答 1

Stack Overflow用户

发布于 2018-02-02 00:49:58

您读取的字符串必须转换为二进制值(您已经说过,您认为它应该转换为整数,这就是这样的二进制值),只有这样,您才能将其与另一个数字进行比较。因此,找到一个转换例程( web上和Stack Overflow上的许多示例)。

另外,如果您在NASM中编写

代码语言:javascript
复制
    mov edx,num

您正在将num地址加载到edx中,然后将其与100000进行比较。该地址几乎肯定比100000大。但是您希望将值存储在那里,因此:

代码语言:javascript
复制
    mov edx,[num]

再试一次。这里假设num是存储转换后的(二进制)数字的地址。正如我所说的,与字符串进行比较是无用的。

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

https://stackoverflow.com/questions/48564820

复制
相关文章

相似问题

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