关于asm 8086中的计算器 - 2个问题

时间:2016-04-23 14:05:12

标签: assembly x86-16

对于我的总决赛项目我正在组装计算器 - 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。

1 个答案:

答案 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寄存器!
  • 从端口60h获取的数据不是ASCII码,而是扫描码。当您编写类似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