寄存器在内存单元寻址组合和div/mul指令笔记

只有bx,si,di,bp可以在[ ]进行内存单元寻址,只能有4种组合

[bx+si],[bx+di],[bp+si],[bp+di]

bx没有显示指定段地址默认在ds中   例子:mov ax,[bx+si]=(ax)=(ds*16+bx+si)

bp没有显示指定段地址默认在ss中   例子:mov ax,[bp+si]=(ax)=(ss*16+bx+si)



指定指令处理数据长度:

1寄存器指定:mov ax,1    ax是16位寄存器,指定数据长度为16位,2个字节,一个字

mov al,1     al是8位寄存器,指定数据长度为8位,1个字节

2显示指定: X ptr    mov byte ptr, ds:[0],1  指定数据长度为一个字节,ds:[0]=01

 mov wort ptr ds:[0] ,1 指定数据长度为一个字,2个字节 ds:[0]=01 ds:[1]=00




内存偏移地址组合灵活性可以应用于二维数组,结构体等数据结构

二维数组:[bx+idata]

结构体:[bx].idata[si]=[bx+idata+si],bx定位结构体,idata定位数据项,si定位数据项的每一个元素


div除法指令:

1除数有8位和16位两种,放在内存单元或者寄存器中

2被除数:默认在AX(16位)或DX+AX(32位)中,如果除数是8位,被除数就是16位,默认存放在AX中,如果除数是16位,被除数就是32位,在DX+AX中存放,DX存放高位,AX存放低位

3结果:除数是8位,商在AL中,余数在AH中

     除数是16位,商在AX中,余数在DX中


例子:

div byte ptr ,ds:[0]   含义:  (al)=(ax)/(ds*16+0)   商在al中        (ah)=(ax)/(ds*16+0)    余数在ah

div word ptr ,es:[0]   含义: (ax)=((dx)*10000H+(ax))/(es*16+0)商在aX中       (dx)=((dx)*10000H+(ax))/(es*16+0)  余数在dx中   



假如一个程序:100001/100

assume cs:code
code segment
	 start: mov dx,1
		mov ax,86A1H	;(dx)*10000H+(ax)=100001
		mov bx,100
		div bx	

		mov ax,4c00h
		int 21h
code ends
end start

被除数大于65535,大于16位,用dx和ax存放,除数100小于255,8位寄存器可以存放,但是被除数是32位, 所以除数要用16位寄存器存放




mul指令:乘法指令

两个相乘的数:要么都是8位,要么都是16位,如果是8位,一个默认在al中,另一个放在8位寄存器或内存字节单元中,如果是16位,一个默认在AX中,另一个放在16位寄存器或内存字单元中

相乘的结果:8位相乘,结果放在AX中,16位相乘,结果放在DX和AX中,高位放在DX,低位放在AX


指令格式:mul reg(寄存器) mul 内存单元

例子:计算100*1000 100可以用8位存,1000要用16位存,所以要用16位相乘

mov ax,100

mov bx,1000

mul bx 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值