首页 > 解决方案 > 使用整数索引访问字符串数组的特定元素

问题描述

我想使用随机生成的数字访问数组的特定元素。

例如,

我想生成随机数 0-9。生成数字后(在本例中,我们假设随机数生成为 4),我想访问 array5 并打印屏幕。

我怎么可能成功。

字符串数组初始化代码如下

我将我的代码编辑为相同大小的字符串,如下所示。每个字符串有 8 个字符。

如何生成随机数?

org 100h

array0:    db      "abstract", 0Dh,0Ah, 24h
array1:    db      "academic", 0Dh,0Ah, 24h
array2:    db      "accurate", 0Dh,0Ah, 24h
array3:    db      "bacteria", 0Dh,0Ah, 24h
array4:    db      "attorney", 0Dh,0Ah, 24h
array5:    db      "equation", 0Dh,0Ah, 24h
array6:    db      "umbrella", 0Dh,0Ah, 24h
array7:    db      "overcome", 0Dh,0Ah, 24h
array8:    db      "universe", 0Dh,0Ah, 24h
array9:    db      "analysis", 0Dh,0Ah, 24h

标签: arraysstringassemblyemu8086

解决方案


那不是数组;元素的长度不同。

您需要填充到某个固定的最大大小,以便您可以缩放像 C 这样的索引
struct {char c[16];} arr[10]; 来制作一个固定大小的字符串缓冲区数组。
或者制作一个单独的指针数组,例如arr: dw array0, array1, ...

在程序集中初始化字符串数组显示了两种方式的示例。对于您的情况,填充您可能align 16在每个条目之前使用的条目,这将在该位置发出填充字节,直到当前地址是 16 的倍数。

(通常将索引缩放 16shl di, 4或任何寄存器,但原始 8086 没有立即移位。所以mov cl,4/shl di, cl如果您需要与古代硬件/模拟器兼容。)


要索引您当前拥有的内容(字符串的平面串联),您可能必须线性搜索第 424h个字节。第 5 个字符串在该字节之后开始。

此外,如果您实际上将此数据放在.com可执行文件(org 100h)的文件顶部,则字符串数据将作为代码执行。不要那样做;把你的数据放在最后。


推荐阅读