汇编重要知识点:地址编号和数据编号

  • 代码段的标号可以用来标记指令,段的起始地址

利用标号S
在这里插入图片描述


代码段的数据也可以用标号,这个例子我编译不通过,得在数据段才行

  • 将a标号处8个字节数据累加,将结果存储在b标号处的字中
  • 修改了一下程序放在数据段内,安利特别好用的指令lea直接复制标号就可以不用offset
assume cs:code,ds:data

data segment
 db 20 dup(?)
 a db 201,202,203,4,5,6,7,8
 b dw 0
data ends

code segment
start:
      mov ax,data
      mov ds,ax
      lea si,a
      lea di,b
      mov cx,8
      xor ax,ax
    s:mov al,ds:[si]
      mov ah,0
      add ds:[di],ax
      inc si
      loop s
mov ah,4ch
int 21h
code ends
end start

在这里插入图片描述

  • 答案测试正确
    在这里插入图片描述
  • 简化程序
assume cs:code,ds:data

data segment
 db 20 dup(?)
 a db 201,202,203,4,5,6,7,8
 b dw 0
data ends

code segment
start:
      mov ax,data
      mov ds,ax
      mov si,0
      mov cx,8
    s:mov al,[a+si]
      mov ah,0
      add b,ax
      inc si
      loop s
mov ah,4ch
int 21h
code ends
end start

数据标号

  • 数据标号标记了存储数据的单元的地址和长度
  • 数据标号不同于仅表示地址的地址标号

b代表地址为code:28,长度为字的内存单元

  • 测试一下确实区分了字和字节的单元长度
    在这里插入图片描述
  • 不能直接把标号复制到寄存器里 错误原因下面分析了
    在这里插入图片描述
  • 字节型数据不能复制到AX寄存器中,字型可以
    在这里插入图片描述
    在这里插入图片描述
  • 数据段要标好,不然直接跑飞了
    在这里插入图片描述

地址编号只能在代码段使用

  • 标号可以当作数据来定义,记录a和b的偏移地址
    在这里插入图片描述
assume cs:code,ds:data

data segment
 db 20 dup(?)
 a db 201,202,203,4,5,6,7,8
 b dw 2 dup(0)
 G dw a,b
data ends

code segment
start:
      mov ax,data
      mov ds,ax
      mov al,a
      mov ax,b
      mov ax,G
mov ah,4ch
int 21h
code ends
end start
发布了251 篇原创文章 · 获赞 28 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/xiong_xin/article/details/103553630
今日推荐