汇编语言第三版(王爽著)(第八章.数据处理的两个基本问题)

前导

两个基本问题:
1.处理的数据在什么地方
2.要处理的数据有多长
两个描述性的符号:reg(寄存器)和sreg(段寄存器)
reg:ax bx cx dx ah al bh bl ch cl dh dl sp bp si di
sreg: cs ds ss es

8.1 bx、si、di和bp

总结:
1.在8086CPU中,只有这4个寄存器可以用在[ ]中来进行内存单元的寻址
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bp]
mov ax,[bp+si]
2.下面两种搭配是错误的
mov ax,[bx+bp]
mov ax,[si+di]
3.使用[bp]时,没有显示的给出段地址,那就在ss里

8.2 机器指令处理的数据在什么地方

指令在执行前,所要处理的数据可以在3个地方:CPU内部,内存,端口
mov bx,[0] 内存
mov bx,ax CPU内部,寄存器
mov bx,1 CPU内部,指令缓冲器

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

1.立即数
2.寄存器
3.段地址和偏移地址

8.4 寻址方式

在这里插入图片描述

8.5 指令要处理的数据有多长

在机器指令中要指明,指令进行的字操作还是字节操作
1.寄存器指明
2.mov word ptr ds:[0],1
inc word ptr [bx]
push只进行字操作

8.6 寻址方式的综合运用

用bx定位整个结构体,用idata定位结构体中的某一个数据项,用si定位数据项中的每一个元素。

8.7 div指令

17/8=2…1 16:被除数 8:除数 2:商:2 余数:1
(1)除数:有8位和16位 存放在寄存器或者内存单元中
(2)被除数:如果除数是8位,被除数就是16位,在AX中
如果除数是16位,被除数就是32位,DX中存放高位,AX中存放低位
(3)结果:如果除数是8位,AL存放商,AH存放余数;如果除数是16位,则AX存商,DX存余数。
格式如下:
div reg
div 内存单元

1.div byte ptr ds:[0]
//意思是:al = (ax)/((ds)*16+0) 的商
ah= (ax)/((ds)*16+0) 的余数
2.div word ptr es:[0]
//意思是:ax = [(dx)*10000H+(ax)]/((es)*16+0)的商
dx = [(dx)*10000H+(ax)]/((es)*16+0)的余数
//划重点:让被除数和除数与65535比较

8.8 伪指令 dd

定义双字节。
问题 8.1
assume cs:codesg,ds:datasg
datasg segment
dd 100000
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
在这里插入图片描述

8.9 dup

它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复

db 3 dup (0)
定义3个字节,它们的值都是0 ,相当于 db 0,0,0
db 3 dup (0,1,2)
定义9个字节,db 0,1,2,0,1,2,0,1,2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值