Assembly 将inc与esi一起使用时,寄存器错误使用无效

Assembly 将inc与esi一起使用时,寄存器错误使用无效,assembly,x86,masm,Assembly,X86,Masm,我有以下汇编代码: .data string_2 BYTE "Please enter the name of the file:",0 filename BYTE 80 DUP(0) fileHandle HANDLE ? byteCount DWORD ? ; holds counter buffer BYTE BUFFER_SIZE DUP(?) freq_array dw 256 dup(0) ;ARRAY OF FREQUENCIES OF EACH ASC

我有以下汇编代码:

.data
string_2 BYTE "Please enter the name of the file:",0
filename    BYTE 80 DUP(0)
fileHandle  HANDLE ?
byteCount DWORD ? ; holds counter
buffer BYTE BUFFER_SIZE DUP(?)
freq_array dw 256 dup(0) ;ARRAY OF FREQUENCIES OF EACH ASCII CHARACTER. 


.code
mov edi,OFFSET buffer 
mov ecx,LENGTHOF buffer

L1: 
mov  esi, offset freq_array
mov  al, [edi] 
mov  ah, 0       
shl  ax, 1            
add  si, ax  
inc  [ word ptr esi ]
add edi,TYPE BYTE 
loop L1
缓冲区包含作为字符串读入的文本文件的内容。我已经测试了那个部分。 所以不要把它放在这里。我在第行收到错误
寄存器的无效使用

inc[word ptr esi]
。我该如何解决这个问题?

也许
inc-word-ptr[esi]
有效吗?谢谢。这似乎奏效了。我还有一个疑问。如何打印freq_数组的值。有捷径吗。还是我必须把它一个一个地打印出来one@bittu:您可以在其上循环,就像在C中一样。您可以使用
movzx-eax,byte-ptr[edi]
将字节零扩展到dword。然后
添加单词ptr[freq_array+eax*2],1
。在32位代码中,您可以利用其更强大的寻址模式(与16位相比)。还请注意,如果
freq_array
跨越64k边界,则代码将不安全
add si,ax
可以在不执行进位的情况下包装到ESI的高位。