2012-09-16 67 views
0

以輸入我已經得到了需要從鍵盤輸入並打印在屏幕上,但我有問題的理解代碼的幾行程序,從大會(TASM)鍵盤

這裏代碼,

 MOV DS, AX 
     MOV ES, AX  ;Why Move AX content to ES ??? 

     MOV DX, OFFSET PNAME  ; PRINT NAME: 
     MOV AH, 09H    
     INT 21H     


     MOV BYTE PTR SNAME, 21  

     MOV DX, OFFSET SNAME  
     MOV AH, 0AH 
     INT 21H 

     MOV SI, 0002    

     LEA DX, SNAME[SI]   ; PRINT NAME ENTERED 
     MOV AH, 09H 
     INT 21H 

爲什麼我們首先移動大小字節的21到SNAME ???? 如何將鍵盤輸入中斷服務的結果自動存儲在SNAME而不是AL中?

+0

如果您調用1H(從輸入設備讀取一個字符),您會期望AL中的輸入。在這裏,您正在向標準輸出設備(9H)打印一個字符串,然後您正在從標準輸入設備(0AH)讀取一個字符串,然後打印收到的輸入。 – martincho

+0

爲什麼我們首先將21個大小字節移動到SNAME? – micheller

回答

2

檢查您最喜愛的MSDOS函數參考。

你可以找到有this

Format of DOS input buffer: 

Offset Size Description  (Table 01344) 
00h BYTE maximum characters buffer can hold 
01h BYTE (call) number of chars from last input which may be recalled 
(ret) number of characters actually read, excluding CR 
02h N BYTEs actual characters read, including the final carriage return 

所以,你可以從鍵盤到緩衝區中讀取字符的21集的最大數量。

至於「How Result of Keyboard input interrupt service automatically stored in SNAME instead of AL ???」,問題還不清楚。

+0

我的意思是說如何知道鍵盤必須分配給變量SNAME,如果有多於一個變量誰會被分配? – micheller

+0

你是怎麼意思的?您向DOS提供SNAME的地址,並使用它來寫入,不出所料,SNAME。 –