【问题标题】:How to compare inputs and check if a number is negative, positive or zero如何比较输入并检查数字是负数、正数还是零
【发布时间】:2018-11-09 09:50:19
【问题描述】:

我为这个问题编写了初始代码,但我希望能够将-1 作为输入。现在它只需要一个输入1- 然后显示结果。

我是汇编语言和emu8086 的新手,所以如果有人可以帮助我解决这个问题,那真的会帮助我。

到目前为止的代码如下:

.model small
.stack 100h
.data
msg db 0ah,0dh,'negative$'
msg1 db 0ah,0dh,'positive$'
msg2 db 0ah,0dh, 'zero$'
.code
main proc
    mov ax,@data
    mov ds,ax

    mov ah,1
    int 21h
    mov bl,al

    mov cl,30h


    cmp bl,cl
    jl negative
    je zero
    jg positive


    negative:
    lea dx,msg
    mov ah,9
    int 21h 
    jmp END

    zero:
    lea dx,msg2
    mov ah,9
    int 21h
    jmp END

    positive:
    lea dx,msg1
    mov ah,9
    int 21h


    END: 
    mov ah,4ch
    int 21h
    main endp
end main

【问题讨论】:

  • 请记住,int 21h, ah=1 确实返回“字符”(或在下次调用时返回扩展扫描代码时返回零),而不是整数,因此在处理时输入“-1”作为用户该服务需要两次调用,将返回值 45('-' 的 ASCII 编码)和 49('1' 的 ASCII 编码)。 PC 中没有 DOS 或 BIOS 服务来输入整数,因此您在正确的路径上,但您必须编写自己的代码来处理多字符输入,并将其从字符串转换为数字(或者您可以使用一些库,不确定emu8086默认提供什么)。
  • (因为现在您只打印负/零/正,您甚至不需要将字符串转换为整数,您当前的代码还可以,它只需要一些方法来知道有多少它应该读取的字符(如果只允许单个数字输入值,那么您需要读取一个或两个字符,这取决于是否使用了“-”......同样支持“+”也很好,即“+4 " 作为有效输入))

标签: assembly emu8086


【解决方案1】:

如果您的输入是可选前缀为- 的数字字符串,您应该检查可选的-,而不是检查ASCII 代码是> 还是30h。如果您只支持一位数字,那么看到 - 意味着您需要再读取 1 个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多