汇编代码复习8

主要内容:
	1.总结一下bx,si,di,bp
	2.机器处理的数据在什么地方
	3.汇编语言中数据位置的表达
	4.寻址方式
	5.指令要处理的数据有多长
	6.div指令
	7.伪指令dd
	8.dup
1.8806CPU中,只有bx,si,di,bp能在[...]中来进行内存单元的寻址
但是mov ax,[bx+bp]    mov ax,[si+di]  这两种组合是错的,其余任何组合方式都可以使用

2.绝大部分机器指令都是进行数据处理的指令,处理大致可分为三类:'读取''写入''运算',
在机器指令这一层来讲,并不关心数据的值是多少,而关心'指令执行的前一刻,将要处理的数据所在的位置',
所以要处理的数据可以在三个地方:'CPU内部''内存''端口'。此处先不讲端口的部分,先举例子描述前两类
<1>. mov ax,[o]		内存,DS:0单元,源对象是内存单元DS:0,目的对象是ax寄存器处
<2>. mov ax,bx		CPU内部,AX寄存器,源对象是bx寄存器,目的对象是ax寄存器
<3>. mov ax,1			CPu内部,指令缓冲器,源对象是一个数据,目的对象是ax寄存器  	
					//此处要说一句,个人理解,操作的目的对象实质是由ax:0处开始的一段空间

3.汇编语言中用三个概念来表达数据的位置
<1>.立即数,就是直接进行操作的内存单元内的数据
	例如:mov ax,1
		 add bx,2000h
		 or bx,00100000h
		 mov al,'a' 
<2>.寄存器 指令要处理的数据存在寄存器中,,在汇编指令中给出相应的寄存器名
	mov ax,bx
	mov ds,ax
	push bx
	mov ds:[0],bx
	总之,命令最后的是寄存器都属于这一类
<3>.段地址和偏移地址,就是源对象构成是[地址]的格式
	mov ax,[0]
	mov ax[di]
	mov ax,[bx+6]
	mov ax,[bx+si]
	mov ax,[bp+si+6]
	不限此处几种,命令最后的是具体的偏移地址的都是此类

4.寻址当时此处介绍五类
<1>.直接寻址
	格式:[idata]
	例如:mov ax,[o]
<2>.寄存器间接寻址
	格式:[bx]
	例如:mov ax,bx
<3>.寄存器相对寻址
	格式:[bx+idata]
	例如:mov ax,[bx+8]
<4>.基址变址寻址
	格式:[si+bx]
	例如:mov ax,[si+bx]
<5>.相对基址变址寻址
	格式:[bx+si+idata]
	例如:mov ax,[bx+si+8]

5.指令要处理的数据长度
<1>.通过寄存器指明要处理的数据的长度
例如:	mov ax,1
		mov bx,ds:[0]
		mov ds,ax
		//此处指明操作的是字操作
例如:	mov al,1
		mov al,bx
		mov al,ds:[0]
		mov ds:[0],al
		//此处指明进行操作的是字节操作
		//区别这两种的方式是观察操作的对象属于寄存器整体还是单独的寄存器的高地位
<2>.没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X通常可以用word和byte来表示
	用word ptr进行操作的是一个字单元
	mov word ptr ds:[0]1
	inc word ptr [bx]
	用type ptr进行操作的是一个字节单元
	mov type ptr ds:[0],1
	inc type ptr [bx]

6.div指令除法指令,
	.1.除数,有八位和十六位两种,在一个reg或内存单元中
	.2.被除数,默认放在AX或DX和AX中,如果除数是八位,被除数则为十六位,默认放在AX中
		如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16.3.如果除数为8位,则AL存储除法操作的商,AH存放除法操作的余数
		如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数
	
	举例表示:div byte ptr ds:[0]    相当于al=ax/(ds:[0])的商,ah=ax/(ds:[0])的余数
			
7.伪指令dd
	dd和db,dw差不多,都是定义数据的指令,但是db定义字节型数据,dw定义字型数据。
	而dd定义双型数据,类似复数
	dd定义数据占2个字,db占1个字节,dw占两个字

	好家伙,上几行代码复习一下上面知识点

	data segment 
	dd 100001
	dw 100
	dw	 0
	data ends
	分析
	data段中的第一个数据是被除数,为dd型,32位,所以在做除法之前,用dx和ax存储,
	应将data:0字单元中的低16位存储在ax中,data:2字单元中的高16位存储在dx中
	//继续代码
	mov ax,data
	mov ds,ax		//将data的数据存放在ds中
	mov ax,ds:[0]	//将ds中低16位存放在ax中
	mov dx,ds:[2]	//将高16位存放在dx中
	div word ptr ds:[4]	//用存储在dx:ax中的32位数据除ds:4中的除数,求出商存入ax,余数存入dx
	mov ds:[6],ax	//将商存入ds:6字单元中

8.dup	操作符,是用来配合db,dw,dd使用的,作用是重复数据输入
		例如 db 200 dup (0) 	相当于输入了2000的数据
		//主要作用是方便提供足够大的栈
参考书籍《汇编语言第四版》王爽著,任课老师 胡海芝
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值