【汇编】数据处理——bx,si,di,bp详解、CPU寻址过程、bx,bp基址寄存器的区别、指令要处理的数据有多长word,byte,word ptr/byte ptr、DIV指令、DUP指令详解等

bx,si,di,bp

在这里插入图片描述

CPU寻址过程(重要)

  1. 通过地址总线读取相应CS:IP地址指令
  2. 通过数据总线将读取的指令放入CPU中
  3. 将读取指令放入指令缓冲寄存器中
  4. 执行读取的指令将相应的指令操作完成,从bx偏移地址取值
  5. 将取出来的值通过数据总线放入ax
    在这里插入图片描述

使用寄存器的注意事项

只有bx,bp,si,di可以在[]对内存单元进行寻址。
bx以外的段寄存器、通用寄存器无法用在[]中。
也就是不可以用:mov ax,[cx]、mov ax,[ax]这样类似的非法指令。
bx和bp当做基址寄存器,si和di当做变址寄存器。
不可以将两个基址寄存器或者两个变址寄存器在[]中进行加减操作。
例如:mov ax,[bx+bp]/mov ax,[si+di]

bx,bp基址寄存器的区别:

bx默认为ds段的基址,bp默认为ss段,也就是栈段的基址。
注意是默认,也就是在不被特别指定时,作为这个段的基址。

汇编语言中数据位置的表达

在这里插入图片描述

指令要处理的数据有多长word,byte,word ptr/byte ptr

在这里插入图片描述

通过多种寻址方式对相应位置数据进行修改

在下面图例中想要修改相对位置下的值,我们可以先定义一个基址mov bx,60H,然后在这基础上进行其他操作,用寄存器相对寻址。来定义想修改的不同位置的数据。
在这里插入图片描述
在下图我们可以看到c语言与汇编语言之间的相同之处,在C语言中利用结构体定义了它在内存单元中结构体变量的初始地址也就是基址,用team[]数组的形式指向team中不同字符的位置,在汇编语言中使用bx定义了基址,用相对基址变址寻址[bx+idata+si]的方式来定义内存单元中不同字符的位置。
在这里插入图片描述

用div指令实现除法

div是除法指令,用div做除法时:
除数如果是八位的内存或寄存器,例如:bl,bh,byte ptr[],则被除数需要为16位的寄存器,商存放在AL中,余数存放在AH中
除数如果是16位的内存或寄存器,例如,bx,word ptr[],则被除数需要32位寄存器也就是两个16位寄存器DX,AX来作为高位和低位分别存放商和余数
在这里插入图片描述

实例

通过div实现100001/100,首先将被除数转化为16进制的数字,然后发现超出了16位的内存大小,所以要给32位的被除数空间,进行16位的除法,dxax来联合存放被除数,最后用bx存放除数100,执行div指令,完成计算,第二题同理。
在这里插入图片描述

因为寄存器空间十分的宝贵,所以有些时候我们需要直接在内存空间中实现
下面例题中使用第一个数据除以第二个数据然后存放在第三个内存单元中。
可以先将ds初始化位置,因为第一个数据是双字数据,所以先使用将0号字节单元数据放入ax,在到2号位置将字单元数据放入dx,用div将ds:[4]位置作为除数结果存放在ax中,所以将ax中的数值传给ds:[6]这样就完成了在内存单元中实现除法的操作。
在这里插入图片描述

assume cs:codesg,ds:datasg
datasg segment
	dd 100001
	dw 100
	dw 0
datasg ends

codesg segment
start:
	mov ax,datasg
	mov ds,ax
	mov ax,ds:[0]
	mov dx,ds:[2]
	div word ptr ds:[4]
	mov ds:[6],ax

	mov ax,4C00H
	int 21H

codesg ends
end start

在这里插入图片描述

dup指令的功能和用法

dup用来实现数据的重复。
使用语法:

  • db/dw/dd 重复的次数 dup (重复的类型数据)

在这里插入图片描述

实例

在这里插入图片描述
看下面代码存储在内存中的模样。
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webfker from 0 to 1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值