Arrays 增加程序集8086中数组中的计数

Arrays 增加程序集8086中数组中的计数,arrays,assembly,count,x86-16,counting,Arrays,Assembly,Count,X86 16,Counting,这会把字母“a”放在数组的第一个位置吗? 我试图将与“a”对应的ASCII数增加1,因此在数组freq+1中的97行。如何更改代码以执行此操作 *基本上,我尝试使用一个数组来存储在浏览文件时遇到的所有字符的频率计数 这会把字母“a”放在数组的第一个位置吗 是(实际上在第一个元素的较低字节,因为freq是一个单词数组) 我试图将与“a”对应的ASCII数增加1,因此在数组freq+1中的97行 或者如果您在al中有字符: mov bx,'a'*2 inc word ptr [bx+si] 如果允

这会把字母“a”放在数组的第一个位置吗? 我试图将与“a”对应的ASCII数增加1,因此在数组freq+1中的97行。如何更改代码以执行此操作

*基本上,我尝试使用一个数组来存储在浏览文件时遇到的所有字符的频率计数

这会把字母“a”放在数组的第一个位置吗

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

我试图将与“a”对应的ASCII数增加1,因此在数组freq+1中的97行

或者如果您在
al
中有字符:

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

如果允许80386指令,您可以将
xor bh,bh
mov bl,al
替换为
movzx bx,al

好的,我理解您的回答,对于我的问题,我直接提供了字母“a”,但是如果我要实现一个循环,其中下一个字符放在寄存器al中,则此代码不适用。我想做=>mov bx,(al中字符的ASCII码)*2。为什么是*2?这不是对数组中的第194位而不是第97位执行+1吗?您已将
freq
声明为一个单词数组(
dw
)。因此每个元素是2个字节,因此索引必须按2缩放。如果字符位于
al
中,请参阅我的更新答案,了解如何执行此操作。
mov bx,'a'*2
inc word ptr [bx+si]
xor bh,bh   ; clear bh
mov bl,al
add bx,bx   ; scale index by 2
inc word ptr [bx+si]