我已经试着弄清楚这个问题有一段时间了。在我正在使用的程序中,作为示例,我使用以下命令进行键盘输入:
MOV AH,2h;
INT 21h;基本上,在从控制台返回一个字符之后,我尝试将该值输入到以AL作为数组索引的MOV中,如下所示:
MOV dl,array[[AL]]在我的简单示例中,我提取了一个ASCII值,并根据我生成的表(基本上只是一个任意练习)返回下一个字符。
我已经尝试过arrayAL、array[AL],可能还有十几个其他的东西。当我在MASM中汇编我的代码时,我得到这个错误:
**error A2031: Must be index or base register**AL是否不返回存储在AL寄存器/指针中的值?
我该怎么做呢?
发布于 2011-02-13 09:36:49
您需要在[]中使用索引或基址寄存器。在8086模式下,仅有两个基址寄存器为BX和BP,而仅有两个索引寄存器为SI和DI。所以你需要做一些类似的事情:
mov BH,0;
mov BL,AL
mov DL,array[BX];而不是尝试将AL直接用作基址寄存器。或者,您可以尝试使用XLAT指令,该指令大致相当于mov AL,[BX+AL]
发布于 2011-02-13 09:38:08
正如错误所说,您需要使用索引寄存器,例如SI、DI或基址寄存器BX。如果我没记错的话,这里使用其他寄存器需要386模式。
此外,当用作索引时,请记住,如果数组元素不是字节,则可能需要调整数组元素的大小(尽管在本例中可能使用字节)。
我猜索引语法应该是array[...],但我上次用汇编语言写东西已经有5年多了。
还有一件事: AH不应该是01h吗?
http://spike.scu.edu.au/~barry/interrupts.html#ah01
https://stackoverflow.com/questions/4981820
复制相似问题