《微机原理第02章》由会员分享,可在线阅读,更多相关《微机原理第02章(133页珍藏版)》请在金锄头文库上搜索。
1、第第2章章 微处理器指令系统微处理器指令系统微微处理器的内部理器的内部结构构8086/8088的的寻址方式址方式8086/8088指令系指令系统第第2章章 微处理器指令系统微处理器指令系统微微处理器的内部理器的内部结构构8086/8088的的寻址方式址方式8086/8088指令系指令系统微处理器的基本结构微处理器的基本结构算术逻辑单元算术逻辑单元ALUArithmetic Logic Unit寄存器组寄存器组 通用寄存器,地址寄存器,标志寄存器通用寄存器,地址寄存器,标志寄存器指令处理单元指令处理单元8086/80888086/8088的功能结构的功能结构总线接口接口单元元BIU(对外)外)B
2、us Interface Unit负责CPU对存存储器器(指令,数据)(指令,数据)和外和外设进行行访问执行行单元元EU(不(不对外)外)Execution Unit负责指令的指令的译码、执行和数据的运算行和数据的运算AH ALBH BLCH CLDH DLSPBPDISI通通用用寄寄存存器器运算寄存器运算寄存器ALU标志志执行部分行部分控制控制电路路1 2 3 4 CSDSSSESIP内部寄存器内部寄存器总线控制控制逻辑电路路20位位8位位4个字个字节指令指令队列列缓冲器冲器外外总线执行行单元元(EU)总线接口接口单元元(BIU)8088CPU结构构图(图2-2)数据寄存器数据寄存器地址寄存
3、器地址寄存器地址地址译码指令预取指令预取取指令取指令1执行指令执行指令1取指令取指令2执行指令执行指令2取指令取指令3执行指令执行指令38086/8088的寄存器结构的寄存器结构通用寄存器通用寄存器 AX、BX、CX、DX、SI、DI、BP、SP指令指指令指针 IP标志寄存器志寄存器 FLAGS段寄存器段寄存器 CS、SS、DS、ES参参见:图2-3(P19)16位通用寄存器位通用寄存器AX:累加器。累加器。 (Accumulator)BX:基址寄存器。基址寄存器。(Base address)CX:计数器。数器。(Counter)DX:数据寄存器。数据寄存器。(Data register)SI
4、: 源源变址寄存器。址寄存器。 (Source Index)DI: 目的目的变址寄存器。址寄存器。(Destination Index)SP:堆堆栈指指针寄存器。寄存器。(Stack Pointer)BP:基址指基址指针寄存器。寄存器。(Base Pointer)8位通用寄存器位通用寄存器4个个16位通用寄存器(位通用寄存器(AX、BX、CX、DX)可各分成可各分成高高8位位和和低低8位位两个独立的两个独立的8位寄存器,位寄存器,它们分别是:它们分别是:AX: AH、ALBX: BH、BLCX: CH、CLDX: DH、DL指令指针指令指针IPIP指令指针指令指针IP(Instruction
5、Pointer)指示下一条指令的地址。指示下一条指令的地址。IP是一个专用寄存器,用户不能直接访问。是一个专用寄存器,用户不能直接访问。(透明寄存器)(透明寄存器)标志寄存器标志寄存器FLAGS分分为两两类状状态标志志:用于反映指令的用于反映指令的执行行结果(果(自自动)控制控制标志志:用于控制指令的用于控制指令的执行形式(行形式(人工人工)各种各种标志存放于一个志存放于一个16位的位的标志寄存器志寄存器FLAGS中中1514131211109876543210OF DFIFTFSF ZFAFPFCF奇偶标志奇偶标志PF (Parity Flag)当运算当运算结果的低果的低8位中位中1的个数的
6、个数为偶数偶数时,则PF置置1,反之置,反之置0。01101000B01101000B10101011B10101011B+ 01000000B+ 01000000B+ 11111111B+ 11111111B1 10 01 10 01 1000B000B1 10 01 10 01 10 01 10B0BPF=0PF=0PF=1PF=1零标志零标志ZF (Zero Flag)运算运算结果果为0时,ZF置置1,否,否则ZF置置0。01101000B01101000B00010000B00010000B+ 01000000B+ 01000000B+ 11110000B+ 11110000B1010
7、1000B10101000B0000000000000000B BZF=0ZF=0ZF=1ZF=1符号标志符号标志SF(Sign Flag)运算运算结果的最高位果的最高位为1时,SF置置1,否,否则SF置置0。00101000B00101000B10101011B10101011B+ 01000000B+ 01000000B+ 11111111B+ 11111111B0 01101000B1101000B1 10101010B0101010BSF=0SF=0SF=1SF=1进位标志进位标志CF (Carry Flag)做做无符号数无符号数加减运算加减运算时,若最高位有,若最高位有进位或位或借位
8、,借位,则CF=1,反之,反之CF=0。0 01101000B1101000B1041041 10101011B0101011B171171+ + 0 01000000B1000000B + + 6464+ + 1 11111111B1111111B+ 255+ 2551 10101000B0101000B1681681 10101010B0101010B170170CFCF= =0 0C CF=F=1 1辅助进位标志辅助进位标志AF (Auxitiary Carry Flag)做加减运算做加减运算时,若,若D3有向有向D4的的进位或借位,位或借位,则AF置置1,反之置,反之置0。011001
9、101 1000B000B101010101 1011B011B+ 0100+ 01000 0000B000B+ 1111+ 11111 1111B111B101010101 1000B000B101010101 1010B010BAF=0AF=0AF=1AF=1溢出标志溢出标志OF (Overflow Flag)0 01101000B1101000B(+104)(+104)1 10101011B0101011B(-85)(-85)+ + 0 01000000B1000000B+ (+64)+ (+64)+ + 1 11111111B1111111B+ (-1)+ (-1)1 10101000
10、B0101000B(-88)(-88)1 10101010B0101010B(-86)(-86)OF=1OF=1OF=0OF=0有符号数的加减运算超有符号数的加减运算超过了所能表示的范了所能表示的范围时,OF=1,否,否则OF=0。CF和和OF的对比的对比有符号数有符号数的加减运算超的加减运算超过了所能表示的范了所能表示的范围时,OF=1,否,否则OF=0。做做无符号数无符号数加减运算加减运算时,若最高位有,若最高位有进位或借位,位或借位,则CF=1,反之,反之CF=0。01101000B01101000B(+104)(+104)104104+ + 01000000B01000000B + +
11、 (+64)(+64)+ + 646410101000B10101000B(-88)(-88)168168OF=1,CF=0OF=1,CF=0有符号有符号无符号无符号10101011B10101011B(-85)(-85)171171+ + 11111111B11111111B+ (-1)+ (-1)+ 255+ 25510101010B10101010B(-86)(-86)170170OF=0OF=0,CF=1,CF=1有符号有符号无符号无符号陷阱标志陷阱标志TF (Trap Flag)TF1,CPU单步步执行指令;行指令;TF0,CPU正常工作。正常工作。用于程序的用于程序的调试中断允许标
12、志中断允许标志IF (Interrupt enable Flag)确定确定外部中断是否可以被外部中断是否可以被CPU响响应,或者,或者说当前工作能否被打当前工作能否被打扰。 IF1 允允许中断中断 IF0 禁止中断。禁止中断。方向标志方向标志DF (Direction Flag)用于串操作指令中控制地址的用于串操作指令中控制地址的变化方向。化方向。DF0 则每次串操作后存每次串操作后存储器地址自器地址自动增加;增加;DF1 则每次串操作后存每次串操作后存储器地址自器地址自动减少。减少。进借借位位标志志奇奇偶偶标志志半半进借借位位标志志零零标志志符符号号标志志单步步中中断断中中断断允允许方方向向
13、标志志溢溢出出标志志1-有有进、借位、借位0-无无进、借位、借位1-低低8位有偶数个位有偶数个10-低低8位有奇数个位有奇数个11-低低4位向高位向高4位有位有进、借位、借位0-低低4位向高位向高4位无位无进、借位、借位1-结果果为00-结果不果不为0OF DFIFTFSF ZFAFPFCF1-有溢出有溢出0-无溢出无溢出位位 (bit) :二:二进制位,制位,为0或或1字字节(Byte) :8个二个二进制位制位字字 (Word) :2字字节(16位位)双字双字(DWord):4字字节(32位位)千字千字节(KB) :210个字个字节兆字兆字节(MB) :220个字个字节 8086/8088的
14、存储器结构的存储器结构存储器以存储器以字节字节为单位存储信息为单位存储信息每个每个存储单元存储单元存储一个字节的数据存储一个字节的数据8086/8088的存储器结构的存储器结构每个存每个存储单元都有一个地址(元都有一个地址(编号)。号)。8086/8088有有20根地址根地址线。最大可最大可寻址的存址的存储器器单元数元数为2201MB。其物理地址范其物理地址范围为00000HFFFFFH。例如:例如:00002H34H。参考:参考:图2-5 P228086/8088的存储器结构的存储器结构D7D0字节字节D15D0字字D31D0双字双字D7 D000006H78H00005H56H00004H
15、12H00003H34H00002H00001H00000H低地址低地址LSBMSB小端方式小端方式字或双字信息在存储器中占据相邻的字或双字信息在存储器中占据相邻的2 2个或个或4 4个存个存储单元。储单元。多字节数据占据的地址空间用多字节数据占据的地址空间用低地址低地址来表示。来表示。低字节对低地址、高字节对高地址低字节对低地址、高字节对高地址( (高高低低高高低低) )例如:例如:00002H00002H1234H1234H意指:意指:00002H00002H34H34H, 00003H 00003H12H12H。存储器的分段管理存储器的分段管理8086/8088将将1MB存存储器空器空间
16、分成若干个分成若干个逻辑段段来管理。每个段最大限制来管理。每个段最大限制为64KB。采用采用逻辑地址地址(段地址:偏移地址段地址:偏移地址)的形式来表达段的形式来表达段中每个存中每个存储器器单元的元的20位位物理地址物理地址。段地址和偏移地址都是段地址和偏移地址都是16位二位二进制数。制数。段地址段地址段地址段地址说明明该逻辑段在内存中的起始位置,即段在内存中的起始位置,即该段中的段中的第一个内存第一个内存单元的物理地址元的物理地址。段地址必段地址必须是模是模16地址,即地址,即0H的形式,故的形式,故可采用可采用16位二位二进制数据表示,保存在段寄存器制数据表示,保存在段寄存器(CS,DS,
17、ES,SS)中。中。偏移地址偏移地址偏移地址偏移地址说明明该段中某个内存段中某个内存单元距离元距离该段起始段起始位置的位置的段内段内偏移量偏移量。由于每个段的由于每个段的长度不超度不超过64KB,故偏移地址也可,故偏移地址也可采用采用16位二位二进制数据表示。制数据表示。 B8210H+ 4567H BC777H逻辑地址和物理地址逻辑地址和物理地址物理地址物理地址 段地址段地址10H + 偏移地址偏移地址例例:逻辑地址地址为B821H:4567H,则其其对应的的物理地址物理地址为BC777H。存储器单元的地址存储器单元的地址12340H67H1234H:0000H12341H67H1234H:
18、0001H12342H67H1234H:0002H12343H67H1234H:0003H12344H67H1234H:0004H67H2233EH67H1234H:FFFEH2233FH67H1234H:FFFFH物理地址物理地址逻辑地址(段逻辑地址(段+ +偏移)偏移)存储器单元的地址存储器单元的地址逻辑地址逻辑地址 1460:1001460:100、1380:F001380:F00物理地址物理地址 14700H 14700H14700H 14700H14600H14600H 100H100H14700H14700H13800H13800H F00HF00H14700H14700H段地址补
19、零段地址补零加上偏移地址加上偏移地址得到物理地址得到物理地址一个物理地址可以有多个逻辑地址一个物理地址可以有多个逻辑地址代码段(代码段(Code Segment)代代码段主要用来存放指令代段主要用来存放指令代码,也可存放数据。,也可存放数据。代代码段寄存器段寄存器CS存放代存放代码段的段地址。段的段地址。指令指指令指针寄存器寄存器IP指示下条指令的偏移地址。指示下条指令的偏移地址。数据段(数据段(Data Segment)数据段存放程序所使用的数据。数据段存放程序所使用的数据。数据段寄存器数据段寄存器DS存放数据段的段地址。存放数据段的段地址。通通过各种存各种存储器器寻址方式得到存址方式得到存
20、储器中操作数器中操作数的偏移地址。的偏移地址。附加段(附加段(Extra Segment)附加段是附加的数据段,也用于数据的保存。附加段是附加的数据段,也用于数据的保存。附加段寄存器附加段寄存器ES存放附加段的段地址。存放附加段的段地址。通通过各种存各种存储器器寻址方式得到存址方式得到存储器中操作数器中操作数的偏移地址。的偏移地址。堆栈段(堆栈段(Stack Segment)堆堆栈段用于堆段用于堆栈(Stack),用来,用来暂时存放数据、存放数据、保存程序断点、和向子程序保存程序断点、和向子程序传递参数等。参数等。堆堆栈段寄存器段寄存器SS存放堆存放堆栈段的段地址。段的段地址。堆堆栈指指针寄存
21、器寄存器SP指示堆指示堆栈栈顶的偏移地址。的偏移地址。第第2章章 微处理器指令系统微处理器指令系统微微处理器的内部理器的内部结构构8086/8088的的寻址方式址方式8086/8088指令系指令系统指令的格式指令的格式指令由操作指令由操作码和操作数两部分和操作数两部分组成。成。LABEL: MOV AH,0B9H;赋值WVAR DB 4AH,56H; 定定义字字节变量量操作操作码:说明要明要执行何种操作。行何种操作。操作数操作数:各种操作的各种操作的对象。象。标识符符:最最长31个字母,不能以数字开个字母,不能以数字开头8086/8088的寻址方式的寻址方式寻找操作数的方式寻找操作数的方式(
22、(或操作数的存放方式或操作数的存放方式) )叫叫做操作数的寻址方式。做操作数的寻址方式。立即数操作数立即数操作数(Immediate)寄存器操作数寄存器操作数(Register)存存储器操作数器操作数(Memory)立即数寻址方式立即数寻址方式MOV AX, 1234H;操作数操作数1234H为立即数操作数,立即数操作数,使用的是立即数使用的是立即数寻址方式。址方式。指令指令执行后行后AX=1234H(AH=12H,AL=34H)例:例: MOV AL, 05H指令执行后指令执行后: (AL)=05H例:例:MOV AX, 3064H指令执行后指令执行后: (AX)=3064H立即寻址方式立即
23、寻址方式低地址低地址高地址高地址低地址低地址高地址高地址寄存器寻址方式寄存器寻址方式MOV AX,BX;操作数操作数AX、BX均均为寄存器操作数,寄存器操作数,使用的是寄存器使用的是寄存器寻址方式。址方式。指令指令执行后行后AX中的中的值与与BX中的中的值相同,相同,而而BX中的中的值不不变。例:例:MOV AX, BX指令执行后指令执行后: (AX)= 3064H (BX)保持不变。)保持不变。 指令执行前:指令执行前:指令执行后指令执行后:寄存器寄存器寻址方式址方式存储器寻址方式存储器寻址方式存储器操作数存放于存储器单元中。指令中给出存储器操作数存放于存储器单元中。指令中给出的是操作数所在
24、的存储器单元的逻辑地址。的是操作数所在的存储器单元的逻辑地址。偏移地址偏移地址 = BX/BP + SI/DI + i8/i16 ( (表表2-2)2-2) ( (有效地址有效地址) )有以下有以下5 5种具体方式:种具体方式: (1 1)直接寻址方式)直接寻址方式 (2 2)寄存器间接寻址)寄存器间接寻址 (3 3)寄存器相对寻址)寄存器相对寻址 (4 4)基址变址寻址()基址变址寻址(不要求不要求) (5 5)相对基址变址寻址()相对基址变址寻址(不要求不要求)(1)直接寻址方式直接寻址方式指令中直接给出操作数的偏移地址。指令中直接给出操作数的偏移地址。段地址默认在段地址默认在DS中,可用
25、段超越前缀来改变。中,可用段超越前缀来改变。设设 DS=ES=1492H 16920H=12H,16921H=34HMOV AH, 2000H ;AH=12HMOV AX, ES:2000H ;AX=3412H参考:图参考:图2-8MOV AX , 1050H假设假设DS = 4500H执行后:执行后:AX = 2762H(2)寄存器间接寻址方式寄存器间接寻址方式操作数的偏移地址存放于寄存器操作数的偏移地址存放于寄存器BX/BP/SI/DIBX/BP/SI/DI中。中。 (1)(1)使用寄存器使用寄存器BPBP寻址时,默认的段寄存器为寻址时,默认的段寄存器为SSSS;(2)(2)使用其他寄存器
26、寻址,默认的段寄存器为使用其他寄存器寻址,默认的段寄存器为DSDS。(3)(3)均可以使用段超越前缀改变。均可以使用段超越前缀改变。设设DS=1492HDS=1492H,ES=1492HES=1492H,BX=2000HBX=2000H,16920H=12H16920H=12HMOV ALMOV AL, BX BX;AL=12HAL=12HMOV DHMOV DH,ES:BXES:BX;DH=12HDH=12H(3)寄存器相对寻址方式寄存器相对寻址方式操作数的偏移地址是寄存器操作数的偏移地址是寄存器(BX/BP/SI/DI)(BX/BP/SI/DI)的内的内容与有符号的容与有符号的8 8位或位
27、或1616位位移量之和。位位移量之和。设设DS=ES=1492HDS=ES=1492H,SI=2000HSI=2000H,16926H=12H16926H=12HMOV ALMOV AL, SI+06H SI+06H;AL=12HAL=12HMOV DHMOV DH,ES:SI+06HES:SI+06H;DH=12HDH=12H用变量名来提供地址用变量名来提供地址实际编程时,通常是通过定义变量,使用变量实际编程时,通常是通过定义变量,使用变量名来指代该变量所在内存单元的偏移地址。名来指代该变量所在内存单元的偏移地址。WVAR DW 3412HWVAR DW 3412H;设;设WVARWVAR的
28、偏移地址为的偏移地址为2000H2000HMOV AXMOV AX,2000H2000H;AX=3412H AX=3412H MOV AXMOV AX,WVAR WVAR ;AX=3412HAX=3412H,MOV AXMOV AX, WVAR WVAR ;AX=3412HAX=3412H,中括号可省略中括号可省略例:下面分别采用的是那种寻址方式例:下面分别采用的是那种寻址方式MOV AX, DX ; _MOV AX, DX ; _MOV AX, 3541H ; _MOV AX, 3541H ; _MOV AX, SI ; _MOV AX, SI ; _MOV AX, BP+5678H ; _
29、MOV AX, BP+5678H ; _例:下面几种寻址方式是否正确例:下面几种寻址方式是否正确MOV AX, DX ( )MOV AX, DX ( )MOV AX, 1200 ( )MOV AX, 1200 ( )寄存器寻址寄存器寻址寄存器间接寻址寄存器间接寻址立即数寻址立即数寻址寄存器相对寻址寄存器相对寻址X XMOV AX,1200H ; _MOV AX,1200H ; _MOV AX,BX ; _MOV AX,BX ; _MOV AX,1200H ; _MOV AX,1200H ; _MOV AX,BX ; _MOV AX,BX ; _MOV AX,BX+1100H ; _MOV AX
30、,BX+1100H ; _课后习题课后习题2.8:2.8:AX=1200H,AX=1200H,立即数寻址立即数寻址20103H20103H78H78H20102H20102H56H56H20101H20101H34H34H20100H20100H12H12H21203H21203H65H65H21202H21202HB7HB7H21201H21201H4CH4CH21200H21200H2AH2AHDS=2000HDS=2000HBX=0100HBX=0100HSI=0002HSI=0002HAX=0100H,AX=0100H,寄存器寻址寄存器寻址AX=4C2AH,AX=4C2AH,存储器直接
31、寻址存储器直接寻址AX=3412H,AX=3412H,寄存器间接寻址寄存器间接寻址AX=4C2AH,AX=4C2AH,寄存器相对寻址寄存器相对寻址只看前五个小题:只看前五个小题:第第2章章 微处理器指令系统微处理器指令系统微微处理器的内部理器的内部结构构8086/8088的的寻址方式址方式8086/8088指令系指令系统8086/8088指令系统指令系统数据传送类指令数据传送类指令算术运算类指令算术运算类指令按位操作类指令按位操作类指令控制转移类指令控制转移类指令处理器控制指令处理器控制指令操作数的表示符号的约定操作数的表示符号的约定i8 i8 8 8位立即数,位立即数,i16i161616位
32、立即数位立即数immimm代表代表i8i8或或i16i16r8 r8 8 8位寄存器,位寄存器,r16r161616位寄存器位寄存器regreg代表代表r8r8或或r16r16segseg段寄存器段寄存器CSCS、DSDS、ESES、SSSSm8 m8 8 8位存储器操作数位存储器操作数m16m161616位存储器操作数位存储器操作数memmem代表代表m8m8或或m16m16destdest目的操作数目的操作数src src 源操作数源操作数MOV传送指令传送指令MOV reg/memMOV reg/mem,imm imm ;立即数送寄存器或主存;立即数送寄存器或主存MOV reg/mem/
33、segMOV reg/mem/seg,reg reg ;寄存器送;寄存器送( (段段) )寄存器寄存器 ;寄存器送主存;寄存器送主存MOV reg/segMOV reg/seg,mem mem ;主存送;主存送( (段段) )寄存器寄存器MOV reg/memMOV reg/mem,seg seg ;段寄存器送寄存器;段寄存器送寄存器 ;段寄存器送主存;段寄存器送主存MOV指令注意事项指令注意事项(1)目的操作数不能是立即数。目的操作数不能是立即数。MOV 2000MOV 2000,AXAX ;错误指令错误指令两个操作数不能都是存储器操作数。两个操作数不能都是存储器操作数。假设假设WV1WV1
34、、WV2WV2是两个字变量是两个字变量MOV WV1MOV WV1,WV2WV2 ;错误指令错误指令两个操作数不能都是段寄存器。两个操作数不能都是段寄存器。MOV DSMOV DS,ES ES ;错误指令错误指令立即数不能直接传送至段寄存器。立即数不能直接传送至段寄存器。MOV DSMOV DS,2000H 2000H ;错误指令错误指令MOV指令注意事项指令注意事项(2)不能手工修改不能手工修改CSCS寄存器。寄存器。MOV CSMOV CS, , AX AX ;错误指令错误指令指令指针指令指针IPIP不能作为操作数。不能作为操作数。MOV AXMOV AX, , IP IP ;错误指令错误
35、指令目的操作数与源操作数必须类型一致。目的操作数与源操作数必须类型一致。MOV MOV AX, BH AX, BH ;错误指令错误指令无寄存器,则需说明主存操作数的类型无寄存器,则需说明主存操作数的类型 MOV MOV 2000H2000H,23H ,23H ;错误指令错误指令MOV BYTE PTR 2000H, 23HMOV BYTE PTR 2000H, 23H; 正确正确将字变量将字变量WV2WV2的内容传送至字变量的内容传送至字变量WV1WV1将将ESES的内容传送至的内容传送至DSDS将段寄存器将段寄存器DSDS赋初值赋初值2000H2000HMOV指令练习指令练习MOV AX,W
36、V2MOV AX,WV2MOV WV1,AXMOV WV1,AXMOV AX,ESMOV AX,ESMOV DS,AXMOV DS,AXMOV AX,2000HMOV AX,2000HMOV DS,AXMOV DS,AXXCHG交换指令交换指令(exchange)XCHG regXCHG reg,reg/memreg/mem;XCHG reg/memXCHG reg/mem,regreg;源操作数与目的操作数内容互换源操作数与目的操作数内容互换MOV AXMOV AX,1234H1234H ;AH=12HAH=12H,AL=34HAL=34HXCHG AHXCHG AH,AL AL ;AH=3
37、4HAH=34H,AL=12HAL=12H不能在内存单元之间交换数据不能在内存单元之间交换数据。段寄存器不能作为操作数段寄存器不能作为操作数。XCHG指令练习指令练习将字变量将字变量A A、B B的内容互换的内容互换A DW 1234HA DW 1234HB DW 5678HB DW 5678H方法方法1 1: MOV AXMOV AX,B B XCHG AXXCHG AX,A A MOV BMOV B,AXAX方法方法2 2: MOV AXMOV AX,A A MOV BXMOV BX,B B MOV AMOV A,BXBX MOV BMOV B,AXAX堆栈堆栈内存中开辟的用于内存中开辟的
38、用于暂时存放数据暂时存放数据的一个特殊区域。的一个特殊区域。按按先进后出先进后出或后进先出的原则管理。或后进先出的原则管理。堆栈段的段地址存放于段寄存器堆栈段的段地址存放于段寄存器SSSS中,偏移地址存中,偏移地址存放于寄存器放于寄存器SPSP中。中。堆栈操作指令堆栈操作指令PUSH r16/m16/seg PUSH r16/m16/seg ;SP=SP-2SP=SP-2 ;SS:SP=r16/m16/segSS:SP=r16/m16/segPOP r16/m16/seg POP r16/m16/seg ;r16/m16/seg=SS:SPr16/m16/seg=SS:SP ;SP=SP+2S
39、P=SP+2堆栈操作指令示例堆栈操作指令示例MOV AXMOV AX,1234H1234HMOV BXMOV BX,5678H5678HPUSH AXPUSH AXPUSH BXPUSH BXPOP CXPOP CXPOP DXPOP DX入栈操作示意入栈操作示意SPSP1212H H3434H HSPSP1212H H3434H H5656H H7878H HSPSP出出栈操作示意操作示意PUSH AXPUSH AXPUSH PUSH BXBXPOPPOP C CX XPOPPOP D DX X堆栈操作注意事项堆栈操作注意事项a)a)堆栈操作均为堆栈操作均为1616位位(字)操作;(字)操作
40、;b)b)不能不能将将立即数立即数压入堆栈;压入堆栈;c)c)进栈和出栈的操作伴随着堆栈指针进栈和出栈的操作伴随着堆栈指针SPSP的调整,的调整,SS:SPSS:SP永远指向堆栈段的栈顶。永远指向堆栈段的栈顶。d)d)堆栈只有一个出口。堆栈只有一个出口。堆栈指令练习堆栈指令练习利用堆栈利用堆栈将将两个两个字变量字变量A A、B B的内容互换的内容互换A DW 1234HA DW 1234HB DW 5678HB DW 5678HPUSH APUSH APUSH BPUSH BPOP APOP APOP BPOP BLEA指令指令(Load Effective Address)LEA r16LE
41、A r16,memmem;r16=memr16=mem的偏移地址的偏移地址例如:例如:LEA BXLEA BX,SI+06HSI+06H;若;若SI=1000HSI=1000H,则,则BX=1006HBX=1006HLEA指令示例指令示例WVAR DW 1234HWVAR DW 1234H;设其偏移地址为;设其偏移地址为0001H0001H 请说明下列语句的执行结果请说明下列语句的执行结果MOV BXMOV BX,WVAR WVAR ;_LEA SILEA SI,WVAR WVAR ;_MOV DXMOV DX,SI SI ;_BX=1234HBX=1234HSI=0001HSI=0001HD
42、X=1234HDX=1234H加减法指令加减法指令ADD destADD dest,srcsrc;dest=dest+srcdest=dest+srcSUB destSUB dest,srcsrc;dest=dest-srcdest=dest-srcADD加法指令加法指令(Addition)ADD reg ADD reg ,imm/reg/memimm/reg/memADD mem ADD mem ,imm/regimm/reg目的操作数不能为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。按定义影响按定义
43、影响6 6个状态标志位。个状态标志位。SUB减法指令减法指令(Subtraction)SUB regSUB reg,imm/reg/memimm/reg/memSUB memSUB mem,imm/regimm/reg目的操作数不能为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。按定义影响按定义影响6 6个状态标志位。个状态标志位。加减法指令示例加减法指令示例MOV AHMOV AH,96H96H ;ADD AHADD AH,78H78H ;ADD AHADD AH,78H78H ;(1) (1) AH=
44、0EH AH=0EH (0000000011101110B B) CF=1CF=1,PF=0PF=0,AF=0AF=0,ZF=0ZF=0,SF=0SF=0,OF=0OF=0(2) (2) AH=86HAH=86H (1000100001100110B B) CF=0CF=0,PF=0PF=0,AF=1AF=1,ZF=0ZF=0,SF=1SF=1,OF=1OF=1带进带进/ /借位加减法指令借位加减法指令ADC destADC dest,srcsrc;dest=dest+src+CFdest=dest+src+CFSBB destSBB dest,srcsrc;dest=dest-src-CFd
45、est=dest-src-CFADC指令指令(Add with Carry)ADC regADC reg,imm/reg/memimm/reg/memADC memADC mem,imm/regimm/reg目的操作数不能为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。按定义影响按定义影响6 6个状态标志位。个状态标志位。SBB指令指令(Subtract with Borrow)SBB reg SBB reg ,imm/reg/memimm/reg/memSBB mem SBB mem ,imm/regi
46、mm/reg目的操作数不能为立即数。目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。按定义影响按定义影响6 6个状态标志位。个状态标志位。ADC指令指令和和SBB指令指令的应用的应用ADCADC指令用于与指令用于与ADDADD指令结合实现指令结合实现多精度数的加法多精度数的加法。先将两个操作数的低先将两个操作数的低1616位相加位相加( (用用ADDADD指令指令) )。再加高位部分、并将进位加到高位再加高位部分、并将进位加到高位( (用用ADCADC指令指令) )。SBBSBB指令用于与指令用于与SUBSUB指令
47、结合实现指令结合实现多精度数的减法多精度数的减法。先将两个操作数的低先将两个操作数的低1616位相减位相减( (用用SUBSUB指令指令) )。再减高位部分、并减去借位再减高位部分、并减去借位( (用用SBBSBB指令指令) )。带进带进/ /借位加减法指令示例借位加减法指令示例X DD 12345678HX DD 12345678HY DD 9ABCDEF0HY DD 9ABCDEF0HMOV AXMOV AX,WORD PTR XWORD PTR X ; ;ADD AXADD AX,WORD PTR YWORD PTR Y ; ;MOV DXMOV DX,WORD PTR X+2WORD
48、PTR X+2 ; ;ADC DXADC DX,WORD PTR Y+2WORD PTR Y+2 ; ;AX=5678H AX=5678H AX=3568H,CF=1 AX=3568H,CF=1 DX=1234H,CF=1 DX=1234H,CF=1 DX=ACF1H,CF=0 DX=ACF1H,CF=0 CMP比较指令比较指令(Compare)CMP destCMP dest,srcsrc;dest-srcdest-src按定义影响按定义影响6 6个状态标志位。个状态标志位。CMPCMP指令通过减法运算影响状态标志位,指令通过减法运算影响状态标志位,常用于比较两个操作数的大小关系。常用于比较
49、两个操作数的大小关系。CMPCMP指令执行前后两操作数内容均不变。指令执行前后两操作数内容均不变。INC增量指令增量指令(Increment)INC reg/memINC reg/mem;reg/mem=reg/mem+1reg/mem=reg/mem+1常用于计数器和地址指针的调整。常用于计数器和地址指针的调整。不影响不影响CFCF标志,但影响其它状态标志位。标志,但影响其它状态标志位。DEC减量指令减量指令(Decrement)DEC reg/memDEC reg/mem;reg/mem=reg/mem-1reg/mem=reg/mem-1常用于计数器和地址指针的调整。常用于计数器和地址指
50、针的调整。不影响不影响CFCF标志,但影响其它状态标志位。标志,但影响其它状态标志位。NEG指令指令(Negate)NEG reg/memNEG reg/mem;reg/mem=0-reg/memreg/mem=0-reg/mem按定义影响按定义影响6 6个状态标志位。个状态标志位。注意事项(理解,不要死记):注意事项(理解,不要死记):a)a)通常情况下,通常情况下,OF=0OF=0(只有(只有当操作数为当操作数为 - -128128 或或 - -3276832768 时,操作数不变,时,操作数不变,OFOF= =1 1)b)b)通常通常情况下,情况下,CF=1CF=1,除非操作数为,除非操
51、作数为0 0。MUL无符号乘法指令无符号乘法指令(Multiplication)MUL r8/m8 MUL r8/m8 ;AX=ALAX=ALr8/m8r8/m8 隐含操作数隐含操作数AX,ALAX,ALMUL r16/m16MUL r16/m16;DX.AX=AXDX.AX=AXr16/m16r16/m16 隐含操作数隐含操作数DX,AXDX,AXIMUL有符号乘法指令有符号乘法指令 (Integer Multiply)IMUL r8/m8 IMUL r8/m8 ;AX=ALAX=ALr8/m8r8/m8隐含操作数隐含操作数AX,ALAX,ALIMUL r16/m16IMUL r16/m16
52、;DX.AX=AXDX.AX=AXr16/m16r16/m16 隐含操作数隐含操作数DX,AXDX,AXDIV无符号除法指令无符号除法指令(Division)DIV r8/m8 DIV r8/m8 ;AL=AXAL=AXsrcsrc的商的商 ;AH=AXAH=AXsrcsrc的余的余DIV r16/m16DIV r16/m16 ;AX=DX.AXAX=DX.AXsrcsrc的商的商 ;DX=DX.AXDX=DX.AXsrcsrc的余的余IDIV有符号除法指令有符号除法指令(Integer Division)IDIV r8/m8 IDIV r8/m8 ;AL=AXAL=AXsrcsrc的商的商
53、;AH=AXAH=AXsrcsrc的余的余IDIV r16/m16IDIV r16/m16 ;AX=DX.AXAX=DX.AXsrcsrc的商的商 ;DX=DX.AXDX=DX.AXsrcsrc的余的余符号扩展指令符号扩展指令CBW,CWDCBW CBW (Convert Byte to Word)(Convert Byte to Word)ALAL符号扩展成符号扩展成AXAX若若ALAL的最高有效位是的最高有效位是0 0,则,则AH=00HAH=00H;若若ALAL的最高有效位是的最高有效位是1 1,则,则AH=FFHAH=FFH;C CWDWD (Convert (Convert Word
54、Word to to D DWord)Word)AXAX符号扩展成符号扩展成DX.DX.AXAX若若AXAX的最高有效位是的最高有效位是0 0,则,则DX=0000HDX=0000H;若若AXAX的最高有效位是的最高有效位是1 1,则,则DX=FFFFHDX=FFFFH;符号扩展指令符号扩展指令CBW,CWD例例: :MOV ALMOV AL, 64H 64H ;CBW CBW ;ADD AXADD AX, 0FF00H 0FF00H ;CWD CWD ;AL=64HAL=64HAX=0064HAX=0064HAX=FF64HAX=FF64HDX.AX=FFFFFF64HDX.AX=FFFFF
55、F64H符号符号扩展指令不改展指令不改变数数值大小大小乘除法指令练习乘除法指令练习计算算(XY+125)Z。设X、Y、Z均均为16位有符号位有符号的字的字变量,量,计算后将商存入算后将商存入X,余数存入,余数存入Y。 MOV AXMOV AX,X X IMUL YIMUL Y ADD AXADD AX,125125 ADC DXADC DX,0 0 IDIV ZIDIV Z MOV XMOV X,AXAX MOV YMOV Y,DXDX注意:乘除法指令均不能使用立即数操作数。注意:乘除法指令均不能使用立即数操作数。逻辑运算指令逻辑运算指令AND destAND dest,srcsrc ;des
56、t=dest dest=dest “与与” src srcOR destOR dest,srcsrc ;dest=dest dest=dest “或或” src srcXOR destXOR dest,srcsrc ;dest=dest dest=dest “异或异或” src srcTEST destTEST dest,srcsrc ;dest dest “与与” src srcNOT reg/mem NOT reg/mem ;reg/mem=reg/memreg/mem=reg/mem的的“非非”逻辑运算指令注意事项逻辑运算指令注意事项目的操作数不能为立即数。目的操作数不能为立即数。两操作
57、数不能同时为存储器操作数。两操作数不能同时为存储器操作数。两操作数类型要一致。两操作数类型要一致。双操作数逻辑运算指令均双操作数逻辑运算指令均置置OF=CF=0OF=CF=0按定义影响按定义影响SFSF、ZFZF和和PFPF,对对AFAF无定义无定义NOTNOT指令不影响状态标志位。指令不影响状态标志位。逻辑逻辑“与与”运算特点运算特点0 00 01 11 1 0 0 1 1 0 0 1 10 00 00 01 1和和0 0相相“与与”,结果为,结果为0 0 ; 和和1 1相相“与与”,结果不变。,结果不变。用于给某一位用于给某一位“清零清零”逻辑逻辑“或或”运算特点运算特点0 00 01 1
58、1 1 0 0 1 1 0 0 1 10 01 11 11 1和和0 0相相“或或”,结果不变;,结果不变; 和和1 1相相“或或”,结果为,结果为1 1。用于给某一位用于给某一位“置置1 1”逻辑逻辑“异或异或”运算特点运算特点0 00 01 11 1 0 0 1 1 0 0 1 10 01 11 10 0和和1 1“异或异或”,结果取反;,结果取反; 和和0 0“异或异或”,结果不变。,结果不变。用于给某一位用于给某一位“取反取反”例例2.13MOV AL,75H ;MOV AL,75H ;AND AL,32H ;AND AL,32H ;OR AL,71H ;OR AL,71H ;XOR
59、AL,OF1H ;XOR AL,OF1H ;NOT AL ;NOT AL ;AL=75HAL=30H, CF=OF=0,SF=0,ZF=0,PF=1AL=71H, CF=OF=0,SF=0,ZF=0,PF=1AL=80H, CF=OF=0,SF=1,ZF=0,PF=0AL=7FH, CF=OF=0,SF=1,ZF=0,PF=0逻辑运算指令练习逻辑运算指令练习(1)使使ALAL最高位为最高位为“1 1”,其他位不变,其他位不变OR AL,80H;使使AXAX清清0 0,同时清,同时清CFCF为为0 0AND AX, 0 或或 XOR AX,AX 使使ALAL中的中的D7D7D4D4位不变,位不变
60、,D3D3D0D0位取反位取反XOR AL,0FH逻辑运算指令练习逻辑运算指令练习(2)将将ALAL存放的存放的0 09 9中的一个数变成对应的中的一个数变成对应的ASCIIASCII码码OR AL,30H将将ALAL中的中的ASCIIASCII码小写字母变成对应的大写字母码小写字母变成对应的大写字母AND AL,DFH将将ALAL中的中的ASCIIASCII码大写字母变成对应的小写字母码大写字母变成对应的小写字母OR AL,20HSHL逻辑左移位逻辑左移位(Shift Logic Left)SHL reg/memSHL reg/mem,1/CL1/CL;reg/memreg/mem左移左移1
61、/CL1/CL位位例例1 1: MOV ALMOV AL,1 10111110B0111110B SHL ALSHL AL,1 1 ;AL=0111110AL=01111100 0B B,CF=CF=1 1例例2 2: MOV ALMOV AL,10110111110B11110B MOV CL MOV CL,3 3 SHL ALSHL AL,CLCL ;AL=1AL=11 11101100 00000B B,CF=CF=1 1SHR逻辑右移位逻辑右移位(Shift Logic Right)SHR reg/memSHR reg/mem,1/CL1/CL;reg/memreg/mem右移右移1/
62、CL1/CL位位例例1 1: MOV ALMOV AL,101111110111110 0B B SHSHR R AL AL,1 1 ;AL=AL=0 01 1011111B011111B,CF=CF=0 0例例2 2: MOV ALMOV AL,1011110111110110B B MOV CL MOV CL,3 3 SHSHR R AL AL,CLCL ;AL=AL=00000010101 11111B B,CF=CF=1 1SAR算术右移位算术右移位(Shift Arithmetic Right)SAR reg/memSAR reg/mem,1/CL1/CL;reg/memreg/me
63、m右移右移1/CL1/CL例例1 1: MOV ALMOV AL,101111110111110 0B B S SARAR AL AL,1 1 ;AL=AL=1 11 1011111B011111B,CF=CF=0 0例例2 2: MOV ALMOV AL,1011110111110110B B MOV CL MOV CL,3 3 S SARAR AL AL,CLCL ;AL=AL=11111110101 11111B B,CF=CF=1 1SAL算术左移位算术左移位(Shift Arithmetic Left)SAL reg/memSAL reg/mem,1/CL1/CL;reg/memre
64、g/mem左移左移1/CL1/CL位位MOV ALMOV AL,1 10111110B0111110BSAL ALSAL AL,1 1 ;AL=0111110AL=01111100 0B B,CF=CF=1 1与逻辑左移与逻辑左移SHLSHL是同一条指令是同一条指令可以认为是同一条指令的两种写法可以认为是同一条指令的两种写法 ROL循环左移位循环左移位(Rotate Left)ROL reg/memROL reg/mem,1/CL1/CL;循环左移;循环左移1/CL1/CL位位MOV ALMOV AL,1 10111110B0111110BROL ALROL AL,1 1 ;AL=011111
65、0AL=01111101 1B B,CF=CF=1 1自身循环,不添加任何新的数字自身循环,不添加任何新的数字 ROR循环右移位循环右移位(Rotate Right)ROR reg/memROR reg/mem,1/CL1/CL;循环右移;循环右移1/CL1/CL位位MOV ALMOV AL,101111110111110 0B BROR ALROR AL,1 1 ;AL=AL=0 01011111B1011111B,CF=CF=0 0自身循环,不添加任何新的数字自身循环,不添加任何新的数字 RCL指令指令(Rotate through CF Left)RCL reg/memRCL reg/m
66、em,1/CL1/CL;带进位循环左移;带进位循环左移MOV ALMOV AL,1 10111110B0111110B ;假设;假设CF=CF=0 0RCL ALRCL AL,1 1 ;AL=0111110AL=01111100 0B B,CF=CF=1 1增加增加CFCF作为其一位:作为其一位:8 8位变位变9 9位,位,1616位变位变1717位位RCR指令指令(Rotate through CF Right)RCR reg/memRCR reg/mem,1/CL1/CL;带进位循环右移;带进位循环右移MOV ALMOV AL,101111110111110 0B B ;假设;假设CF=C
67、F=1 1RCR ALRCR AL,1 1 ;AL=AL=1 11011111B1011111B,CF=CF=0 0增加增加CFCF作为其一位:作为其一位:8 8位变位变9 9位,位,1616位变位变1717位位 移位指令对标志位的影响移位指令对标志位的影响CFCF:最后一次移出的数:最后一次移出的数当移位次数大于当移位次数大于1 1时,可以看成多次移动一位,每时,可以看成多次移动一位,每次都将移出的数放入次都将移出的数放入CFCF中,则中,则CFCF中最终存放的是最中最终存放的是最后一次移出的数。后一次移出的数。用移位指令将用移位指令将ALAL中的无符号数乘中的无符号数乘1010,结果,结果
68、存入存入AXAX中。中。( (例例2.16)2.16)XOR AH, AH ; XOR AH, AH ; SHL AX, 1 ; SHL AX, 1 ; MOV BX, AX ; MOV BX, AX ; SHL AX, 1 ; SHL AX, 1 ; SHL AX, 1 ; SHL AX, 1 ; ADD AX, BX ; ADD AX, BX ; SHLSHL逻辑左移一位相当于无符号数乘以逻辑左移一位相当于无符号数乘以2 2SHRSHR逻辑右移一位相当于无符号数除以逻辑右移一位相当于无符号数除以2 2用移位指令实现乘法用移位指令实现乘法AHAH清清0 0, ,与与MOVMOV指令不同指令不
69、同AX = AL * 2AX = AL * 2BX = AL * 2BX = AL * 2AX = AL * 4AX = AL * 4AX = AL * 8AX = AL * 8AX = AL * 10AX = AL * 10控制转移类指令控制转移类指令程序代码在代码段中,由程序代码在代码段中,由CS:IPCS:IP确定地址。确定地址。程序顺序执行,微处理器自动增量程序顺序执行,微处理器自动增量IPIP。段内转移段内转移在当前代码段范围内的程序转移,在当前代码段范围内的程序转移,不需更改不需更改CSCS,只要改变,只要改变IPIP。段间转移段间转移从当前代码段转移到另一代码段,从当前代码段转移
70、到另一代码段,需要更改需要更改CSCS和和IPIP。JMPJMP无条件转移指令无条件转移指令(Jump)(Jump)JMP LABELJMP LABEL例如例如 NEXTNEXT:MOV AXMOV AX,BXBX JMP NEXTJMP NEXTNEXTNEXT是用户自定义的标识符是用户自定义的标识符 ( (按规则任意定按规则任意定义义) ),其作用是用来指代某条指令的地址。其作用是用来指代某条指令的地址。其后一定有冒号。其后一定有冒号。条件转移指令条件转移指令Jcc根据指定的条件来确定程序是否发生转移根据指定的条件来确定程序是否发生转移Jcc LABELJcc LABEL;条件满足,发生转
71、移;条件满足,发生转移 ;否则,顺序执行下一条指令;否则,顺序执行下一条指令LABELLABEL表示目标地址表示目标地址转移条件包括两类:转移条件包括两类:a)a)单个标志状态作为条件单个标志状态作为条件b)b)两数大小关系作为条件两数大小关系作为条件转移条件转移条件cccc:单个标志状态:单个标志状态JZ/JEJZ/JEZF=1ZF=1JNZ/JNEJNZ/JNEZF=0ZF=0JSJSSF=1SF=1JNSJNSSF=0SF=0JP/JPEJP/JPEPF=1PF=1JNP/JPOJNP/JPOPF=0PF=0JOJOOF=1OF=1JNOJNOOF=0OF=0JCJCCF=1CF=1JN
72、CJNCCF=0CF=0转移条件转移条件cccc:比较大小关系比较大小关系JB/JNAEJB/JNAECF=1CF=1JNB/JAEJNB/JAECF=0CF=0JBE/JNAJBE/JNACF=1CF=1或或ZF=1ZF=1JNBE/JAJNBE/JACF=0CF=0且且ZF=0ZF=0JL/JNGEJL/JNGESFSFOFOFJNL/JGEJNL/JGESF=OFSF=OFJLE/JNGJLE/JNGSFSFOFOF或或ZF=1ZF=1JNLE/JGJNLE/JGSF=OFSF=OF且且ZF=0ZF=0无符号数无符号数有符号数有符号数例:例:将有符号数转换为绝对值将有符号数转换为绝对值
73、CMP AL CMP AL,0 0 JGE NEXT JGE NEXT ;为正数,转移到;为正数,转移到NEXTNEXT NEG AL NEG AL ;为负数,转换为绝对值;为负数,转换为绝对值NEXT:NEXT:例:例:实现实现CBW指令功能的程序指令功能的程序 MOV AL, BVAR ;取出要判断的数据 TEST AL, 80H ;测试最高位 JZ NEXT ;最高位为0,转移到NEXT MOV AH, 0FFH ;最高位为1,设置AH=FFH JMP DONE ;无条件跳过另一个分支NEXT:MOV AH, 0 ;最高位为0转移到此DONE:例:例:取三个无符号字变量的最小值到取三个无
74、符号字变量的最小值到AX MOV AX,V1 ;假定V1最小 CMP AX,V2 ;与V2比较 JBE NEXT ;V1V2,转移到NEXT MOV AX,V2 ;V2V1 NEXT:CMP AX,V3 JBE DONE ;AX(V1或V2)最小 MOV AX,V3 ;V3最小DONE:循环指令循环指令LOOPLOOP LABEL LOOP LABEL ;CX=CX-1,CX=CX-1,若若CX0CX0,转移,转移LOOPLOOP指令是针对指令是针对CXCX计数器计数器的计数循环指令的计数循环指令等效为下列两条指令等效为下列两条指令 DEC CX DEC CX JNZ LABEL JNZ LA
75、BEL循环指令循环指令不影响标志不影响标志循环指令练习循环指令练习已知字节数组ARRAY包含四个元素,将其各元素之和存入变量SUM中(不考虑进位和溢出)。 ARRAY DB 12H,34H,56H,78H SUM DB ? MOV CX,4 ;计数初值 XOR AL,AL ;求和初值为0 MOV BX,0 ;数组指针为0AGAIN: ADD AL,ARRAYBX ;求和 INC BX LOOP AGAINDONE: MOV SUM,AL ;保存结果计数循环示意计数循环示意循环初始化循环初始化循环修改部分循环修改部分循环体循环体计数控制条件计数控制条件Y YN N子程序与主程序子程序与主程序子程
76、序子程序与主程序分开的完成特定功能的一段程序与主程序分开的完成特定功能的一段程序主程序主程序(调用程序调用程序)执行调用指令执行调用指令CALLCALL调用子程序调用子程序子程序子程序(被调用程序被调用程序)执行返回指令执行返回指令RETRET返回主程序返回主程序子程序调用示意子程序调用示意RETRETCALL LABELCALL LABEL主程序主程序子程序子程序子程序调用指令子程序调用指令CALLCALL LABEL CALL LABEL ; LABEL LABEL为子程序名为子程序名CALLCALL指令在改变指令在改变CSCS和和IPIP前,会将返回的地址前,会将返回的地址保存到堆栈中。
77、保存到堆栈中。子程序返回指令子程序返回指令RETRET RET ;在子程序中,实现调用的返回;在子程序中,实现调用的返回RETRET指令执行时伴随着指令执行时伴随着CSCS,IPIP,SPSP的调整。的调整。子程序定义子程序定义子程序名子程序名 PROC PROC ; ;子程序代码子程序代码子程序名子程序名 ENDP ENDP子程序名为符合语法的标识符子程序名为符合语法的标识符子程序应安排在代码段内主程序之外子程序应安排在代码段内主程序之外中断中断指令指令(系统功能调用系统功能调用)INT i8 INT i8 ;执行;执行i8i8号中断号中断MS-DOSMS-DOS操作系统提供给程序员的操作系
78、统提供给程序员的“子程序子程序”系统功能调用步骤(类似高级语言调用函数)系统功能调用步骤(类似高级语言调用函数)(1 1)在)在AHAH寄存器中设置系统子功能调用号寄存器中设置系统子功能调用号(2 2)在指定寄存器中设置入口参数)在指定寄存器中设置入口参数(3 3)中断调用指令)中断调用指令“INT 21HINT 21H”执行功能执行功能(4 4)根据出口参数分析功能调用执行情况)根据出口参数分析功能调用执行情况01号子功能号子功能子功能号:子功能号:AH=01HAH=01H;出口参数:出口参数:AL=AL=输入字符的输入字符的ASCIIASCII码;码;功能说明:功能说明:等待从键盘输入一个
79、字符,等待从键盘输入一个字符,将其将其ASCIIASCII码送入码送入ALAL,同时回显到屏幕。,同时回显到屏幕。输入字符后,不需回车。输入字符后,不需回车。MOV AHMOV AH,01H01HINT 21HINT 21H02号子功能号子功能子功能号:子功能号:AH=02HAH=02H;入口参数:入口参数:DL=DL=要显示字符的要显示字符的ASCIIASCII码;码;功能说明:功能说明:在当前光标位置显示在当前光标位置显示DLDL中给定的字符。中给定的字符。此功能可自动识别并相应处理回车此功能可自动识别并相应处理回车(0DH)(0DH)、换行换行(0AH)(0AH)等字符。等字符。MOV
80、AHMOV AH,02H02HMOV DLMOV DL,41H41HINT 21HINT 21H09号子功能号子功能子功能号:子功能号:AH=09HAH=09H;入口参数:入口参数:DS:DX=DS:DX=要显示字符串的首地址;要显示字符串的首地址;功能说明:功能说明:在当前光标位置显示由在当前光标位置显示由DS:DXDS:DX所指的字符串。所指的字符串。该字符串必须以该字符串必须以“$ $”结束,结束,“$ $”并不显示。并不显示。MSG DB MSG DB HELLO!HELLO!,0DH0DH,0AH0AH,$ $MOV AHMOV AH,09H09HMOV DXMOV DX,OFFSE
81、T MSGOFFSET MSGINT 21HINT 21H4CH号子功能号子功能子功能号:子功能号:AH=4CHAH=4CH;入口参数:入口参数:AL=DOSAL=DOS返回码;返回码;功能说明:结束程序执行,返回功能说明:结束程序执行,返回DOSDOS。MOV AHMOV AH,4CH4CHMOV ALMOV AL,00H00HINT 21HINT 21H处理器控制类指令处理器控制类指令NOP NOP ;空操作;空操作用于延时程序用于延时程序 MOV MOV CXCX, , 10001000 L1: NOPL1: NOP NOP NOP LOOP L1 LOOP L1综合综合练习练习将将BL
82、BL中的中的2 2位位1616进制数显示出来。进制数显示出来。(利用子程序利用子程序实现实现1616进制数转换成进制数转换成ASCIIASCII码码)主程序主程序 .MODEL TINY .MODEL TINY .STACK .STACK .CODE .CODE .STARTUP .STARTUP MOV BL, 34H MOV BL, 34H CALL DISPLAY CALL DISPLAY .EXIT .EXIT ;子程序放在这里;子程序放在这里 ENDEND子程序子程序-1-1DISPLAY DISPLAY PROCPROC MOV DL, BL MOV DL, BL MOV CL,
83、4 MOV CL, 4 SHR DL,CL SHR DL,CL CALL HTOASC CALL HTOASC MOV DL, BL MOV DL, BL AND DL, 0FH AND DL, 0FH CALL HTOASC CALL HTOASC RET RETDSPLAY ENDPDSPLAY ENDP子程序子程序-2-2HTOASC PROCHTOASC PROC OROR DL, 30HDL, 30H CMP DL, 39H CMP DL, 39H JBE NEXT JBE NEXT ADD DL, 07H ADD DL, 07HNEXT: MOV AH, 02HNEXT: MOV AH, 02H INT 21H INT 21H RET RETHTOASC ENDPHTOASC ENDP课本课本P45,P45,例例2.242.24 第第2章教学要求章教学要求了解了解8086/80888086/8088的功能结构的功能结构掌握掌握8086/80888086/8088的寄存器结构的寄存器结构掌握掌握存储器结构存储器结构掌握掌握寻址方式寻址方式熟练掌握熟练掌握指令,从而编写程序段落指令,从而编写程序段落