4.7 数组的读取和写入,type指令和一些杂项

114 阅读2分钟

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

image.png

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

image.png

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

image.png

image.png

  • 如果想要访问数据段的数据,得需要将这里的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

image.png