对于我的总决赛项目我正在组装计算器 - Tasm-8086,到目前为止一切都很好但现在我很难弄清楚如何知道"输入中的nums。 我做了所有数字和动作(* / + = ^)进入数组。 但现在我有点卡住因为我不知道如何检查第一个数字是1,2,3,4或5位数,直到行动。然后我还需要检查输入的第二个数字。 这是第一个问题。 第二个问题是,如果有人知道如何将键盘和鼠标输入结合在一起? 目前,我有鼠标输入工作绝对精细,但我很难用键盘。
我拿出了一些我用键盘和鼠标挣扎的过程。 (那就是键盘):
in al, 64h ; Read keyboard status port
cmp al, 10b ; Data in buffer ?
je AfterLooping ; Wait until data available
in al, 60h ; Get keyboard data
cmp al,'+'
je ToPrint
cmp al,'-'
je ToPrint
cmp al,'/'
je ToPrint
cmp al,'X'
je ToPrint
cmp al,'^'
je ToPrint
cmp al,'='
je ToPrint
cmp al,'0'
jb continuethepros
cmp al,'9'
ja continuethepros
打印是一个标签,它打印到我需要的打印过程和正确的颜色。和continuethepros是在这部分上移动的标签,然后检查是否输入了按钮esc ..
感谢。 顺便说一句 - 如果我拼写正确的话,对不起我的语言idk。
答案 0 :(得分:1)
如果没有看到您编写的实际代码,回答第一个问题就很棘手。但这是一个想法:
if number smaller than 10 --> 1 digit
else if number smaller than 100 --> 2 digits
else if number smaller than 1000 --> 3 digits
else if number smaller than 10000 --> 4 digits
else if number smaller than 100000 --> 5 digits
关于第二个问题,我可以提出这些意见:
test
位1,而不只是比较整个AL寄存器!cmp al,'X'
的指令时,汇编程序将用'X'
替换ASCII,但您需要扫描码!这是:
in al, 64h ; Read keyboard status port
test al, 10b ; Data in buffer ?
jz AfterLooping ; Wait until data available
in al, 60h ; Get keyboard data
cmp al, 2Dh ; Scancode of 'X', ASCII is 78h
je ToPrint