ult*_*ous 1 arrays x86 assembly masm
我已经尝试解决这个问题有一段时间了。例如,在我正在使用的程序中,我使用以下方式进行键盘输入:
MOV AH,2h;
INT 21h;
Run Code Online (Sandbox Code Playgroud)
基本上,在从控制台返回一个字符之后,我尝试将该值输入到 MOV 中,并以 AL 作为数组索引,例如:
MOV dl,array[[AL]]
Run Code Online (Sandbox Code Playgroud)
在我的简单示例中,我提取一个 ASCII 值,并根据我生成的表吐出下一个字符(基本上只是一个任意练习)。
我尝试过 array[AL]、array[[AL]] 以及可能的其他十几种东西。当我在 MASM 中汇编代码时,出现以下错误:
**error A2031: Must be index or base register**
Run Code Online (Sandbox Code Playgroud)
[AL] 是否不返回存储在 AL 寄存器/指针中的值?
我该如何进行这项工作?
您需要在[]. 在8086模式下,仅有的两个基址寄存器是BX和BP,而仅有的两个索引寄存器是SI和DI。所以你需要做类似的事情:
mov BH,0;
mov BL,AL
mov DL,array[BX];
Run Code Online (Sandbox Code Playgroud)
而不是尝试直接使用 AL 作为基址寄存器。或者,您可以尝试使用 XLAT 指令,它大致相当于mov AL,[BX+AL]