第2章 汇编语言程序设计.ppt
《第2章 汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第2章 汇编语言程序设计.ppt(188页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第二章第二章 汇编语言程序设计汇编语言程序设计 80X86 80X86的寻址方式的寻址方式 80X8680X86的指令系统的指令系统 汇编语言程序格式汇编语言程序格式 汇编语言程序设计方法汇编语言程序设计方法 n一条指令就是完成一种操作命令,它由操作码和操作数构成,用二进制数表示。n操作码表示计算机所要执行的操作,操作数表示操作的对象,也就是指令执行操作的过程中所需要的数据或地址。n一条指令一定包含这样的信息:是做什么操作?操作数从哪里来?n一般说来,操作数可以跟随在指令的操作码之后,称为立即数;也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存中,称为存储器操作数
2、。指令规定了操作数存放的位置,在执行指令时需要根据这个信息找到需要的操作数。n所谓寻址方式,就是寻找操作数的方式或过程,处理器设计了许多方式用来指明操作数的位置。根据操作数可能的存放位置,有各种不同的寻址方式。第一节第一节 80X8680X86的寻址方式的寻址方式固定寻址固定寻址立即数寻址立即数寻址寄存器寻址寄存器寻址存储器寻址存储器寻址I/OI/O端口寻址端口寻址与转移地址有关的寻址与转移地址有关的寻址 1 1、固定寻址固定寻址n 是一种特定的单操作数指令,其操作数隐是一种特定的单操作数指令,其操作数隐含在操作码中,常常是对某一个固定的寄含在操作码中,常常是对某一个固定的寄存器进行操作存器进
3、行操作,而这个寄存器名又隐含在操而这个寄存器名又隐含在操作码中。总之,在固定寻址的指令中,操作码中。总之,在固定寻址的指令中,操作数是被隐含在指令中的,不需要执行总作数是被隐含在指令中的,不需要执行总线周期,执行速度快。线周期,执行速度快。例如:例如:nCBW ;(AL)(AX)CBW ;(AL)(AX)该指令指定的操作数该指令指定的操作数在在ALAL寄存器中,其功能是将寄存器中,其功能是将ALAL寄存器中的符号寄存器中的符号位扩展到位扩展到AHAH中。形成中。形成1616位的操作数存放在位的操作数存放在AXAX中。中。nPUSH AXPUSH AX;源操作数是;源操作数是AXAX寄存器,目的
4、操作数寄存器,目的操作数被隐含在存储器的堆栈中,其操作数地址是堆被隐含在存储器的堆栈中,其操作数地址是堆栈栈顶。该指令的功能是将栈栈顶。该指令的功能是将AXAX寄存器的内容压寄存器的内容压入堆栈。入堆栈。2、立即数寻址立即数寻址n这种寻址方式下,操作数就包含在指令中,作这种寻址方式下,操作数就包含在指令中,作为指令的一部分,它与操作码一起存放在代码为指令的一部分,它与操作码一起存放在代码段中。它的特点是执行速度快,主要用来给寄段中。它的特点是执行速度快,主要用来给寄存器赋值。立即数可以是存器赋值。立即数可以是8 8位的或位的或1616位的。位的。n立即数寻址只能用于源操作数的寻址,而不能立即数
5、寻址只能用于源操作数的寻址,而不能用于目的操作数的寻址。用于目的操作数的寻址。n因为操作数是直接从指令中取得,不需要执行因为操作数是直接从指令中取得,不需要执行总线周期,执行速度非常快。总线周期,执行速度非常快。例如:例如:nMOV ALMOV AL,02H02H;将一个;将一个8 8位立即数送位立即数送ALAL寄寄存器。指令执行完后,(存器。指令执行完后,(ALAL)=02H=02H。nMOV AXMOV AX,1102H ;1102H ;给给AXAX寄存器赋值寄存器赋值nMOV BXMOV BX,0A123H0A123H;将一个;将一个1616位立即数送位立即数送BXBX寄存器。指令执行完
6、后,寄存器。指令执行完后,(BXBX)=0A123H=0A123H。MOV BX MOV BX,0A123H0A123H 指令执行后指令执行后(BX)=0A123H(BX)=0A123HBX:代码段A123OP:存储器例:例:3、寄存器寻址寄存器寻址n操作数在操作数在CPUCPU内部的寄存器中,指令内部的寄存器中,指令指定寄存器名,操作数的位数由寄指定寄存器名,操作数的位数由寄存器名决定。这种寄存器寻址方式存器名决定。这种寄存器寻址方式的操作数就在寄存器中,不需要访的操作数就在寄存器中,不需要访问内存来取得操作数,所以它的执问内存来取得操作数,所以它的执行速度比较快。行速度比较快。例如:例如:
7、nMOV AXMOV AX,BXBX;将;将BXBX的内容送的内容送AXAX中。中。nMOV 1234HMOV 1234H,BXBX;将;将BXBX内容送地址为内容送地址为1234H1234H的内存单元中。的内存单元中。nINC CXINC CX;CXCX寄存器中的内容加寄存器中的内容加1 1。4、存储器寻址存储器寻址n如果操作数存放在内存储器中,则指令中需要给出操作数的地址信息。用存储器寻址的指令,其操作数一定在数据段、附加段、堆栈段的主存储器中,指令中一定包含有存储器单元的地址或产生存储器单元地址的信息。n执行这类指令时,CPU首先根据指令提供的地址信息计算出偏移地址,用地址产生器产生能直
8、接访问内存单元的物理地址,从内存中取得操作数,再执行指令规定的操作。n双操作数指令的两个操作数中,只能有一个使用存储器寻址方式。n80X86允许使用段跨域前缀来改变系统所指定的默认段,如允许数据存放在除DS段以外的其他段,此时程序中应使用段跨越前缀。但是在下面三种情况下,不允许使用段跨越前缀。n(1)串处理指令的目的串必须用ES段。n(2)PUSH指令的目的操作数和POP指令的源操作数必须使用SS段。n(3)指令必须放在CS段中。直接寻址方式直接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式寄存器相对寻址方式 基址变址寻址方式基址变址寻址方式 相对基址变址寻址方式相对基址变址寻
9、址方式 比例变址寻址方式比例变址寻址方式 4、存储器寻址存储器寻址n操作数的偏移地址直接由指令给出(就包含在操作数的偏移地址直接由指令给出(就包含在指令中),其默认段在数据段。也就是说,通指令中),其默认段在数据段。也就是说,通常用常用DSDS寄存器的内容作段基址,也可以通过段寄存器的内容作段基址,也可以通过段跨越前缀来取得其他段中的操作数。直接寻址跨越前缀来取得其他段中的操作数。直接寻址方式适合处理单个变量。方式适合处理单个变量。直接寻址方式直接寻址方式例如:例如:nMOV ALMOV AL,2000H2000H;将;将DSDS段中偏移地址为段中偏移地址为2000H2000H的字节单元内容送
10、寄存器的字节单元内容送寄存器ALAL中中.nMOV AXMOV AX,ESES:2000H2000H;将附加段中偏移地址;将附加段中偏移地址为为2000H2000H的字单元内容送寄存器的字单元内容送寄存器AXAX中中.MOV AX,1122H;MOV AX,1122H;设设(DS)=3000H(DS)=3000H存储器中操作码后面是存储器中操作码后面是操作数的偏移地址操作数的偏移地址.物理地址物理地址=3000H*16+1122H=31122H,3000H*16+1122H=31122H,该内存单元的内容送该内存单元的内容送AXAX寄存器寄存器.执行指令后,执行指令后,(AX)=3456H(A
11、X)=3456H例:例:n操作数的偏移地址存放在指令指定的寄存器操作数的偏移地址存放在指令指定的寄存器中,寄存器作为指针指向内存单元,这样的中,寄存器作为指针指向内存单元,这样的寄存器称为间址寄存器。操作数在存储器中。寄存器称为间址寄存器。操作数在存储器中。n1616位系统中,间址寄存器可以是基址寄存器位系统中,间址寄存器可以是基址寄存器BXBX、BPBP或变址寄存器或变址寄存器SISI、DIDI。寄存器间接寻。寄存器间接寻址方式下,指令会根据所使用的间址寄存器址方式下,指令会根据所使用的间址寄存器指定默认的段。指定默认的段。n寄存器间接寻址方式主要用来处理一维数组寄存器间接寻址方式主要用来处
12、理一维数组或表格,只要改变间址寄存器的内容,用一或表格,只要改变间址寄存器的内容,用一条寄存器间接寻址指令就可以对连续的内存条寄存器间接寻址指令就可以对连续的内存单元的内容进行访问。单元的内容进行访问。寄存器间接寻址方式寄存器间接寻址方式(1 1)如果指令指定)如果指令指定BXBX、SISI、DIDI寄存器为间址寄寄存器为间址寄存器,则操作数默认在数据段中,用存器,则操作数默认在数据段中,用DSDS寄存器寄存器作段基地址,操作数的物理地址是作段基地址,操作数的物理地址是DSDS寄存器的寄存器的内容左移内容左移4 4位加上间址寄存器的内容。位加上间址寄存器的内容。例如:例如:nMOV AXMOV
13、 AX,BX BX;数据段中一个字送;数据段中一个字送AXAXnMOV AXMOV AX,ESES:DI DI;附加段中一个字送;附加段中一个字送AXAX(2 2)如果指令指定)如果指令指定BPBP寄存器为间址寄存器,则寄存器为间址寄存器,则操作数默认在堆栈段中,用操作数默认在堆栈段中,用SSSS寄存器内容作段寄存器内容作段首地址,操作数的物理地址是首地址,操作数的物理地址是SSSS寄存器的内容寄存器的内容左移左移4 4位加上间址寄存器位加上间址寄存器BPBP的内容。的内容。例如:例如:nMOV AXMOV AX,BP BP;堆栈段中一个字送;堆栈段中一个字送AXAXnMOV AXMOV AX
14、,DSDS:BP BP;数据段中一个字送;数据段中一个字送AX AX 例:例:MOV AX,BX;MOV AX,BX;设设(DS)=2000H,(BX)=1234H(DS)=2000H,(BX)=1234H物理地址物理地址=20000H+1234H=20000H+1234H =21234H =21234H指令执行后指令执行后(AX)=5678H(AX)=5678Hn操作数的偏移地址是间址寄存器的内容加上位操作数的偏移地址是间址寄存器的内容加上位移量移量,位移量是地址的一部分。位移量是一个带位移量是地址的一部分。位移量是一个带符号的整数。符号的整数。n通常可以将数组或表格的首地址设置成位移量,通
15、常可以将数组或表格的首地址设置成位移量,利用修改基址寄存器或变址寄存器的内容来取利用修改基址寄存器或变址寄存器的内容来取得数组或表格中的值。得数组或表格中的值。寄存器相对寻址方式寄存器相对寻址方式 例如例如:lMOV AXMOV AX,1000HBX 1000HBX lMOV AXMOV AX,ESES:10HSI 10HSI lMOV AXMOV AX,TABLESITABLESI;位移量位移量TABLETABLE是表是表的首地址的首地址,间址寄存器间址寄存器SISI的内容加上位移的内容加上位移量就是要访问的表中的某一数据量就是要访问的表中的某一数据.MOV AX,COUNTBX MOV A
16、X,COUNTBX(DS)=3000H,(BX)=1234H,COUNT=1000H 物理地址物理地址=30000H+1234H+1000H=30000H+1234H+1000H =32234H =32234H 指令执行后指令执行后 (AX)=5678H(AX)=5678H例:例:n操作数的偏移地址一部分在基址寄存器,一操作数的偏移地址一部分在基址寄存器,一部分在变址寄存器,基址寄存器的内容与变部分在变址寄存器,基址寄存器的内容与变址寄存器的内容之和就是操作数的偏移地址。址寄存器的内容之和就是操作数的偏移地址。n对于对于1616位系统,若用位系统,若用BXBX作基址寄存器,操作作基址寄存器,操
17、作数隐含在数据段中,数隐含在数据段中,DSDS寄存器的内容是操作寄存器的内容是操作数的段首地址;若用数的段首地址;若用BPBP作基址寄存器,操作作基址寄存器,操作数隐含在堆栈段中,数隐含在堆栈段中,SSSS寄存器的内容是操作寄存器的内容是操作数的段首地址。数的段首地址。基址变址寻址方式基址变址寻址方式n存放在基址寄存器(BX或BP)中的内容是基地址,它通常用来指向数据段中数组或字符串的首地址;而存放在变址寄存器(SI或DI)中的内容是变址,它通常用来访问数组中的某个元素或字符串中的某个字符。n这种寻址方式适合于数组的处理,通常用基址寄存器保存数组的起始地址,而用变址寄存器指示数组中元素的相对位
18、置。n这种基址加变址的寻址方式也可以用来处理数组或表格,改变基址、变址寄存器的内容,就可以用来处理二维数组。例如:例如:n MOV AXMOV AX,BXSI BXSI;假设;假设(DSDS)=3000H=3000H,(,(BXBX)=0158H=0158H,(SISI)=10A4H=10A4H,则偏移地址为,则偏移地址为0158H+10A4H=11FCH0158H+10A4H=11FCH,物理地址,物理地址为为30000H+11FCH=311FCH30000H+11FCH=311FCH。指令执行后,将。指令执行后,将311FCH311FCH和和311FDH311FDH相相邻两个单元的内容送邻
19、两个单元的内容送AXAX寄存器,其中,高地址单元内容送寄存器,其中,高地址单元内容送AHAH,低地址单元内容送,低地址单元内容送ALAL。n MOV AXMOV AX,ESES:BXSI BXSI;BXBX和和SISI寄存器的内容之和就是操寄存器的内容之和就是操作数的偏移地址,它在附加段中,它的段首地址就是作数的偏移地址,它在附加段中,它的段首地址就是ESES寄存寄存器的内容。器的内容。MOV AX,BXSI MOV AX,BXSI(DS)=2100H,(SI)=1234H,(BX)=1100H(DS)=2100H,(SI)=1234H,(BX)=1100H 物理地址物理地址=21000H+1
20、234H+1100H=21000H+1234H+1100H =23334H =23334H 指令执行后指令执行后 (AX)=5678H(AX)=5678H例例:n带位移量的基址变址寻址称为相对的基址变址寻址带位移量的基址变址寻址称为相对的基址变址寻址方式。关于操作数所在段的隐含规定,与上述基址方式。关于操作数所在段的隐含规定,与上述基址变址寻址方式一样,也是由基址寄存器决定选择哪变址寻址方式一样,也是由基址寄存器决定选择哪个段寄存器。个段寄存器。n相对基址变址寻址方式下的偏移地址的计算方法是:相对基址变址寻址方式下的偏移地址的计算方法是:1616位偏移地址位偏移地址=基址寄存器的内容基址寄存器
21、的内容+变址寄存器的内变址寄存器的内容容+8+8位或位或1616位的位移量位的位移量 其中,基址寄存器可以是其中,基址寄存器可以是BXBX或或BPBP;变址寄存器可以;变址寄存器可以是是SISI或或DIDI。位移量可以是。位移量可以是8 8位或位或1616位的带符号数。位的带符号数。相对基址变址寻址方式相对基址变址寻址方式n这种寻址方式为访问堆栈段中的数组带来方便,如果用基址寄存器BP存放堆栈顶的地址,用位移量表示栈顶到数组第一个元素的距离,则可以用变址寄存器来访问数组中的每一个元素。这种寻址方式也可以用于二维数组的寻址。例如:例如:nMOV AXMOV AX,100HBXSI 100HBXS
22、I;BXBX和和SISI寄存器的内容之和加寄存器的内容之和加上位移量就是操作数的偏移地址,操作数在数据段中。上位移量就是操作数的偏移地址,操作数在数据段中。nMOV AXMOV AX,ESES:100HBXSI100HBXSI;该指令的操作数的偏移;该指令的操作数的偏移地址与上例相同,但它在附加段中。地址与上例相同,但它在附加段中。nMOV AXMOV AX,100HBPSI 100HBPSI;这是;这是1616位寻址,基址寄存器位寻址,基址寄存器BPBP与变址寄存器与变址寄存器SISI的内容之和,加上位移量的内容之和,加上位移量100H100H,就,就是操作数的偏移地址,操作数隐含在堆栈段中
23、。将堆是操作数的偏移地址,操作数隐含在堆栈段中。将堆栈段中的偏移地址为栈段中的偏移地址为BP+SI+100HBP+SI+100H的一个字数据送的一个字数据送AXAX中。中。比例变址寻址方式只能在比例变址寻址方式只能在3232位及以后的系位及以后的系统中使用。操作数的有效地址是变址寄统中使用。操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子存器的内容乘以指令中指定的比例因子再加上位移量。例如:再加上位移量。例如:MOV AXMOV AX,EBX+4*EDI+20HEBX+4*EDI+20H;这是这是3232位寻址,指令执行的结果是将数据位寻址,指令执行的结果是将数据段中偏移地址为段中偏
24、移地址为(EBX)+4*(EDI)+20H(EBX)+4*(EDI)+20H的内的内存单元的一个字数据送存单元的一个字数据送AXAX寄存器中寄存器中.比例变址寻址方式比例变址寻址方式 5、I/OI/O端口寻址端口寻址 直接端口寻址直接端口寻址指令中包含指令中包含I/OI/O端口的直接地址端口的直接地址 (8(8位位端口端口),直接端口寻址的端口数是直接端口寻址的端口数是256256个。个。nIN ALIN AL,80H80H;将;将80H80H端口的字节数据(端口的字节数据(8 8位)输入到位)输入到ALAL寄寄存器中。存器中。nIN AXIN AX,80H80H;将;将80H80H端口的字数
25、据(端口的字数据(1616位)输入到位)输入到AXAX寄存寄存 器中。器中。nOUT 80HOUT 80H,ALAL;将;将ALAL寄存器的内容输出到寄存器的内容输出到80H80H端口(写数端口(写数据),这时据),这时80H80H端口宽度(数据位)是端口宽度(数据位)是8 8位的。位的。nOUT 80HOUT 80H,AXAX;将;将AXAX寄存器的内容输出到寄存器的内容输出到80H80H端口(写数端口(写数据),这时据),这时80H80H端口宽度(数据位)是端口宽度(数据位)是1616位的。位的。直接端口地址也可以用符号表示。直接端口地址也可以用符号表示。nOUT PORTOUT PORT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 汇编语言程序设计 汇编语言 程序设计
限制150内