4.7 数组的读取和写入,type指令和一些杂项
可以通过
word ptr
将db转为dw,然后按照dw的方式去存储数据
1. 段名也可以把其地址赋给变量
assume cs:codesg,ds:data,ss:stack
data segment
db 12,34
dw 12,34
db 'hello world'
data ends
stack segment
db 10 dup (0)
stack ends
codesg segment
start:
mov ax,data
mov bx,stack
mov ax,0afh
codesg ends
end start
2. 数组
2.1 type 指令
- 数组,在定义数据前面加一个符号,就是数组名
- type后面加数组名可以求出数组的类型,如db为1,dw为2
assume cs:codesg,ds:data,ss:stack
data segment
arr dw 12,34
arr2 db 'hello world'
data ends
stack segment
db 10 dup (0)
stack ends
codesg segment
start:
mov ax,type arr
mov ax,type arr2
mov ax,0afh
codesg ends
end start
2.2 标号
- 数据前面也可以是有一个标号的
- 我们可以取得标号的地址再赋给变量
assume cs:codesg,ds:data,ss:stack
data segment
data ends
stack segment
db 10 dup (0)
stack ends
codesg segment
arr dw 12,34
arr2 db 'hello world'
start:
mov si,offset arr
mov bx,offset arr2
mov ax,0afh
codesg ends
end start
2.3 数组的应用
- 数组也可以通过下标来取值
- 找到array对应的内存,将其加两个字节,再从那个地方取得元素
- 如果数组里面存放的是字符,那么从数组取到的则是该字符的ASCII码
- 如果不加下标,则默认取数组的第一个元素
- 也可以将变量里面的值赋给数组
assume cs:codesg,ds:data,ss:stack
data segment
data ends
stack segment
db 10 dup (0)
stack ends
codesg segment
arr dw 12,34
arr2 db 'hello world'
start:
mov ax,arr[0]
mov si,offset arr
mov ax,0afh
codesg ends
end start
- 如果想要访问数据段的数据,得需要将这里的ds和它的标号data联系在一起
- 即
mov ax,data
mov ds,ax
- 例如
assume cs:codesg,ds:data,ss:stack
data segment
arr db 10h,20h,30h,40h,50h
arr2 db 'hello world'
data ends
stack segment
db 10 dup (0)
stack ends
codesg segment
start:
mov ax,data
mov ds,ax
mov al,arr[2]
mov bx,data
codesg ends
end start