汇编语言7之数据访问的基本问题以及div指令

本文详细介绍了8086CPU中的通用寄存器bx、di、si和bp的功能及其在内存寻址中的应用。内容涵盖了它们在数据处理中的作用,以及如何与段地址结合进行寻址。此外,还讲解了8086的寻址方式,包括字节和字数据的处理,并重点解析了div除法指令的使用规则。同时,提到了伪指令如db、dw和dd以及dup的用法,用于定义不同长度的数据结构。
摘要由CSDN通过智能技术生成

bx,di,si,bp

bx:常见的通用寄存器,默认基于数据段偏移,[bx]将会在ds段地址上偏移后然后寻址

di和si:SI(source index)和DI(destination index)是8086CPU中和bx功能相近的寄存器,但是SI和DI不能分成两个低位的寄存器,在处理内存中的数据的过程中,只能一次将两个字节放入寄存器中

bp:(base pointer)功能和bx一致,但是[bp]默认是基于ss上的偏移后寻址,和sp一样

在[…]中,只能是这四个寄存器或者这四个寄存器的特定组合,这些组合只能是:

  • bx和si
  • bx和di
  • bp和si
  • bp和di

其他(bx和bp以及si和di)均不允许出现

寻址方式的总结

]

8086为16位CPU,支持两种尺寸的数据,byte和word(2 byte)

确定要处理的数据的长度

  • 通过寄存器名字指定

    ​ mov ax,1 ;16位

    ​ mov al,1 ;8位

  • 在没有出现寄存器名的情况下

​ mov word ptr ds:[0],1 ;一个字的长度

​ mov byte ptr ds:[0],1 ;一个byte长度

  • 有些指令默认了访问的是字单元还是字节单元

    ​ 例如push和pop指令,push指令在执行的时候,sp默认就是字形数据,过程就是先执行,sp=sp-2然后访存。pop指令执行的时候,先弹出数据,然后sp=sp+2

寻址方式的应用:

例如数据结构中的结构体:

​ 实际上使用的就是相对基址变址寻址

]

div指令

说明

​ 除法指令,单操作数指令

除数:8为或者16位,放在寄存器或者内存单元中

被除数:默认放在AX或者DX和AX中

​ 当指明除数为8位,那么被除数就会去ax中找,结果也存放在ax中

​ 当指明除数为16位,那么会利用DX和AX当做被除数,结果放在DX和AX中,如下

结果:

​ 运算 8位 16位

​ 商 AL AX

​ 余数 AH DX

div指令格式:

div reg

div 内存单元

格式:

8位模式举例
div byte ptr ds:[0]

​ 含义为:

​ (al) = (ax)/((ds)*16+0)

​ (ax) = (ax)%((ds)*16+0)

16位模式举例:
div word ptr es:[0]

​ 含义为:

​ (ax)=[(dx)*10000H+ax]/((ds)+0)

​ (ax) =[(dx)*10000H+ax]%((ds)+0)

使用的时候,先判断被除数能不能放在一个寄存器中,也就是值是否大于65535(FFFFH),如果大于就将高位放在dx,低位放在ax。然后使用div指令,小于65535就放在ax,然后使用指令

伪指令dd

db:(define byte)定义一个字节长度的数据

dw: (define word)定义一个字长度的数据

dd: (define double word)定义2个字长度的数据

伪指令dup

示例1:

​ db 3 dup(0)

编译后:db 0,0,0

示例2:

​ db 3 dup(0,1,2)

编译后:db 0,1,2,0,1,2,0,1,2

所以:

​ db/dw/dd 重复的次数 dup(重复的内容长度和选择的db/dw/dd一致)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值