「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」。
内存读写的另外一种简便方法
直接使用别名+[偏移量]的形式获取或者修改已经定义好的数据,比如:
;需求:将第二个字符串最后一个o替换成第一个字符串中的e
data segment
str dw 'hello '
newstr dw 'wowowo'
data ends
;以前的写法:
code segment
start:
mov ax,data
mov ds,ax
mov al,ds:b.str+1
mov ds:b.newstr+5,al
code ends
end start
;更加简便的写法:
code segment
start:
mov ax,data
mov ds,ax
mov al ,b.str[1] ;使用b.或者直接定义db数据 实现对单个字符进行控制
mov b.newstr[5],al
code ends
end start
mov ax ,str 中的str相当于是str[0],这也是为什么咱们能够直接通过别名来获取第一个字符的原因
前面我们只介绍了b.str[0],表示读取一个字节的数据,另外一种w.str[0]表示读取一个字的数据
别名str中存放的数据量更db和dw有关, 如果是db那么别名默认取一个字节数据,如果dw 别名默认取两个字节数据, 可以使用b.和w.进行数据量的调节
一维数组的定义
数组本质上就是多个数据的集合,在内存中按照一定顺序排列,角标即为每个数据的偏移值,如果使用db进行数据的定义那么两个数据之间的偏移值为1个字节,如果使用dw指令定义数据,则偏移值为2个字节
data segment
db 3 dup(1) ;批量定义三个连续的数据 每个数据的偏移量为1 在内存中的排列为 111
data ends
data segment
db 3 dup(1,2,3) ;批量定义三个连续的数据 每个数据的偏移量为1 在内存中的排列为 123123123
data ends
数组的打印
data segment
array db 128 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov array[0],1
mov array[1],2
mov array[2],3
code ends
end start