- 1、本文档共34页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.2 Loop指令 程序分析: (1)标号在汇编语言中,标号代表一个地址,此程序中有一个标号s 。它实际上标识了一个地址,这个地址处有一条指令:add ax,ax。 5.2 Loop指令 (2)loop s CPU 执行loop s的时候,要进行两步操作: ① (cx)=(cx)-1; ② 判断cx 中的值,不为0 则转至标号s 所标识的地址处执行(这里的指令是“add ax,ax),如果为零则执行下一条指令(下一条指令是mov ax,4c00h)。 5.2 Loop指令 (3)以下三条指令 mov cx,11 s: ddd ax,ax loop s 执行loop s时,首先要将(cx)减1,然后若(cx)不为0,则向前转至s处执行add ax,ax。所以,我们可以利用cx来控制add ax,ax的执行次数。 5.2 Loop指令 下面详细分析一下这段程序的执行过程,从中体会如何用cx 和loops 相配合实现循环功能。 第五章 [BX]和loop指令 江西科技师范大学动漫学院 目录 5.1 [bx] 5.2 Loop指令 5.3 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器Masm对指令的不同处理 5.5 loop和[bx]的联合应用 5.6 段前缀 5.7 一段安全的空间 5.8 段前缀的使用 [bx]和内存单元的描述 [bx]是什么呢? 和[0]有些类似,[0]表示内存单元,它的偏移地址是0。 mov ax, [0] mov al, [0] [bx]和内存单元的描述 完整地描述一个内存单元,需要两种信息: (1)内存单元的地址; (2)内存单元的长度(类型)。 用[0]表示一个内存单元时,0 表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出,如前边的AX,AL。 [bx]和内存单元的描述 [bx]同样也表示一个内存单元,它的偏移地址在bx中,比如下面的指令: mov ax,[bx] mov al,[bx] loop 英文单词“loop”有循环的含义,显然这个指令和循环有关。 描述性符号“()” 为了描述上的简洁,在以后的课程中,将使用一个描述性的符号 “() ”来表示一个寄存器或一个内存单元中的内容。 描述性符号“()” (X)的应用,比如: (1)ax中的内容为0010H,我们可以这样来描述:(ax)=0010H; (2)2000:1000 处的内容为0010H,我们可以这样来描述:(21000H)=0010H; (3)对于mov ax,[2]的功能,我们可以这样来描述:(ax)=((ds)*16+2); (4)对于mov [2],ax 的功能,我们可以这样来描述:((ds)*16+2)=(ax); 描述性符号“()” (5)对于 add ax,2 的功能,我们可以这样来描述:(ax)=(ax)+2; (6)对于add ax,bx的功能,我们可以这样来描述:(ax)=(ax)+(bx); (7)对于push ax的功能,我们可以这样来描述: (sp) = (sp)-2 ((ss)*16+(sp))=(ax) 描述性符号“()” (8)对于pop ax 的功能,可以这样来描述: (ax)=((ss)*16+(sp)) (sp)=(sp)+2 约定符号idata表示常量 在Debug 中写过类似的指令:mov ax,[0],表示将 ds:0 处的数据送入ax中。指令中,在“[…]”里用一个常量0表示内存单元的偏移地址。以后,我们用idata表示常量。 约定符号idata表示常量 例如: mov ax,[idata]就代表mov ax,[1]、mov ax,[2]、mov ax,[3]等。 mov bx,idata就代表mov bx,l、mov bx,2、mov bx,3等。 mov ds,idata就代表mov ds,1、mov ds,2等,它们都是非法指令。 5.1 [bx] 看一看下面指令的功能: mov ax,[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 *16 +(bx)) = (ax) 5.1 [bx] 问题5
文档评论(0)