首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用整数索引访问字符串数组的特定元素

使用整数索引访问字符串数组的特定元素
EN

Stack Overflow用户
提问于 2021-06-05 05:35:29
回答 2查看 178关注 0票数 0

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

例如,

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

我怎么能成功。

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

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

如何生成随机数?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-05 07:45:06

彼得解决方案的另一种方法是对$-terminator random_number times进行扫描:

代码语言:javascript
复制
     MOV BX,random_number   
     MOV DI,offset array0  ; Beginning of strings. 
     MOV CX,offset arrayEnd; A label below all "arrays".
     SUB CX,DI             ; Let CX=total size of all strings.
     MOV AL,24h            ; '$' which terminates each string.
     CLD                   ; Ascending scan.
Next:REPNE SCASB           ; Search for '$', start at ES:DI.
     DEC BX                ; 
     JNZ Next              ; Repeat random_number times.
     MOV DX,DI             ; DI now points to the desired string.
     MOV AH,9              ; Use DOS function to print it. 
     INT 21h               ; Output $-terminated string at DS:DX.
     RET                   ; Terminate COM program.
    ; Data section follows:
array0:  db "Car", 0Dh, 0Ah, 24h  
 ...
arrayEnd:db 24h             ; End of strings 

代码更长更慢,但它节省了数据部分的空间,因为字符串不必填充到统一长度。

票数 3
EN

Stack Overflow用户

发布于 2021-06-05 05:57:36

这不是一个数组;元素的长度也不尽相同。

你需要调整到固定的最大尺寸,这样你就可以缩放一个像C这样的索引。

struct {char c[16];} arr[10];来创建一个固定大小的字符串缓冲区数组.

或者创建一个独立的指针数组,如arr: dw array0, array1, ...

Initialise array of strings in assembly展示了这两种方式的示例。对于您的情况,可以在每个条目之前使用align 16,这将在该位置发出填充字节,直到当前地址为16的倍数为止。

(将索引缩放16通常是shl di, 4或其他寄存器,但原始的8086并没有立即转移。因此,如果您需要与旧硬件/仿真器兼容,请使用mov cl,4 / shl di, cl。)

要索引您目前拥有的(字符串的平面连接),您可能需要对第4个24h字节进行线性搜索。第五个字符串开始于那个字节之后。

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

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

https://stackoverflow.com/questions/67846614

复制
相关文章

相似问题

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