汇编语言(王爽版)学习笔记 第三章 寄存器【内存访问】(2)

3.4 mov、add、sub指令

已学mov指令的几种形式:
mov 寄存器,数据 例:mov ax,1
mov 寄存器,寄存器 例:mov ax,bx
mov 寄存器,内存单元 例:mov ax,[0]
mov 内存单元,寄存器 例:mov [0],ax
mov 段寄存器,寄存器 例:mov ds,ax

验证:
mov 寄存器,段寄存器 例: mov ax,ds(正确)

错误示范:mov ds,1000H

add和sub指令同mov一样,都有两个操作对象
在这里插入图片描述
add指令可以对段寄存器进行操作吗?
在这里插入图片描述
实验证明不可以!

3.5数据段

  • 对于8086CPU,我们可以根据需要将一组内存单元定义为一个段(可以是代码段、数据段等)
  • 我们可以将一组长度为N(N<=64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。
  • 例如,用123B0H~123B9H这段空间来存放数据:
    段地址:123B 长度:10字节

如何访问数据段中的数据?

用ds存放段地址,再根据需要,用相关指令访问数据段中的具体单元

在这里插入图片描述

问题3.5

写几条指令,累加数据段中前3个字型数据,思考后分析。

mov ax,123BH
mov ds,ax
mov ax,0
add ax,[0]
add ax,[2]
add ax,[4]

3.1-3.5小结

  1. 字在内存中存放时,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
  2. 用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
  3. [address]表示一个偏移地址为address的内存单元
  4. 在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应
  5. mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令
  6. 可以根据自己的推测,在Debug中实验指令的新格式
    【注:mov ax,1000[0]可以】

检测点3.1

在这里插入图片描述
答:

已知ds=1
mov ax,[0000] AX=2662H
mov bx,[0001] BX=E626H
mov ax,bx AX=E626H
mov ax,[0000] AX=2662H
mov bx,[0002] BX=D6E6H
add ax,bx AX=FD48H
add ax,[0004] AX=(2ECC+FD48)=2C14H
mov ax,0 AX=0000H
mov al,[0002] AX=00E6H
mov bx,0 BX=0000H
mov bl,[000C] BX=0026H
add al,bl AX=000CH

在这里插入图片描述
在这里插入图片描述
答:

1.指令序列:
mov ax,6622H
jmp 0ff0:0100
mov ax,2000H
mov ds,ax
mov ax,[0008]
mov ax,[0002]

2.以CS、IP、DS、AX、BX的顺序
初值:2000H,0,1000H,0,0
mov ax,6622H : 2000H,3,1000H,6622H,0
jmp 0ff0:0100 : 1000H,0,1000H,6622H,0
mov ax,2000H : 1000H,3,1000H,2000H,0
mov ds,ax : 1000H,5,2000H,2000H,0
mov ax,[0008] : 1000H,8,2000H,C389H,0
mov ax,[0002] : 1000H,000B,2000H,EA66H,0


发布了85 篇原创文章 · 获赞 42 · 访问量 4319

猜你喜欢

转载自blog.csdn.net/weixin_43092232/article/details/104912522