2016-04-23 51 views
1

爲我的壓軸項目即時通訊工作在裝配計算器 - Tasm- 8086,直到現在一切都變好了,但現在我有困難時間弄清楚如何「知道」的數字是在輸入。 我做到了讓所有的數字和動作(*/+ = ^)都進入數組。 ,但現在我有點卡住,因爲我不知道如何檢查,如果第一個數字是 - 1,2,3,4或5位數字,直到行動。然後我還需要檢查第二個輸入的數字。 這是第一個問題。 第二個問題是,如果有人知道如何將鍵盤和鼠標輸入結合在一起? 目前我的鼠標輸入工作絕對好,但即時通訊與鍵盤困難。關於計算器在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和在正確的顏色標籤。而continuethepros是一個標籤,在這部分mov,然後檢查按鈕esc是否輸入..

謝謝。 順便說一句,對不起我的語言idk,如果我拼寫正確的一切。

+0

你需要存儲的數字的地方,直到你需要他們。這樣做的一個好方法是將它們從ASCII十進制數字轉換爲二進制數字。例如。所以如果按'5''',則存儲值變爲'5',如果'6'被按下,則存儲值變爲'56',依此類推。 –

+0

我不明白它..爲什麼它的重要,如果它的binari或asci或十進制 – Ido

回答

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'這樣的指令時,彙編程序將用ASCII碼替代'X',但您需要掃描代碼!

這是怎麼了:

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