2015-10-22 135 views
-2

定義一個具有十個16位字的數組。讀取包含鍵盤中任何字符的字符串的值。之後,字符串應該被轉換,以便它應該只保留小寫字母(a - z)。
然後,將字符串輸出到屏幕上,並將修改後的序列的元素數存儲在寄存器CX中。使用數組彙編程序8086

這是我的代碼:

data segment 
array dw 10 dup (?) 
i db ? 
ends 

stack segment 
dw 128 dup(0) 
ends 

code segment 

start: 

mov i, 0d  
mov bx, 0h 
insert: ;inserting elements in array work only for db, but i need to work for dw 
mov ah, 01h 
int 21h 
mov array [bx], al 
inc bx 
inc i 
cmp i,4d 
JNE insert 

mov bx, 0h 
mov cl, i 
go: ; loop for finding numbers or same character who are not lowercase letters, deleting, 
     ; and moving lowercase letters on their positions 
mov ax, array[bx] 
cmp ax, 97d 
jl notchar 
cmp ax, 97d 
jg notchar 

loop go 

mov ax, 4c00h 
int 21h 

ends 

end start 

我的問題是,它不正確地dw工作。有誰能夠幫助我?

+1

谷歌的喲」的朋友。首先發布你的代碼。 – Downvoter

+0

我發佈我的代碼在我的問題幫助我...請 – Emy

+3

什麼是不工作?你怎麼知道它不起作用?你的意思是什麼不能用'dw'? – Downvoter

回答

2

沒有什麼能夠代替數組中的字節來存儲單詞。

insert: ;inserting elements in array work only for db, but i need to work for dw 
    mov ah, 01h 
    int 21h 
    mov ah, 0   ;ADD THIS LINE 
    mov array [bx], ax ;CHANGE AL TO AX 
    add bx, 2   ;ADD 2 BECAUSE THE ARRAY CONSIST OF WORDS 
    inc i 
    cmp i, 4 
    JNE insert 

你的程序的第二部分需要做一些修改:

mov ax, array[bx] ;USE ONLY AL, AH=0 
    cmp al, 97   ;ASCII FOR 'a' 
    jb notchar   ;USE UNSIGNED COMPARISON, SO USE 'JB' 
    cmp al, 97+25  ;ASCII FOR 'z' 
    ja notchar   ;USE UNSIGNED COMPARISON, SO USE 'JA'