- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 寻址方式和指令系统 本章主要介绍8086/80286CPU的寻址方式和部分常用指令,并通过实际例子讲述了指令的功能和使用方法。通过学习,应该掌握汇编语言常用指令的格式、功能以及对CF、OF、SF和ZF标志位的影响,这是学习设计汇编语言程序的基础。 本章重点:寻址方式、常用指令 本章难点:寻址方式、记指令 第一节 指令结构 80X86汇编语言指令的一般格式为: [标号:] 指令助记符 [操作数] [;注释] 其中方括号[ ]中的内容为可选项。各部分的意义说明如下: 标号:符号地址,用来表示指令在内存中的位置,以便程序中的其它指令能引用该指令。它通常作为转移指令的操作数,以表示转向的目标地址。标号后应加冒号(:)作分隔符。 指令助记符:指令名称,是指令的英文缩写。如“MOV”表示传送指令,“ADD”表示加法指令等。 操作数:表示指令要操作的数据或数据所在的地址。80X86指令一般带有0~2个操作数:有些指令不需要操作数,有些指令需要一或两个操作数。如果有操作数,用一个空格符使之与助记符分隔开;若有两个操作数,则它们之间用逗号(,)分隔。将存放操作结果的操作数称作目的操作数,作第1个操作数;将指令中作为来源的操作数称作源操作数。 注释:由分号(;)开始,用来说明指令的功能,使程序更容易理解和阅读。 第二节 寻址方式 操作数有立即数、寄存器、存储器,方式多。 寻址方式:寻找操作数或操作数地址的方式。 了解操作数的表示方法,共七种。 一、立即寻址方式:操作数直接存放在指令中, 即立即数。 例:MOV AL,06H 则指令执行后:(AL)=06H。 特点:1、主要用来给寄存器或存储器赋值。 2、速度快、只能作源操作数,不能作目的操作数, 且源操作数长度应与目的操作数长度一致。 二、寄存器寻址方式 操作数在寄存器中,指令中给出寄存器名。 例:MOV BX,AX 如指令执行前,(AX)=0203H,(BX)=0405H; 则指令执行后:(BX)=0203H,(AX)保持不变。 特点:1、速度快。 以上两种寻址方式都与存储器无关,而以下五种寻址方式均与存储器有关。由于,存储器的各个段的段地址已分别由各个段寄存器存放,因此,我们需要寻找操作数的偏移地址,以便求出其物理地址。为此,我们将操作数的偏移地址称为有效地址(EA)。 规定:双操作数指令中不能同时使用存储器寻址方式。 三、直接寻址方式 1、操作数在存储器中,指令中指出其有效地址,默认段地址在DS寄存器中。计算机根据段地址和有效地址组成的逻辑地址计算出其物理地址,从该物理地址中取出操作数进行操作。 例:MOV AX,[2000H] 若(DS)=3000H,则执行时,计算机先计算出该存储器的物理地址=3000H*10H+2000H=32000H 若(32000H)=5080H,则指令执行后:(AX)=5080H 2、如果使用段前缀取其它段中的操作数,则在有效地址前必须用其它段寄存器名作为段前缀来指示。 例:MOV BX,CS:[3000H] 若(CS)=5100H,则执行时,计算机先计算出该存储器的物理地址=5100H*10H+3000H=54000H 若(54000H)=1234H,则指令执行后:(BX)=1234H 3、在汇编语言指令中,用立即数表示操作数地址时,该立即数必须要加方括号,表示该立即数是有效地址。实际上,我们经常使用符号地址来代替数值地址,此时,可不加方括号,两者等效。如: MOV AX,VALUE 此时VALUE为存放操作数的符号地址,上面指令也可以等效写成:MOV AX,[VALUE] 4、若VALUE在附加段中,则应指定段前缀如下: MOV AX,ES:VALUE 或:MOV AX, ES:[VALUE] 直接寻址方式适用于处理单个变量。如要处理某个存放在存储器里的变量,可以用直接寻址方式把该变量先取到一个寄存器中,然后再作进一步处理。 四、寄存器间接寻址方式 操作数的有效地址在寄存器中,而操作数则在存储器中,指令中给出寄存器名。 例:MOV AX,[BX] 若(DS)=3000H,(BX)=1000H,则物理地址为 30000H+1000H=31000H 若(31000H)=62B0H,则执行结果后(AX)=62B0H。 指令中也可以指定段前缀来取得其它段中的
文档评论(0)