2013-05-15 39 views
0
freq dw 512 dup(0) 
lea si, freq 

;Now if I move a char 'a' into al and then do: 

mov [si], al 

会将字母'a'放入数组中的第一个点吗? 我想把'a'对应的ASCII码加1,所以在数组freq +1的97行。如何更改我的代码来执行此操作?在装配中增加一个数组的数量8086

*基本上我试图用一个阵列来存储所有字符的频率计数我遇到过一个文件

回答

0

意志把字母“A”到了第一现场去的时候阵列?

是的(实际上在第一个元素的低位字节,因为freq是一个单词数组)。

我想把'a'对应的ASCII码加1,所以在数组freq +1的97行。

mov bx,'a'*2 
inc word ptr [bx+si] 

或者,如果你在al有性格:

xor bh,bh ; clear bh 
mov bl,al 
add bx,bx ; scale index by 2 
inc word ptr [bx+si] 

如果80386的指令允许你可以用movzx bx,al取代xor bh,bhmov bl,al

+0

好吧我明白你的答案,我的问题我直接提供了字母'a',但是如果我要实现一个循环,下一个字符被放置在寄存器al中,这段代码将不适用。我想要做=> mov bx,(al中char的ASCII码)* 2。另外为什么* 2?会不会给数组中的第194个位置+1而不是第97个位置? –

+0

您已将'freq'声明为单词数组('dw')。因此,每个元素都是2个字节,因此索引必须用2来缩放。如果字符在'al'中,请参阅我的更新回答。 – Michael