汇编语言学习笔记8——数据处理中数据所在的位置以及要处理数据的长度问题...

reg表示一个寄存器,包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di。
sreg表示段寄存器,包括:ds、ss、cs、es。

bx、si、di、bp

8086cpu中,只有这4个寄存器可以用在[]中来进行内存单元的寻址。
在[]中,这四个寄存器可以单个出现,如果组合只能以下面四种方式组合:
bx和si、bx和di、bp和si、bp和di。

只要在[]中使用寄存器bp,而指令中没有显性的给出段地址,段地址就默认在ss中。

机器指令处理的数据所在的位置
mov bx,[2]  ;数据处于内存中ds:2单元
mov ax,bx   ;数据处于cpu内部,bx寄存器中
mov ax,5    ;数据处于cpu内部,指令缓冲器中
汇编中数据位置的表达
  • 立即数(idata):包含在指令中的数据,执行前在cpu的指令缓冲器中。
  • 寄存器
  • 段地址(SA)和偏移地址(EA)
在机器指令中指明处理数据的长度

8086cpu中,可以处理两种长度的数据:byte和word。

  • 通过寄存器名指明要处理的数据尺寸。
    例如mov ax,1,则处理16位。mov al,1则处理8位。
  • 在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。
    例如mov word ptr ds:[0],1指明了指令访问的内存是一个字单元,mov byte ptr ds:[0],1指明了指令访问的内存单元是一个字节单元。
  • 有些指令默认了访问的是字单元还是字节单元。
    例如push指令,只进行字操作。
div指令

div为除法指令,使用时:

  • 除数:8位或16位,在寄存器或内存单元中
  • 被除数:默认放在ax或dx和ax中
  • 当除数为8位时,被除数要为16位(ax)。运算结果将商存放在al中,余数存放在ah中。
  • 当除数为16位时,被除数要为32位(ax+dx)。运算结果将商存放在ax中,余数存放在dx中。

格式为:div 内存单元div 寄存器

div word ptr [bx+si+8]
;(ax)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8) 为结果的商
;(dx)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8) 为结果的余数

计算100001/100;

mov dx,1
mov ax,86A1H
mov bx,100
div bx

计算1001/100;

mov ax,1001
mov bl,100
div bl
伪指令db、dw、dd

db用来定义字节型数据;
dw用来定义字型数据;
dd用来定义双字型数据。

用div计算data段中的第一个数据除以第二个数据后的结果,商放在第三个数据的内存单元中。

data degment
    dd 100001
    dw 100
    dw 0
data ends

代码:

mov ax,data
mov ds,ax
mov ax,ds:[0]
mov dx,ds:[2]
div word ptr ds:[4]
mov ds:[6],ax
dup操作符

和db、dw、dd一样,是由编译器识别处理的符号。是和db、dw、dd等数据定义伪指令配合使用,用来进行数据的重复。

格式:db 重复次数 dup (重复的字节型数据),dw、dd类似。

例如:
db 3 dup (0)相当于db 0,0,0
db 3 dup (0,1,2)相当于db 0,1,2,0,1,2,0,1,2

转载于:https://www.cnblogs.com/starsli/p/4779399.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值