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的高位。