我一直试图解决这个问题。在我正在使用的程序中,作为一个例子,我正在使用键盘输入:
MOV AH,2h;
INT 21h;
基本上,在从控制台返回一个字符之后,我试图将该值输入到一个MO中,其中AL作为数组索引,如:
MOV dl,array[[AL]]
在我的简单示例中,我正在拉取一个ASCII值并根据我生成的表格吐出下一个字符(基本上只是一个任意练习)。
我已经尝试了数组[AL],数组[[AL]],还有其他一些东西。当我在MASM中汇编代码时,我收到此错误:
**error A2031: Must be index or base register**
[AL]是否不返回存储在AL寄存器/指针中的值?
我如何使这项工作?
答案 0 :(得分:3)
您需要在[]
内使用索引或基址寄存器。在8086模式下,只有两个基址寄存器是BX和BP,而只有两个索引寄存器是SI和DI。所以你需要做一些事情:
mov BH,0;
mov BL,AL
mov DL,array[BX];
而不是尝试直接使用AL作为基址寄存器。或者,您可以尝试使用XLAT指令,该指令大致相当于mov AL,[BX+AL]
答案 1 :(得分:0)
与错误一样,您需要使用索引寄存器,如SI,DI或基址寄存器BX。如果我没记错的话,在这里使用其他寄存器需要386模式 此外,当用作索引时,请记住,如果数组元素不是字节,则可能必须调整数组元素的大小(尽管在这种情况下您可能使用了字节)。
索引语法应该是array[...]
我猜,但是自从我上次在汇编中写了一些内容以来已经超过5年了。
还有一件事:AH不应该是01h吗? http://spike.scu.edu.au/~barry/interrupts.html#ah01