如何在DOS x86(16位)汇编中操作数组索引并读写指定值
16位汇编中数组索引的读写操作
你定义的Dots_pos是用dw(16位字)声明的数组,每个元素占2字节,所以索引计算必须基于这个字节长度来做。下面是具体的读写方法:
读取指定索引的元素
假设要获取索引n(从0开始计数)对应的元素值:
因为每个元素占2字节,索引n对应的内存偏移是n * 2。可以用寄存器计算偏移,示例代码:
; 方法1:用BX计算偏移 mov bx, n ; 把目标索引n放到BX里 shl bx, 1 ; 左移1位等价于乘以2,得到字节偏移 mov ax, [Dots_pos + bx] ; 把索引n的元素值读取到AX中
或者直接提前算好偏移:
; 方法2:用SI直接存偏移 mov si, n*2 ; 直接计算出字节偏移 mov ax, [Dots_pos + si]
修改指定索引的元素
要把索引n的元素改成新值new_value,同样先算出偏移,再写入内存:
; 用BX的写法 mov bx, n shl bx, 1 mov [Dots_pos + bx], new_value ; 将新值写入对应位置
或者用SI:
mov si, n*2 mov [Dots_pos + si], new_value
额外注意点
- 16位汇编默认用DS段访问内存,如果你的数组放在代码段(和指令一起),需要加上段前缀
cs:,比如mov ax, cs:[Dots_pos + bx] - 索引从0开始:第一个元素
firstLine对应索引0,第二个firstLine+8对应索引1,以此类推
内容的提问来源于stack exchange,提问作者Clementine951
相关产品推荐
相关产品推荐

