80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节

上传人:E**** 文档编号:89083302 上传时间:2019-05-17 格式:PPT 页数:35 大小:241KB
返回 下载 相关 举报
80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节_第1页
第1页 / 共35页
80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节_第2页
第2页 / 共35页
80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节_第3页
第3页 / 共35页
80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节_第4页
第4页 / 共35页
80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节》由会员分享,可在线阅读,更多相关《80X86汇编语言程序设计课件作者廖智主编汇编语言第2章节(35页珍藏版)》请在金锄头文库上搜索。

1、第二章 寻址方式和指令系统,本章主要介绍8086/80286CPU的寻址方式和部分常用指令,并通过实际例子讲述了指令的功能和使用方法。通过学习,应该掌握汇编语言常用指令的格式、功能以及对CF、OF、SF和ZF标志位的影响,这是学习设计汇编语言程序的基础。 本章重点:寻址方式、常用指令 本章难点:寻址方式、记指令,第一节 指令结构,80X86汇编语言指令的一般格式为: 标号: 指令助记符 操作数 ;注释 其中方括号 中的内容为可选项。各部分的意义说明如下: 标号:符号地址,用来表示指令在内存中的位置,以便程序中的其它指令能引用该指令。它通常作为转移指令的操作数,以表示转向的目标地址。标号后应加冒

2、号(:)作分隔符。 指令助记符:指令名称,是指令的英文缩写。如“MOV”表示传送指令,“ADD”表示加法指令等。 操作数:表示指令要操作的数据或数据所在的地址。80X86指令一般带有02个操作数:有些指令不需要操作数,有些指令需要一或两个操作数。如果有操作数,用一个空格符使之与助记符分隔开;若有两个操作数,则它们之间用逗号(,)分隔。将存放操作结果的操作数称作目的操作数,作第1个操作数;将指令中作为来源的操作数称作源操作数。 注释:由分号(;)开始,用来说明指令的功能,使程序更容易理解和阅读。,第二节 寻址方式,操作数有立即数、寄存器、存储器,方式多。 寻址方式:寻找操作数或操作数地址的方式。

3、 了解操作数的表示方法,共七种。 一、立即寻址方式:操作数直接存放在指令中, 即立即数。 例:MOV AL,06H 则指令执行后:(AL)=06H。 特点:1、主要用来给寄存器或存储器赋值。 2、速度快、只能作源操作数,不能作目的操作数, 且源操作数长度应与目的操作数长度一致。,二、寄存器寻址方式 操作数在寄存器中,指令中给出寄存器名。 例:MOV BX,AX 如指令执行前,(AX)=0203H,(BX)=0405H; 则指令执行后:(BX)=0203H,(AX)保持不变。 特点:1、速度快。 以上两种寻址方式都与存储器无关,而以下五种寻址方式均与存储器有关。由于,存储器的各个段的段地址已分别

4、由各个段寄存器存放,因此,我们需要寻找操作数的偏移地址,以便求出其物理地址。为此,我们将操作数的偏移地址称为有效地址(EA)。 规定:双操作数指令中不能同时使用存储器寻址方式。,三、直接寻址方式 1、操作数在存储器中,指令中指出其有效地址,默认段地址在DS寄存器中。计算机根据段地址和有效地址组成的逻辑地址计算出其物理地址,从该物理地址中取出操作数进行操作。 例:MOV AX,2000H 若(DS)=3000H,则执行时,计算机先计算出该存储器的物理地址=3000H*10H+2000H=32000H 若(32000H)=5080H,则指令执行后:(AX)=5080H 2、如果使用段前缀取其它段中

5、的操作数,则在有效地址前必须用其它段寄存器名作为段前缀来指示。 例:MOV BX,CS:3000H 若(CS)=5100H,则执行时,计算机先计算出该存储器的物理地址=5100H*10H+3000H=54000H 若(54000H)=1234H,则指令执行后:(BX)=1234H,3、在汇编语言指令中,用立即数表示操作数地址时,该立即数必须要加方括号,表示该立即数是有效地址。实际上,我们经常使用符号地址来代替数值地址,此时,可不加方括号,两者等效。如: MOV AX,VALUE 此时VALUE为存放操作数的符号地址,上面指令也可以等效写成:MOV AX,VALUE 4、若VALUE在附加段中,

