首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用80x86寄存器作为数组索引

使用80x86寄存器作为数组索引
EN

Stack Overflow用户
提问于 2011-02-13 09:20:11
回答 2查看 8.3K关注 0票数 1

我已经试着弄清楚这个问题有一段时间了。在我正在使用的程序中,作为示例,我使用以下命令进行键盘输入:

代码语言:javascript
复制
MOV AH,2h;
INT 21h;

基本上,在从控制台返回一个字符之后,我尝试将该值输入到以AL作为数组索引的MOV中,如下所示:

代码语言:javascript
复制
MOV dl,array[[AL]]

在我的简单示例中,我提取了一个ASCII值,并根据我生成的表(基本上只是一个任意练习)返回下一个字符。

我已经尝试过arrayAL、array[AL],可能还有十几个其他的东西。当我在MASM中汇编我的代码时,我得到这个错误:

代码语言:javascript
复制
**error A2031: Must be index or base register**

AL是否不返回存储在AL寄存器/指针中的值?

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-13 09:36:49

您需要在[]中使用索引或基址寄存器。在8086模式下,仅有两个基址寄存器为BX和BP,而仅有两个索引寄存器为SI和DI。所以你需要做一些类似的事情:

代码语言:javascript
复制
mov BH,0;
mov BL,AL
mov DL,array[BX];

而不是尝试将AL直接用作基址寄存器。或者,您可以尝试使用XLAT指令,该指令大致相当于mov AL,[BX+AL]

票数 3
EN

Stack Overflow用户

发布于 2011-02-13 09:38:08

正如错误所说,您需要使用索引寄存器,例如SI、DI或基址寄存器BX。如果我没记错的话,这里使用其他寄存器需要386模式。

此外,当用作索引时,请记住,如果数组元素不是字节,则可能需要调整数组元素的大小(尽管在本例中可能使用字节)。

我猜索引语法应该是array[...],但我上次用汇编语言写东西已经有5年多了。

还有一件事: AH不应该是01h吗?

http://spike.scu.edu.au/~barry/interrupts.html#ah01

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4981820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档