资源描述:
《《汇编语言》王爽讲稿_05_[bx]和loop指令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《汇编语言》课件王爽著-清华大学出版社制作工具:MicrosoftPowerPoint2003本课件由汇编网(www.asmedu.net)制作提供第5章[bx]和loop指令5.1[bx]5.2Loop指令5.3在Debug中跟踪用loop指令实现的循环程序5.4Debug和汇编编译器Masm对指令的不同处理5.5loop和[bx]的联合应用5.6段前缀5.7一段安全的空间5.8段前缀的使用[bx]和内存单元的描述[bx]是什么呢?和[0]有些类似,[0]表示内存单元,它的偏移地址是0。[bx]和内存单元的描述我们要完整地描述一个内存单元,
2、需要两种信息:(1)内存单元的地址;(2)内存单元的长度(类型)。我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出。[bx]和内存单元的描述[bx]同样也表示一个内存单元,它的偏移地址在bx中,比如下面的指令:movax,[bx]moval,[bx]loop英文单词“loop”有循环的含义,显然这个指令和循环有关。描述性符号“()”为了描述上的简洁,在以后的课程中,我们将使用一个描述性的符号“()”来表示一个寄存器或一个内存单元中的内容。描述性符号“
3、()”我们看一下(X)的应用,比如:(1)ax中的内容为0010H,我们可以这样来描述:(ax)=0010H;(2)2000:1000处的内容为0010H,我们可以这样来描述:(21000H)=0010H;(3)对于movax,[2]的功能,我们可以这样来描述:(ax)=((ds)*16+2);(4)对于mov[2],ax的功能,我们可以这样来描述:((ds)*16+2)=(ax);描述性符号“()”(5)对于addax,2的功能,我们可以这样来描述:(ax)=(ax)+2;(6)对于addax,bx的功能,我们可以这样来描述:(ax)=(a
4、x)+(bx);(7)对于pushax的功能,我们可以这样来描述:(sp)=(sp)-2((ss)*16+(sp))=(ax)描述性符号“()”(8)对于popax的功能,我们可以这样来描述:(ax)=((ss)*16+(sp))(sp)=(sp)+2约定符号idata表示常量我们在Debug中写过类似的指令:movax,[0],表示将ds:0处的数据送入ax中。指令中,在“[…]”里用一个常量0表示内存单元的偏移地址。以后,我们用idata表示常量。比如约定符号idata表示常量比如:movax,[idata]就代表movax,[1]、m
5、ovax,[2]、movax,[3]等。movbx,idata就代表movbx,l、movbx,2、movbx,3等。movds,idata就代表movds,1、movds,2等,它们都是非法指令。5.1[bx]我们看一看下面指令的功能:movax,[bx]功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中。即:(ax)=(ds*16+(bx));5.1[bx]mov[bx],ax功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处。即:(ds*
6、16+(bx))=(ax)。5.1[bx]问题5.1程序和内存中的情况如下图所示,写出程序执行后,21000H~21007H单元中的内容。思考后看分析。5.1[bx]问题5.1分析(1)先看一下程序的前三条指令:movax,2000Hmovds,axmovbx,1000H这三条指令执行后ds=2000H,bx=1000H;5.1[bx]问题5.1分析(续)(2)再看第4条指令:movax,[bx]指令执行前:ds=2000H,bx=1000H,则movax,[bx]将把内存2000:1000处的字型数据送入ax中。该指令执行后:ax=00be
7、H。5.1[bx]问题5.1分析(续)(3)再看第5、6条指令:incbxincbx指令执行前:bx=1000H。执行后:bx=0002H。5.1[bx]问题5.1分析(续)(4)再看第7条指令:mov[bx],ax指令执行前:ds=2000H,bx=1002H,则mov[bx],ax将把ax中的数据送入内存2000:1002处。指令执行后:2000:1002单元的内容为BE,2000:1003单元的内容为00。5.1[bx]问题5.1分析(续)(5)再看第8、9条指令:incbxincbx指令执行前:bx=1002H。执行后:bx=0004
8、H。5.1[bx]问题5.1分析(续)(6)再看第10条指令:mov[bx],ax指令执行前:ds=2000H,bx=1004H,则mov[bx],ax将把ax中的