6、则应指定段前缀如下: MOV AX,ES:VALUE 或:MOV AX, ES:VALUE 直接寻址方式适用于处理单个变量。如要处理某个存放在存储器里的变量,可以用直接寻址方式把该变量先取到一个寄存器中,然后再作进一步处理。,四、寄存器间接寻址方式 操作数的有效地址在寄存器中,而操作数则在存储器中,指令中给出寄存器名。 例:MOV AX,BX 若(DS)=3000H,(BX)=1000H,则物理地址为 30000H1000H31000H 若(31000H)62B0H,则执行结果后(AX)=62B0H。 指令中也可以指定段前缀来取得其它段中的数据。如 MOV AX,ES:BX 规定:可用的寄存器

7、只有BX、SI和DI,且寄存器必须加方括号。默认段地址在DS寄存器中。 这种寻址方式用于表格处理,执行完一条指令后,只需修改寄存器内容就可以取出表格的下一项。,五、寄存器相对寻址方式 操作数的有效地址为寄存器内容和位移量之和,指令中给出寄存器名和位移量。 例:MOV AX,COUNTSI 若(DS)=3000H,(COUNT)=3000H,(SI)=2000H 则物理地址为:30000H+3000H+2000H=35000H 若(35000H)=1234H,则指令执行后:(AX)=1234H。 上述指令也可以写成:MOV AX,COUNT+SI,两者等效。 这种寻址方式也可以使用段前缀:MOV

8、 DL,ES:STRINGSI 规定:可用的寄存器只有BX、BP、SI和DI。且寄存器必须加方括号。当使用BP时,默认段为堆栈段SS;使用其它寄存器时,默认段为数据段DS。 寄存器相对寻址方式同样可用于表格处理,表格首地址设为位移量,修改基址或变址寄存器的内容来取得表格中的值。,六、基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,指令中给出基址和变址寄存器名。 例:MOV AX,BXDI 若(DS)=3000H,(BX)=1000H,(DI)=0C00H, 则物理地址为:30000H+1000H+0C00H=31C00H 若(31C00H)=562DH,则指令执行

9、后:(AX)=562DH。 上述指令也可以写成:MOV AX,BX+DI,两者等效。 这种寻址方式可使用段前缀,如:MOV AX,ES:BXSI 规定:可用的寄存器只有BX、BP、SI和DI。且两个寄存器必须加方括号。当基址寄存器用BP时,默认段为堆栈段SS;当基址寄存器用BX时,默认段为数据段DS。(以基址为准) 基址变址寻址方式同样适用于数组或表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组中的各个元素。由于基址寄存器和变址寄存器都可以修改,所以比直接变址方法更加灵活。,七、相对基址变址寻址方式 操作数的有效地址是一个基址寄存器、一个变址寄存器的内容和指令中指定的位移量之和,

