我是靠谱客的博主 爱笑水池,最近开发中收集的这篇文章主要介绍寄存器在内存单元寻址组合和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 





最后

以上就是爱笑水池为你收集整理的寄存器在内存单元寻址组合和div/mul指令笔记的全部内容,希望文章能够帮你解决寄存器在内存单元寻址组合和div/mul指令笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部