2016-04-23 14 views
1

私の最後のプロジェクトのために電卓に取り組んでいます - Tasm- 8086、今まではすべてがうまくいっていましたが、今は苦労していました。入力。 すべての数字とアクション(*/+ = ^)が配列になるようにしました。 しかし、今のところちょっと止まった原因は、最初の数字が1,2,3,4か5桁かどうかをチェックする方法を知らないからです。私はenterdの2番目のnumをチェックする必要があります。最初の質問だった 2番目の質問は、誰かがキーボードとマウス入力を一緒に組み合わせる方法を知っているということですか? 現時点では、マウス入力は絶対にうまく動作していますが、キーボードで苦労しています。電卓のasm 8086 - 2質問

私はキーボードとマウスで苦労しているprocのいくつかを取り出しました。 (キーボード厥):

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 

プリントには、私が必要とする印刷のPROCに正しい色で呼ばれるラベルです。続きは、この部分に移動して、ボタンescが入力されたかどうかを確認するラベルです。

ありがとう。 ところで私の言語idkについては申し訳ありません。

+0

。これを行うには、ASCII小数点から2進数に変換するのが良い方法です。例えば。 「5」を押すと記憶された値は「5」になり、「6」を押すと記憶された値は「56」になります。 –

+0

私はそれを得ることはできません..なぜそれが重要なのbinariまたはasciまたは小数点 – Ido

答えて

1

あなたが書いた実際のコードを見ることなく、最初の質問に答えるのは難しいです。 2番目の質問については

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