【问题标题】:Assembly: Error when attempting to increment at array index程序集:尝试在数组索引处递增时出错
【发布时间】:2015-05-12 00:50:45
【问题描述】:

这是一小段汇编代码 (TASM) 的 sn-p,我只是尝试在数组的当前索引处增加值。这个想法是“freq”数组将存储一个数字(DWord 大小),表示该 ASCII 字符在文件中出现的次数。为了保持代码简短,“b”存储当前正在读取的字节。

Declared in data segment
freq DD 256 DUP (0)
b    DB ?
___________
Assume b contains current byte
mov bl, b
sub bh, bh
add bx, bx
inc freq[bx]

我在编译时在包含“inc freq[bx]”的行收到此错误:ERROR 操作或指令的参数大小非法。

非常感谢任何见解。

【问题讨论】:

    标签: arrays assembly x86 tasm


    【解决方案1】:

    没有inc 可以在 16 位模式下增加 dword。您将不得不从 add/adc 合成它,例如:

    add freq[bx], 1
    adc freq[bx + 2], 0
    

    您可能需要添加大小覆盖,例如 word ptr 或将您的数组定义更改为 freq DW 512 DUP (0)。

    另请注意,您必须将索引缩放 4,而不是 2。

    【讨论】:

    • 将数组定义更改为freq DW 512 DUP (0) 就可以了。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2020-08-25
    • 2012-05-09
    • 2017-12-13
    相关资源
    最近更新 更多