10、它所允许使用的寄存器及其对应的默认段与基址变址寻址方式相同。 例:MOV AX,MASKBXSI 若(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H, 则物理地址为:30000H+2000H+1000H+0250H=33250H 若(33250H)=3456H,则指令执行后:(AX)=3456H 上述指令也可以写成:MOV AX,MASK+BX+SI MOV AX,MASKBX+SI MOV AX,MASK+BXSI MOV AX,MASK+SIBX 这种寻址方式也可以使用段前缀。 这种寻址方式适用于二维数组的处理。,不加方括号-立即寻址 立即数 加方括号

11、-直接寻址 操 不加方括号-寄存器寻址 作 1个-寄存器间接寻址 数 寄存器 加方括号 1个+位移量-寄存器相对寻址 BX、BP 基址+变址-基址变址寻址 SI、DI 基+变+位移量-相对基址变址寻址,第三节 指令系统,这一节主要介绍8086/80286的几种比较常用的指令,只要掌握了这些常用指令,就可以设计大多数汇编语言程序了。 一、数据传送指令 在寄存器、存储单元或I/O端口之间传送数据和地址,是最简单、最常用的一类指令。它通常分为四种: (一)通用数据传送指令:MOV、PUSH、POP、XCHG交换 1MOV 传送指令 指令格式:MOV DST,SRC 功能:(DST)(SRC),即将源

12、操作数传送到目的操作数中。 其中DST表示目的操作数,SRC表示源操作数。,特点:1)源操作数与目的操作数的长度必须一致。 正确指令:MOV AL,BL MOV BX,DX 不正确指令:MOV AX,BL MOV AL,3824H 2)目的操作数不能为CS、IP或立即数。 3)不能在存储单元之间直接传送数据。 例:MOV AR2,AR1是错误的。 正确指令:MOV AX,AR1 MOV AR2,AX 4)不能在段寄存器之间直接传送数据。 与3)类似,要以通用寄存器为桥梁。 例:MOV AX,ES MOV DS,AX 5)立即数不能直接送段寄存器。通用寄存器来实现传送。 例:MOV AX,DAT

13、A_SEG ;数据段寄存器初始化 MOV DS,AX 6) MOV指令不影响标志位。,2PUSH进栈指令和POP出栈指令 格式:PUSH SRC 功能:(SP)(SP)2 (SP)1,(SP)(SRC) 格式:POP DST 功能:(DST)(SP)1,(SP) (SP)(SP)2 堆栈是以“先进后出”为工作方式的一个特殊的数据存储区,它必须存在于内存的堆栈段中,因而其段地址存放于SS寄存器中。堆栈一端固定,是栈底;另一端浮动,唯一的数据出入口,是栈顶。也只有唯一的堆栈指针寄存器SP,任何时候都指向当前的栈顶地址。所以PUSH和POP指令都必须根据当前SP的内容来确定进栈或出栈的存储单元,而且

14、必须及时自动修改指针,以保证SS:SP指向当前的栈顶。 (向上生成,与单片机相反) 例:PUSH AX;(AX)1234H POP AX;执行后(AX)=1234H(见书),特点: 1)SRC、DST只能为字的寄存器或存储器。 不正确指令:PUSH AL 2) DST不能为CS、IP。 不正确指令:POP CS 3) PUSH和POP是互补的指令,因此通常成对使用,以避免程序出错-“栈平衡”。 4) PUSH和POP指令均不影响标志位。,3XCHG 交换指令 格式:XCHG OPR1,OPR2 功能:(OPR1)(OPR2) 其中OPR表示操作数,既是目的,又是源操作数。 例:XCHG BX,

15、DI 如指令执行前:(BX)=6300H,(DI)=0246H,(DS)=2F00H, (2F246H)=4100H OPR2的物理地址=2F000H+0246H=2F246H 则指令执行后:(BX)=4100H,(2F246H)=6300H 特点: 1)操作数不能使用立即数和段寄存器。 2)存储器之间不能直接交换。所以,只可在寄存器之间或者寄存器与存储器之间交换信息。 3)目的操作数与源操作数的长度必须一致。 4)不影响标志位。,(二)累加器专用传送指令:IN、OUT、XLAT,这组指令只限于使用累加器AX或AL传送信息。 1IN输入、OUT输出指令 格式:IN AL/AX,PORT/DX

16、功能:(AL)/(AX)(PORT)/(DX) OUT PORT/DX,AL/AX (AL)/(AX)(PORT)/(DX) 这两条指令用于将外部设备与CPU进行信息传送。外部设备是用端口地址表示操作数:8位立即数(PORT256)或通过DX寄存器间接给出的端口地址(65536个)(接口的地址线)。 CPU由AL(字节)/AX(字)表示传送的信息(数据线)。 例:IN AL,61H 例:MOV DX,378H MOV AL,41H OUT DX,AL,2XLAT(查表)换码指令 格式:XLAT OPR 或:XLAT 功能:(AL)DS:(BX)+(AL) 该指令的功能是寻找内存表中的一个字节,并送入AL寄存器中,其中操作数OPR应该为表名。 使用步骤:1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号