【发布时间】: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 " 作为有效输入))