【问题标题】:how to limit the input given by user in asm8086如何限制用户在asm8086中给出的输入
【发布时间】:2016-12-11 00:54:44
【问题描述】:

我编写了一个代码来根据用户给出的数字生成斐波那契序列元素,它工作正常,但我想让用户输入一个 [1-25] 范围内的数字,如果用户输入任何其他数字,它应该给他一个警告,让他在这个范围内重新输入一个合适的数字..所以我做了这部分代码来继续这个,但我仍然有一个问题,无论数字是什么,大于或小于 25 代码都有效无论如何..这是我实现这一点的代码的一部分:

main proc

mov   ax,@data       ; set up data segment
mov   ds,ax

mov   ah,9              ; send message with instructions for user
mov   dx,offset msg1
int   21h            


call keyin          ;gets user input

SUB AL, 48      ;changes ASCII value into numeric value for further processing
MOV AH,0
MOV num1 , AX       ;saves user input to variable num1

call keyin        ;gets user input

SUB AL, 48      ;changes ASCII value into numeric value for further processing
MOV AH,0
MOV num2 , AX       ;saves user input to variable num2, so now we have both digits


CHECKINPUT:

CMP AX,25
JAE WARNING 
JMP STEP1

WARNING:

mov   ah,09              
mov   dx,offset msg4
int   21h
JMP CHECKINPUT 
  • 顺便说一句,我正在使用 emu8086
  • here 是我的代码(如果需要)

谢谢

【问题讨论】:

  • "BTW" 不要创建重复的用户帐户。无论如何,使用模拟器单步执行代码,您会看到错误。
  • 抱歉,我非常需要完成这段代码,所以我这样做了...
  • 我多次使用单个步骤,但最后我什么也没得到:/ .. 任何帮助!
  • 好的,你知道检查输入有问题。在cmp ax, 25 处单步执行代码(或放置断点)。然后检查AX的值是否正确。你会看到它没有。然后向后工作,看看它是如何设置的,以及为什么它是错误的。
  • 仍然无法解决错误,非常感谢您的指导:)

标签: assembly input x86-16 emu8086


【解决方案1】:

您放错了校验码!
step1 计算必须在对数字进行额外检查之前完成。

STEP1:
    ...
CHECKINPUT:
    mov     ax, input
    CMP     AX,25
    JA      WARNING 

如果有效范围为 [1,25],您不会使用 jae 而是使用 ja 发出警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 2013-03-27
    • 2012-04-25
    • 2012-05-03
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多