我想使用随机生成的数字访问数组中的特定元素。
例如,
我想要生成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发布于 2021-06-05 07:45:06
彼得解决方案的另一种方法是对$-terminator random_number times进行扫描:
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 代码更长更慢,但它节省了数据部分的空间,因为字符串不必填充到统一长度。
发布于 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)的文件顶部,则字符串数据将作为代码执行。不要这样做,把你的数据放在最后。
https://stackoverflow.com/questions/67846614
复制相似问题