2010-11-10 422 views
0

我想在Assembly中創建一個程序,它將從鍵盤讀取一個字符串,然後將每個字母轉換爲另一個表格,然後將其存儲在[201]的表格中。在[200]我有一個字符串的char計數器。以下是我所做的:彙編程序

mov [0300h],88h  ;thats the table that I want to convert to.(only 3 digits) 

mov [0301h],83h 

mov [0302h],0CEh 


mov ah,01h      ;insert string 
int 81h     


mov di,01h     

start: 
mov al,[di] 
cmp al,00h   ;not 
    sure about that. last char of string 
    should be /0. 

je end     
mov [0200h],di ;char counter.  
inc di 

mov bx,0300h  
sub al,041h 
    ;convert char 
xlat 
mov [di+01ffh],al 
    ;store converted char to 201... 

loop start 

end: 

**int 81h** 
;reads chars until <cr> from keyboard.Starting address of input data buffer    ES:DI+1 

由於某些原因,在我的程序結束時DI值爲0900。任何想法,爲什麼它不工作,或任何想法,我可以通過任何其他方式?非常感謝。

回答

0
mov al,[di] 

不應該在這裏向輸入緩衝區添加偏移量嗎?

+0

你可以舉個例子PLZ? thnx – John 2010-11-10 22:21:44

+0

你的代碼假設你的輸入緩衝區從ds開始:[1]。這是真的嗎? – 2010-11-11 00:01:55

+0

我的輸入始於ES:di + 1 – John 2010-11-11 08:51:39

0

它打破洙..看看本作爲例(它認爲FN int81的1讀取一個char不知道實際的界面。):

some_table: db 88h, 83h, CEh 
result:  db ??(128) // can't recall the syntax 

push ds 
pop es 
lea bx, some_table 
lea di, result // for stosb to work 

start: 
mov ah,01h      ;//insert string 
int 81h     
cmp al, 0Ah // enter in linux (or it's 0Dh?) 
je end     
sub al, 'A' // what do you mean by "convert to char"? it's already a char. and what happens if it's larger than 'C'? 
xlat 
stosb 
jmp start 
end: 
+0

hmmm。我只是不知道如果bgc8088可以支持這種桌子。我想要轉換字符,我做了一個電路,將顯示「轉換」的字符。我的A將是88h而不是41h,依此類推。 – John 2010-11-10 22:41:09

+0

int 81不帶一個字符。它讀取字符,直到從鍵盤「enter in bgc8088」 – John 2010-11-11 09:12:52

+0

,所以我不知道我是否可以使用stosb。 – John 2010-11-11 10:13:18