




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《微机原理与接口技术》
第四章主讲:方义秋1第四章指令系统
指令系统是微处理器(CPU)所能执行的指令的集合,它与微处理器有密切的联系,不同的微处理器有不同的指令系统。在本章中我们主要讲解INTEL公司生产的80486CPU的寻址方式以及各种指令系统,并通过具体实例讲述了各条指令的功能和使用方法。通过本章的学习,读者应该掌握以下内容:
•三种操作数的寻址方式
•常用指令的格式、功能、以及对标志位的影响2第四章指令系统4.1概述4.280486的寻址方式4.380486的标志寄存器4.480486的基本指令集34.1概述1、指令的书写格式
(1)指令——计算机可以执行的各种操作命令称为指令。通常一条指令对应一种基本操作,例如加、减、传送、移位等。计算机所能执行的全部命令的集合即为该计算机的指令系统。(2)书写格式:
机器指令——硬件可识别、可存储和运行的一串二进制描述符
符号指令——用助记符和规定的书写格式书写的指令。 例
表4.1一个符号指令的机器指令有1~16个字节,在内存中连续存放。
4(3)指令地址——CPU规定:存放指令第一字节的内存地址称为指令地址。52、符号指令的书写格式
例:
LAST:MOVAX,CX;将CX的内容送入AX中(1)标号——地表该指令的存放地址,为程序分支、循环提供了转移目标。
标号的命名规则:字母或下划线开头,后跟字母、数字、下划线≤31个字符。
“系统保留字”不能作为标号使用。
(2)操作码——规定指令要执行的操作。
(3)操作数——指令的操作对象;操作数可以有一个,也可以有两个,一个源操作数,一个目的操作数。其长度可以是单字节、双字节或者四字节,内存中连续存放。
存放规则:低字节存放在i单元,高字节存放在i+1单元。
标号:操作码操作数;注释63、汇编源程序——用符号指令编写的程序。需编辑(EDIT.EXE)、编译(TASM.EXE)和链接(LINK.EXE)生成CPU可执行的目标程序。
4、目标程序——机器指令编写的程序,CPU可执行。74.280486的寻址方式
计算机中的指令有些不需要操作数,大多数指令采用一个或两个操作数。操作数分为三类:(1)立即数——操作数可以跟随在指令操作码之后;(2)寄存器操作数——操作数存放在CPU内部的寄存器中;(3)存储器操作数——绝大多数的操作数存放在内存储器中。寻址——指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。这种寻找操作数的过程称为寻址,而寻找操作数的方法称为寻址方式。80486有7种寻址方法,其中访问存储器有5种寻址方式。
8立即寻址方式中,指令操作码和操作数都在存储器代码段中,是指令的一部分,取出指令即得操作数。(1)立即数表示形式——可为多种数制的数,或由+、—、*、/组成的算术表达式。必须以数字开头,以字母开头的十六进制数前必须以数字0做前缀。
数制用后缀表示:B、H、Q、D(可省略)
(2)编译时,立即数一律编译成等值的二进制数,负数—>补码,字符’A’—>ASCII。4.2.1立即寻址9下例指令的功能是把源操作数(立即数)写入目标寄存器中,其中源操作数就是立即寻址:MOV
AL,01010101B;8位二进制数MOV BX,1234H;16位十六进制数MOV CL,4;8位十进制数MOV DL,’A’;8位字符MOV BL,0A6H;8位十六进制数MOV CX,3*5;16位算术表达式MOV EAX,12345678H;32位十六进制数
104.2.2寄存器寻址
操作数存放在CPU的某个寄存器中。寻址:写出寄存器名。例:MOV DS,AX;AX寄存器内容送DSMOV CL,BL;BL寄存器的内容送CLINC SI;SI寄存器的内容加1DEC DI;DI寄存器的内容减1ADD EAX,EBX;EAX,EBX内容相加,结果送→EAX114.2.3存储器操作数的寻址方式
操作数存放(或写入)某个逻辑段的存储单元之中,所以须给出用逻辑地址计算物理地址的地址表达式。
(1)完整的地址表达式:
段寄存器:[基址+变址*比例因子+位移量
]段超越前缀有效地址(EA)又称偏移地址
段超越前缀——通知CPU指令要访问的是哪一个逻辑段。
偏移地址——在一个逻辑段中,某存储单元相对于段首址之间的地址偏移量。
12基址——任何通用寄存器(32位)的内容。基址寄存器通常用于编译程序指向局部变量区。
变址——除ESP以外的任何通用寄存器(32位)的内容。变址寄存器用于访问数组或字符串元素。
位移量——包含在指令中的立即数。(2)实模式下:把段基址(CS内容)*16+偏移地址==>物理地址(3)保护模式下:段基址寄存器中写入的不是段基址,而是选择符,CPU利用段选择符和段页管理部件查找出段基址+有效地址···==>物理地址。
32位寻址方式如图13
符符符符符符145种寄存器寻址方式: 1、直接寻址 2、寄存器间接寻址 3、基址寻址 4、变址寻址 5、基址加变址寻址
15两种书写格式:
(1)直接写出有效地址。例如:
MOV BX,DS:[1234H];取出一个字的内容—>BX
MOV AL,ES:[2CH];取出一个字节的内容—>AL
(2)用变量名代替存储单元的有效地址。(因经汇编后,存储单元的有效地址就赋给了变量名)例如:
MOV AX,DS:BUF;取出数据段以BUF命名的字的内容—>AX
或者MOV AX,BUF1、直接寻址
DS:0000H┇
2211
1234H
111235H
22
┇内存BHBL16间址寄存器——事先把存储单元的有效地址写入规定的寄存器中。
指令地址的表达格式:
段寄存器:[间址寄存器]
对于约定的逻辑段,其段超越前缀可省略。例如:
DATA1 DB 11H,55H;定义变量
DATA2 DW3322H
···MOV DS,数据段段基址···
MOV
SI,OFFSETDATA1;变量DATA1单元的有效地址
MOV AL,[SI];访问数据段用SI间址取数—>AL,AL=11HMOV DI,OFFSETDATA2MOVBX,[DI];BX=3322H2、寄存器间接寻址(简称间址或间接寻址)
17例如:MOVAX,[BX]若在实模式下(DS)=2000H,(BX)=1000H物理地址=20000H+1000H=21000H。指令执行前,(AX)=2030H,(21000H)=0A0H,(21001H)=50H,指令执行后,(AX)=50A0H,(21000H)=0A0H,(21001H)=50H。指令执行情况如下:寄存器间接寻址示意图:1111880486哪些寄存器可作为间址寄存器:16位4个:BP(约定访问堆栈段:SS)BX,SI,DI(约定访问数据段:DS,ES,FS,GS)32位8个:EBP,ESP(约定访问堆栈段:SS)EAX~EDX,ESI,EDI(约定数据段)例如:MOV BP,MESG;MESG单元的有效地址MOV CL,ES:[BP];从ES附加段MESG字节单元取数→CLMOV SI,20HMOV EBX,[SI];从数据段有效地址20H-23H单元取数→EBX
19(1)地址表达式:段寄存器:[基址寄存器+位移量]或段寄存器:位移量[基址寄存器]
如:DS:[BP+10]
或者DS:10[BP]
对于约定的逻辑段,其段超越前缀可省略。
(2)寻址——指令中基址寄存器内容与指令指定的位移量之和作为操作数所在单元的有效地址(3)80486哪些寄存器可作为基址寄存器:16位2个:BP(约定访问堆栈段:SS)BX(约定访问数据段:DS,ES,FS,GS)32位8个:EBP,ESP(约定访问堆栈段:SS)EAX~EDX,ESI,EDI(约定数据段)3、基址寻址20例如:
MOV BP,BUF
;BUF单元的有效地址MOV DL,DS:[BP+10];从DS附加段BUF+10字节单元取数;→DL。MOV DL,[BP+10];?MOV EAX,NUMMOV EDX,[EAX+10H];从数据段NUM+10H—NUM+13H单元;取数→EBX21有两种格式:
(1)有比例因子的变址寻址:存储单元的有效地址=比例因子*变址寄存器+位移量
指令格式:段寄存器:[比例因子*变址寄存器+位移量]或段寄存器:位移量[比例因子*变址寄存器]
比例因子——是1,2,4,8中的一个数
可作为变址寄存器的是:32位7个:EBP(约定访问堆栈段)
EAX~EDX,ESI,EDI(约定访问数据段)。
4、变址寻址
22(2)没有比例因子的变址寻址:存储单元的有效地址=变址寄存器+位移量
指令格式:段寄存器:[变址寄存器+位移量]
或段寄存器:位移量[变址寄存器]
可作为变址寄存器的是:2个16位:只能选择SI,DI,约定访问数据段。
例如:
MOVAL,[2*EBX+10];从数据段有效地址为2*EBX+10单元取数—>ALMOVAH,[SI+5];从数据段有效地址为SI+5单元取数→AL23有两种格式:(1)有比例因子的基址加变址寻址:
有效地址EA=基址寄存器+比例因子*变址寄存器+位移量指令格式:段寄存器:[基址寄存器+比例因子*变址寄存器+位移量]
或段寄存器:位移量[基址寄存器+比例因子*变址寄存器]
或段寄存器:位移量[基址寄存器][比例因子*变址寄存器]基址、变址寄存器必须是32位的。访问约定的逻辑段,段超越前缀可省略。例:MOVAX,[EBX+8*EDX+5]5、基址加变址寻址
24(2)没有比例因子的基址家变址寻址:
存储单元的有效地址=基址寄存器+变址寄存器+位移量
指令格式:
段寄存器:[基址寄存器+变址寄存器+位移量]
或段寄存器:位移量[基址寄存器+变址寄存器]
或段寄存器:位移量[基址寄存器][变址寄存器]
基址、变址寄存器必须是规定的16位寄存器。访问约定的逻辑段,段超越前缀可省略。
25例:DATA1DB10HDUP(?);定义16个字节的缓冲区
DATA2DB11H,22H,33H,44H,55H,66H,77H······MOVBX,OFFSETDATA1;设BX=0100HMOVDI,11HMOVAX,[BX+DI+4];EA=0100H+011H+4
;EA=0115H,AX=7766H0100H……0110H……0114H0115H0116H0117H……11H……55F66H77H……77H66HAXBX存储器26注意:
在间址、基址、变址、基址加变址这4种寻址方式中,可使用16位,也可使用32位寄存器寻址。
实模式时,段的最大长度为64K,所以必须保证CPU最终算出的有效地址不超过FFFFH,而且操作数最高字节单元的有效地址也不能超过FFFFH,否则执行寻址时系统将要瘫痪。例如:P。3727(1)存储器寻址时规定使用的寄存器和约定访问的逻辑段。
4.2.480486寻址方式的段约定和段超越
28(2)如果要访问约定访问之外的逻辑段,必须明确指出相关逻辑段的段超越前缀。例:
MOVAL,[BP];用BP间址,访问堆栈段
MOVAL,DS:[BP];用BP间址,访问数据段
MOVAL,FS:[BP];用BP间址,访问FS附加段MOVAL,[BX];用BX间址,访问数据段
MOVAL,CS:[BX];用BX间址,访问代码段
MOVAL,ES:[SI+5];用SI变址,访问ES附加段MOVAL,GS:[EAX+10];用EAX基址寻址,访问GS附加段
(3)使用变量名直接寻址访问存储器,不需要另加段超越前缀。MOVCX,BUF29作业2:1.
设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,EAX=00001000H,EBX=00002000H,假设按16位实模式操作,确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方法。(1)MOV AL,[1234H] (2)MOV EDX,[BX](3)MOV CL,[BX+100H](4)MOV [SI],EBX(5)MOV AH,BUF[BX+SI](6)MOV EAX,[BP+1234H](7)MOV [EAX+EBX],DH2.
写出把首地址为BUF的字节缓冲区中第5个字节数送AL寄存器的指令,要求使用以下几种寻址方式:(1)寄存器间接寻址(2)寄存器变址寻址(3)基址变址寻址。30标志寄存器(EFLAGS)是一个32位的寄存器,含有三类标志:状态标志、控制标志、系统标志。如图:4.380486的标志寄存器EFLAGS/FLAGS
CPAZSTIDOIOPLNTRFVMACVIFVIPID22123456789101112131415161718192021318086/808880386/80486DXPentium031(D0)C标志——进位/借位标志,主要用于多字节的加、减运算,当最高位有产生进位/借位,则C标志置1,否则为0。。移位和循环移位也影响C标志。(D2)
P标志——奇偶标志,P标为1,表示操作结果有偶数个“1”;P标为0,表示操作结果有奇数个“1”。用于检查数据在传输过程是否出错。(D4)
A标志——辅助进位/借位标志。主要用于BCD码的运算。置为1,表示: 字节加/减时,最低4位向高位产生了进位或借位。 字加/减时,最低8位向高位产生了进位或借位。双字加/减时,最低16位向高位产生了进位或借位。(D6)Z标志——全零标志。置为1,表示操作结果为0。
32(D7)
S标志——符号标志。置为1,表示结果数据的最高位为“1”。(D11)O标志——溢出标志。置为1,表示运算结果产生溢出。CPU硬性规定:参与运算的操作数都是有符号数,所以,当两数的符号相同而且与结果的符号位相异时,O标置1。
程序设计时:如果定义操作数是有符号数,测试O标志,为1表示溢出;如果定义操作数是无符号数,测试C标志,为1,表示溢出。
(D10)D标志——方向标志。用于控制字符串操作指令中地址变化的方向。
执行指令STD,D标志置1,串指针(SI/DI)自动减量,即减址调整。执行指令
CLD,D标志置0,串指针(SI/DI)自动增量,即增址调整。
33(D9)I标志——中断允许标志。控制CPU是否响应外部可屏蔽中断(INTR)请求。
执行STI指令,I标志置为1,CPU响应可外部屏蔽中断INTR。
执行CLI指令,I标志置为0,CPU不响应外部可屏蔽中断。
I标志不影响外部非屏蔽中断(NMI)或内部中断。
(D8)T标志——陷阱标志。用于单步调试程序。
T标志为1时,CPU每执行一条指令后都产生一个内部中断,可利用调试软件观察该指令执行的情况。
T标志为0时,CPU连续执行指令。
34(D13-12)IOPL标志——I/O特权级标志,占2位,表示0级~3级4个I/O特权级,其中0级最高。用于保护模式下指明执行I/O指令所需的优先级。如果当前任务的特权级≥IOPL中规定的级别,则可以执行该I/O指令,否则发生保护异常中断,执行程序被挂起。
(D14)
NT标志——任务嵌套标志。表示当前任务是否嵌套在另一个任务内,该标志控制中断返回指令的执行。如果当前任务A嵌套在另一任务B内,则NT=1,指示CPU,A任务执行完毕后要返回到B任务中。
35(D16)RF标志——恢复标志,用于控制是否接受调试故障。当该位置0时,接受调试故障;当该位置1时,忽略调试故障,既使遇到中断或调试故障,也不产生异常中断,强迫程序恢复执行,当指令执行顺利时,RF自动清0。(D17)VM标志——虚拟标志。CPU在保护模式下使VM=1,转换为虚拟86操作模式。80486就象一个高速的8086CPU在运行8086的指令流。
36(D18)AC标志——对准标志。若AC=1,如果进行未对准的地址访问,则产生异常中断。
未对准的地址访问指: 访问字操作数时,从奇地址开始。
访问双字操作数时,地址不是4的整数倍。 访问4字操作数时,地址不是8的整数倍。(D19)VIF
标志——虚拟中断标志。为虚拟方式下中断标志位的拷贝,用于多任务环境下,给操作系统提供中断的信息。(D20)VIP标志——虚拟中断暂挂标志。用于多任务环境下,给操作系统提供中断暂挂信息。(D21)ID标志——指示Pentium微处理器支持CPUID指令,该CPUID指令给系统提供有关微处理器的各种信息,例如版本号和制造商等。
37为了支持80486的三种工作模式,指令系统设计了系统管理指令、保护模式控制指令以及高级语言支持指令等。80486基本的指令有:
4.4.1传送类指令
4.4.2算术运算指令
4.4.3转移和调用指令
4.4.4逻辑运算和移位指令
4.4.5串操作指令
4.4.6处理机控制指令
4.480486的基本指令集
384.4.1传送类指令
特点:源操作数不变,不影响状态标志。分类:通用转送指令MOV堆栈操作指令PUSH/POP输入/输出指令IN/OUT(第7章介绍)。
391、通用传送指令
(1)、数据传送指令格式:
MOV DEST ,SRC功能:把SRC中的内容复制到DEST中去。DEST和SRC是字节、字或双字。段寄存器通用寄存器存储器立即数图传送指令数据流40例:寄存器之间的数据传送MOV AL,DH ;AL←DH(8位)MOV DS,AX ;DS←AX(16位)MOV EAX,ESI ;EAX←ESI(32位)例:寄存器与存储器之间的数据传送MOV [BX],AX ;间接寻址MOV EAX,[EBX+ESI] ;基址变址寻址MOV AL,BLOCK ;BLOCK为变量名,直接寻址例:立即数送通用寄存器、存储器MOV EAX,2345678H ;EAX←2345678H(32位)MOV byteptr[BX],12H ;间接寻址(8位)MOV AX,1234H ;AX←1234H(16位)411)、源和目的操作数不能同时为内存操作数
例:MOV [DI],[SI];是非法指令,同为内存操作数2)、立即数不能作为目的操作数
例:MOV 1234H,AX;是非法指令
3)、不能将立即数直接传送到段寄存器
例:MOV DS,1000H;是非法指令
应借用一个16位的寄存器过度:
MOV AX,DATA;DATA为数据段名,编译后即为DATA段的段基址。
MOV DS,AX使用时应注意以下几点:
424)、源和目的操作数的数据位应等长,即同为字节、字或双字。例:
MOV BL,AX;是非法指令
XYZ DB 12H;定义XYZ为字节变量
MOV AX,XYZ;AX是字操作数,而XYZ是字节变量,错
MOV [BX],12H;间接寻址,报警告错误应用PTR运算符说明目的操作数的属性(可以是BYTE、WORD、DWORD)。改为:MOV WORDPTR[BX],12H;间接寻址(16位)正确5)、以CS为目标的一切转送都是非法的。43(2)、符号扩展传送指令
格式1:
MOVSX DEST ,SRC说明:目标操作数DEST是16位或32位的寄存器操作数。源操作数SRC是小于(或等于)目标字长的寄存器操作数或内存操作数。功能:将SRC的符号位向高位扩展使其与目标字长相同,然后再传送到DEST,而SRC不变。例:MOV DL,-16;DL=F0H(补码)
MOVSXBX,DL;BX=FFF0H,而DH,DL不变。格式2:CBW;AL中符号扩展到AH中格式3:CWD;AX中符号扩展为32位,分别送到DX和AX中。格式4:CWDE;AX中符号扩展为32位,送到EAX中。44(3)、零扩展传送指令
格式:
MOVZX DEST ,SRC功能:与MOVSX类似,只是将源操作数SRC高位用0补足16或32位,然后再传送到目标寄存器DEST例:MOV DL,-16;DL=F0H(补码)
MOVZXBX,DL;BX=00F0H,而DH,DL不变。45(4)、有效地址传送指令
格式:LEA
目标寄存器,内存操作数功能:将内存操作数的有效地址传送到目标寄存器中,要求二者都是(16或32位)。例:LEA BX,BUF;将BUF单元的有效地址→BX
等价于:MOVBX,OFFSETBUF;编译时完成有效地址的计算,执行时完成赋值。例:LEAEAX,[SI+5];将变址寻址的那个单元的有效地址→EAX46LEA指令与MOV指令的区别:LEASI,BUFF指令是将标号BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是将标号BUFF所指存储单元的内容送入SI。BUFF=0123454800FEFFLEASI,BUFF;执行后:(SI)=0002HMOVSI,BUFF;执行后:(SI)=0048H段起始地址47(5)、指针传送指令
格式:LDS高16位低16位LES目标(16位)寄存器,32位内存操作数
LFSLGS
目标(32位)寄存器,
48位内存操作数
LSS高16位低32位例:设数据段:ADDR1 DF 1234567809ABHADDR2 DD 1A2B3C4DH代码段:对DS初始化
LESEBX,ADDR1;ES=1234H,EBX=567809ABH
LDSSI,ADDR2;DS=1A2BH,SI=3C4DH48上例LDS指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及DS中。其中:低16位送到一个指定的字寄存器SI,高16位送到DS中。例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468HSIDS57H13H68H24HDS:2480HDS:2481HDS:2482HDS:2483H
1357
2468LDSSI,[2480]49格式及功能:LAHF;将标志寄存器的低8位传送到AH寄存器中。SAHF;将AH的内容传送到标志寄存器的底8位。(6)、标志寄存器传送指令
(7)、交换指令格式:XCHG DEST,SRC功能:DEST与SRC中的内容交换说明:DEST与SRC是等长的操作数,但不能同时为内存操作数。
50实例:将两个存储单元的内容互换
数据段:FIRST DB 35H SECOND DB 38H用XCHG指令实现:
用MOV指令实现:
MOV AL,FIRST MOV AL,FIRST MOV AH,SECONDXCHG AL,SECOND MOV FIRST,AHMOV FIRST,AL MOV SECOND,AL51(8)、字节交换指令
格式:
BSWAP 32位寄存器功能:将32位寄存器的第四字节(位32~位24)与第一字节(位7~位0)交换,第三字节(位23~位16)与第二字节(位15~位8)交换。例:MOV EAX,44332211HBSWAPEAX;EAX=11223344H
(9)、查表指令
格式:XLAT 表头变量名功能:使AL中的值转换为表中的一个值。在DS:BX(或DS:EBX)建立一个单字节的集合——字节表,用EBX(或BX)作为基址,AL作为表的无符号下标(既表指针),将AL指向的那个单元的内容传送回AL。实例:查找与NUM单元的数相对应的字形编码52实例:查找与NUM单元的数相对应的字形编码
表4.3数码管字形编码表字形0123456789ABCDEF编码H3F065B4F666D7D077F6F777C395E7971在数据段中定义:TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HNUM DB 2代码段设置如下指令,即可查出字形为2的编码:MOV DS,数据段的段基址MOV BX,OFFSETTABMOV AL,NUMXLAT TAB;AL=5BH532、堆栈操作指令堆栈——堆栈位于堆栈段,其段地址由SS指示,SP寄存器作为指针,SP内容始终指向栈顶所在存储单元。栈底为堆栈空间的高地址单元,栈顶为低地址单元,且只有栈顶一个出口,即当前栈顶为空时,栈顶和栈底指向同一内存单元;用来暂存数据。见图4.2
数据的存取规律——“先进后出”。数据进栈的规律——高位字节存入高地址,低位字节存入低地址。出栈规律——低位字节弹到目标操作数的低位,高位字节弹到目标操作数的高位。用SP或ESP存放栈顶的有效地址。数据进栈后,ESP向低地址方向浮动;出栈后,ESP向高地址方向调整。54格式:PUSH
源操作数 其中源操作数可是立即数、通用寄存器和内存操作数功能:该指令使ESP中内容减2(16位操作数)或减4(32位操作数),然后把操作数放到新栈顶。若源操作数是ESP或SP,则486CPU将调整前的ESP或SP压栈。例:PUSH AX ;SP-2→SP,AX→SS:[SP]的2个单元。
PUSH DWORDPTR[SI+5]
;完成ESP-4→ESP,[SI+5]的1个双字→SS:[ESP]的4个单元。(1)、PUSH进栈指令
55(2)、POP出栈指令格式:
POP 目标操作数其中源操作数是除CS以外的段寄存器、通用寄存器、内存操作数功能:从栈顶弹出2个或4个字节,送目标操作数,然后调整堆栈指针。例:POP AX ;SS:[SP]的2个单元→AX,SP+2→SP。
POP DWORDPTR[SI];SS:[ESP]的4个字节→[SI]的4个单元,ESP+4→ESP。
56PUSH/POP实例:设SS=0200H,SP=0212H,AX=1234H,CX=5678H执行指令
PUSHAX PUSHCX POPBX;BX的值为5678H三条指令后堆栈空间的数据变化如图4.2所示。
进栈:出栈:
格式:PUSHF;16位的
POPFPUSHFD;32位的
POPFD(3)、标志寄存器的进栈/出栈指令下一页57返回1返回258(5)、通用寄存器的进栈/出栈指令进栈:出栈:
格式:PUSHA;16位的
POPAPUSHAD;32位的
POPAD功能:执行PUSHA时,首先,SP-16→SP,依次把AX,CX,DX,BX,SP,BP,SI,DI的内容压入堆栈,进栈的SP值是调整前的值。执行POPA时,先从栈顶弹出16个字节,并依次装入DI,SI,BP,SP,BX,DX,CX和AX。执行PUSHAD时,首先,ESI-32→ESP,依次把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI的内容压入堆栈,进栈的ESP值是调整前的值。执行POPAD时,先从栈顶弹出32个字节,并依次装入EDI,ESI,EBP,ESP,EBX,EDX,ECX和EAX。59作业2书P.694.14.2题
思考题:
试指出下列指令中的错误
(1)MOV [BX],[SI]
(2)MOV AH,DX
(3)INC [BX]
(4)MOV DS,SS
(5)XCHG AX,2000H
(6)MOV AX,[BX+DX]
(7)XCHG [BP],ES
(8)ADD [BX],BX
(9)MOV AX,DI+SI
604.4.2算术运算指令——执行后要影响标志寄存器的状态标志
1、基本四则运算
2、BCD码调整指令
611、基本四则运算
(1)ADD二进制加法指令
ADDDEST,SRC;DEST+SRC——>DEST
(2)SUB二进制减法指令
SUBDEST,SRC;DEST-SRC——>DEST
(3)ADC带进位加法ADCDEST,SRC;DEST+SRC+C标——>DEST(4)SBB带进位减法
SBBDEST,SRC;DEST-SRC-C标——>DEST
62说明:
目标操作数DEST,为8,16或32位的寄存器、内存操作数
源操作数SRC要与DEST等长,可是立即数、寄存器或内存操作数。
DEST与SRC不能同为内存操作数。
若DEST、SRC都不能确定其操作数长度时,用PTR说明长度。
执行后,影响A(辅助进/借位)、C(进/借位)、O(溢出)、P(奇偶性)、S(符号)、Z(全零)6个标志。
63例:MOV AX,9876H;AX=9876HADD AH,AL;AX=0E76H,CF=1,SF=0,OF=0,ZF=0,AF=0,PF=0
ADC AH,AL;AX=8576H,CF=0,SF=1,OF=1,ZF=0,AF=1,PF=0
见A.ASMMOV AX,9966H;AX=9966HSUB AL,80H;AL=E6H,CF=1,SF=1,OF=1,ZF=0,AF=0,PF=0
SBB AH,80H;AX=18H,CF=0,SF=0,OF=0,ZF=0,AF=0,PF=1
例:(书P.46)实现多字节二进制数的加法运算64(5)INC自加1指令INCDEST;DEST+1——>DEST
影响A,O,P,S,Z标志(6)DEC自减1指令DECDEST;DEST—1——>DEST
影响A,O,P,S,Z标志(7)NEG自求补指令NEGDEST;0—DEST——>DEST
影响A,C,O,P,S,Z标志65说明:
以上的目标操作数DEST,为8,16或32位的寄存器、内存操作数
用间址、基址、基址加变址的内存操作数,必须用PTR说明其长度。
例:INC [BX];错误
INC BYTEPTR[BX];对DS:[BX]1个单元的内容加1。
如果原来的操作数为正数,执行NEG后,变成负数(用补码表示)
如果原来的操作数为负数(用补码表示),执行NEG后,变成正数。
特例:DEST=80H,执行NEG后,仍为80H,但O标=1。只有当DEST=0,执行NEG后,C标=0,其他数,C标总为1。66(8)XADD交换加法指令
XADD DEST,SRC先进行DEST与SRC的互换,然后DEST+SRC—>DEST。
(9)MUL无符号乘法指令
MUL SRC(reg,mem)功能:完成无符号数的乘法,被乘数是累加器(AL、AX或EAX),乘以SRC。
字节乘时,AL*SRC→AX
字乘时,AX*SRC→DX:AX
双字乘时,EAX*SRC→EDX:EAX说明:如果乘积的高阶字节(AH)、字(DX)、双字(EDX)是0,则C标和O标置0,否则,置1。
67(10)IMUL有符号数的整数乘法
格式:
①
IMUL SRC(reg、mem)②IMUL DEST(reg),SRC(reg,mem,imm)③IMUL DEST(reg),SRC1(reg,mem),SRC2(imm)功能:完成有符号数的乘法操作
①与MUL指令相同②DEST*SRC→DEST寄存器中③SRC1*SRC2→DEST寄存器中说明:默认其乘数、被乘数均为有符号数的补码
源、目操作数类型一致,乘积只取和目的操作数相同的位数,高位被舍去,且CF=OF=1。
68例:
MOV BX,-6IMUL BX,5;BX=FFE2H=-30
MOV EAX,32IMULEBX,EAX,4;则EBX=00000080H,;EAX=00000020H69(11)DIV无符号除法格式:
DIV SRC(reg、mem)功能:完成无符号数的除法,被除数是累加器(AX、DX:AX或EDX:EAX),除数是SRC。要求被除数是除数的两倍字长。根据除数SRC的字长,可执行:
字节除法:AX/SRC商→AL,余数→AH;
字除法:DX:AX/SRC商→AX,余数→DX;
双字除法:EDX:EAX/SRC商→EAX,余数→EDX;(12)IDIV有符号除法
格式:
IDIV SRC(reg、mem)说明:
功能与DIV相同,但除数、被除数和商值都采用补码方式表示,余数与除数同符号。
当除数为0或商值超出范围,则自动产生0型中断。
70(13)符号扩展指令
格式1:CWB;将AL中的符号位扩展到AH中。
格式2:CWD;将AX中的符号位扩展到DX中。
格式3:CWDE;将AX中的符号位扩展到EAX的高16位。格式4:CDQ;将EAX中的符号位扩展到EDX中。
应用:如果被除数不是除数的双倍字长,在进行除法运算时,须先进行符号扩展。例: MOV AX,BLOCK;BLOCK为变量
CWD;被除数高位扩展
MOV BX,1000HIDIV BX71(14)CMP比较指令格式:
CMP DEST,SRC功能:DEST减SRC,但结果不回送DESTCMP指令影响A,C,O,P,S,Z这6种标志。例:
CMP BYTEPTR[BX],‘A’CMP CX,3执行CMPAX,BX指令对标志位的影响,见下表:72表执行CMPAX,BX指令对标志位的影响数据类型关系CFZFSFOF判断带符号数AX=BX0100ZF=1OFSF=0AX<BX-010OFSF=1-001OFSF=1AX>BX-000OFSF=0-011OFSF=0无符号数AX=BX0100ZF=1AX<BX10--CF=1AX>BX00--CF=0
ZF=0732、BCD码调整指令目的:当使用二进制运算指令对十进制数运算时,对其二进制结果进行调整,将结果调整成BCD码表示形式。74(1)DAA组合十进制数加法调整指令
格式:
DAA功能:将存放在AL中的二进制和数,调整为组合十进制数调整方法:
若AL中低4位大于9或AF=1,则AL+06H→AL,1→AF,否则不调整。
若AL中高4位大于9或CF=1,则AL+60H→AL,1→CF,否则不调整
DAA一般紧跟在ADD或ADC之后,影响标志S,Z,A,P,C。
例:
ADD AL,BUF;AL与BUF存放的数都是组合BCD码数。
DAA自己看例4.4.1
(书P.51)
75例:进行BCD码加法运算59+68=1270101100159+011010006811000001C1+0110011066100100111127加法运算结果为C1,AF=1,高位大于9加66H进行压缩BCD调整76(2)DAS组合十进制数减法调整指令
格式:
DAS功能:将存放在AL中的二进制差值,调整为组合十进制数调整方法:
若AL中低4位大于9或AF=1,则AL﹣06H→AL,1→AF,否则不调整。
若AL中高4位大于9或CF=1,则AL-60H→AL,1→CF,否则不调整
DAS一般紧跟在SUB或SBB之后,影响标志S,Z,A,P,C
若被减数小于减数,结果应为负数,但BCD码数无法表示负数,用DAS调整后,CF=1,AL寄存器中得到的差值是相对于模100的“补码”。
77(3)AAA未组合十进制数加法调整指令
格式:
AAA功能:将存放在AL中的二个未组合十进制数之和进行调整,从而在AH中得到十位的BCD码,AL中得到个位BCD码。
调整方法:
若AL中低4位大于9或AF=1,则AH+1→AH;AL+06H→AL,高4位清0;1→AF→CF。
执行AAA之前,应使AH=0。
AAA一般紧跟在ADD或ADC之后,影响标志A,C。
78(4)AAS未组合十进制数减法调整指令
格式:
AAS功能:将存放在AL中的二个未组合十进制数之差值进行调整.调整方法:
当被减数小于减数时,AAS执行后CF=1,AH内容减1,AL中的差值是相对与模10的“补码”。当被减数大于减数时,AAS执行后CF=0,AH内容不变,对AL中的差值不做修正。
例如:
MOV AX,0004HSUB AL,05H;04H-05H→AL
AAS
;CF=1,AH=FFH,AL=09H79(5)AAM未组合十进制数乘法调整指令
·格式:
AAM功能:将存放在AX中的二个未组合十进制数之积进行调整
调整方法:
用MUL实现两个未组合十进制数相乘,其乘积在AX中,最大值为81,用二进制数表示。
AL/10商—>AH,余数—>AL。调整结果:AH中为乘积的十位数,AL中为乘积的个位数,为高4位恒为0的未组合十进制数。应用:只要AX中的值≤81,任何时候都可以使用AAM调整为未组合十进制数。例:
MOV AL,07H
MOV BL,09H
MUL BL;按二进制相乘,积AX=003FHAAM;调整后AX=0603H80(6)AAD未组合十进制数除之前调整指令格式:
AAD功能:将AX中的两个未组合的十进制数(AH为十位数,AL为个位数)转换成等值的二进制数。
调整方法:
AH*10+AL→AL,0→AH。应用:
用于二进制除法DIV操作之前,或任何时候需将两个未组合的十进制数调整为二进制数时。影响标志S,Z,P。
例4.4.2编程实现十进制的除法86÷3=28……2
MOVBL,03HMOVAX,0806HAAD;将AX中86转换成二进制数,则AL=0056HDIVBL;AL为二进制商11100(1CH),AH为余数(02)。
PUSHAXAAM;将AL中的二进制商转换为AX=0208H
见F442.ASM814.4.3转移和调用指令
用于控制指令流程的指令有:转移、循环、过程调用和中断调用。按转移条件分:无条件转移和有条件转移按转移的范围分:段内转移——是指在同一段的范围之内进行转移,此时只需改变IP寄存器的内容,即用新的转移目标地址代替原有的IP的值就可达到转移的目的。段间转移——是要转到另一个段去执行程序,此时不仅要修改IP寄存器的内容,还需要修改CS寄存器的内容才能达到目的,因此此时的转移目标地址应由新的段地址和偏移地址两部分组成。按获取地址的方法分:直接转移和间接转移821.无条件转移指令功能:无条件转移到指定的目的地址去执行指令。
格式1:段内直接转移
JMP 标号
JMP SHORT标号说明:
SHORT运算符指明偏移量为8位,允许转移值的范围为-128~+127,为短距离转移(称短转移)。不含SHORT的指令,其转移范围可覆盖整个逻辑段。例:
JMP NEXTNEXT: MOV AL,BL83格式2:段内间接转移
JMP 寄存器操作数
JMP 内存操作数说明:寄存器、内存单元存放的是有效地址
执行时,本指令将有效地址写入IP或EIP,实现段内间接转移。
例:设数据段:POINTERDWP11,P12;汇编后P11的16位偏移地址→POINTER字单元代码段:对DS初始化
MOV BX,OFFSETPOINTER JMP [BX] ;DS:[BX]→IP,转移到P11程序段 ……
MOV SI,POINTER+2 JMP SI ;SI→IP,转移到P11程序段P11: ……P12: …… 84格式3.1:段间直接转移
JMP 标号对标号的要求:在本模块中用EXTRN说明为“外部变量名”
在转移模块中用PUBLIC说明为“公共变量”
格式3.2:段间间接转移
JMP 内存操作数段间转移指令说明:在模块设计时,从一个模块转移到另一个模块,用段间转移指令。
在实模式下,段间间接转移指令将段地址和偏移地址送给CS和IP。例:数据段:
ADDRDD12345678H;32位转移地址
代码段:对DS初始化
JMP ADDR;1234H—>CS,5678H—>IP实现段间转移852.条件转移指令功能:根据上一条指令对标志寄存器中标志的影响来决定程序执行的流程,若满足指令规定的条件,则程序转移执行指定标号处的指令
;否则,程序顺序执行后续指令。条件转移指令的转移范围:仅限于段内转移格式:操作码助记符,转移地址标号说明:各种转移条件隐藏在操作码助记符当中。条件转移指令包括四类: 单标志位条件转移指令 无符号数比较条件转移 带符号数比较条件转移 测试CX条件转移86(1)单标志位条件转移指令助记符判断条件说明助记符判断条件说明JOOF=1溢出转移JNZ∕JNEZF=0非零/不等于转移JNOOF=0无溢出转移JP∕JPEPF=1奇偶为偶转移JSSF=1负数转移JNP∕JPOPF=0奇偶为奇转移JNSSF=0正数转移JCCF=1进位转移JZ/JEZF=1零/等于转移JNCCF=0无进位转移例: SUB AL,BL JZNEXT;若标志ZF=1则转移到标号NEXT处执行87(2)无符号数比较条件转移例: CMP AX,BX JA NEXT;无符号数AX与BX比较,若AX>BX则转移到标号NEXT处执行程序。助记符判断条件说明(A-B)JA∕JNBECF=0∧ZF=0高于∕不低于且不等于(A>B)转移JAE∕JNBCF=0∨ZF=1高于等于∕不低于(A≥B)转移JB∕JNAECF=1∧ZF=0低于∕不高于且不等于(A<B)转移JBE∕JNACF=1∨ZF=1低于等于∕不高于(A≤B)转移88(3)带符号数比较条件转移例:助记符判断条件说明(A-B)JG∕JNLESFOF=0∧ZF=0大于∕不小于且不等于(A>B)转移JGE∕JNLSFOF=0∨ZF=1大于等于∕不小于(A≥B)转移JL∕JNGESFOF=1∧ZF=0小于∕不大于且不等于(A<B)转移JLE∕JNGSFOF=1∨ZF=1小于等于∕不大于(A≤B)转移例: CMP AX,BX JG NEXT;带符号数AX与BX比较,若AX>BX则转移到标号NEXT处执行程序。89(4)测试CX条件转移助记符判断条件说明(A-B)JCXZCX=0CX=0转移,转移范围-128~+127JECXZECX=0ECX=0转移,转移范围-128~+127例: JCXZ NEXT;CX=0则转移到标号NEXT处执行程序。条件转移指令一般紧跟在CMP或TEST指令之后,判断执行CMP或TEST指令对标志位的影响来决定是否转移。90实例:求符号函数1, x>0f(x)=0, x=0 -1,x<0假设X为某值且存放在寄存器AL中,求出函数值f(x)存放在AH中。
CMP AL,0 JGE BIG ;AL≥0,转移到BIG处;
MOV AL,0FFH;否则,AL=-1
JMP DOWN ;无条件转移BIG: JE DOWN ;AL=0转移到DOWN处
MOV AL,1;否则,AL=1
DOWN:MOV AH,AL见F443.ASM
91(5)循环控制转移功能:用(E)CX计数器中的内容控制循环次数,先将循环计数值存放在(E)CX中,每循环一次(E)CX内容减1,直到(E)CX为0时循环结束。指令格式:LOOP标号;(E)CX-1→(E)CX,若CX≠0,转
LOOPZ标号;(E)CX-1→(E)CX,若CX≠0,且Z标=1,转LOOPNZ标号;(E)CX-1→(E)CX,若CX≠0,且Z标=0,转92实例:找出以ARRAY为首地址的10个字数组中的第一个非0项,送AX中.数据段ARRAY DW0,0,0,5,6,7,8,3,4,9;(10个数)代码段对DS初始化
MOV CX,0AH LEA BX,ARRAY MOV SI,0FFFEH;-2,从第一个数据开始。
ZERO:INC SI INC SI CMP WORDPTR[BX+SI],0 LOOPZ ZERO;CX-1→CX,判断CX≠0,且Z标=1,转
MOV AX,[BX+SI]演示程序F4LOOP.ASM933、子程序调用与返回子程序——相对独立的一段程序主程序或调用程序——调用子程序的程序子程序的特点:
允许有多个入口和多个出口子程序执行完毕必须返回调用程序的断点,以执行调用指令的后继指令。子程序的属性:如果子程序和调用它的主程序同属于一个代码段,它具有NEAR(近)属性;否则,子程序应设置为FAR(远)属性。子程序调用分为:段内直接调用、段内间接调用,段间直接调用、段间间接调用。子程序的返回指令: 带参数和不带参数的返回指令。94(1)段内直接调用
格式:CALL 过程名过程名编译后即为子程序的入口地址
(2)段内间接调用
格式:CALL 寄存器或内存操作数执行过程:当CUP执行段内调用指令时,首先把断口地址的有效地址压栈,为子程序返回作准备,然后把子程序的入口地址→IP,从而转入子程序。
断口地址——CALL指令的后继指令地址。95(3)段间直接调用
格式:CALL FARPTR远过程名说明:此过程用FAR属性定义在另一代码段中(4)段间间接调用格式:CALL
内存操作数执行过程:当CUP执行段间调用指令时,将当前的CS和EIP(IP)压栈,将目标的段基址和偏移量送给CS和EIP。实例:见书P。57
(程序F4CALL.ASM)
96(5)无参数的返回格式:RET
功能:子程序的出口,将堆栈中的断口地址弹出。若是段内返回,则只弹出偏移地址至EIP(IP),若是段间返回,则需弹出段基址至CS和EIP(IP)。(6)有参数返回指令
格式:RET N(N为偶数)功能:首先完成RET指令的操作,然后再执行SP+N→SP。注意:在执行RET以前,栈顶元素必须是调用程序的断口地址。
974.中断调用及返回
(1)中断调用指令(又称为软件中断指令)
格式
INTn(n=1~255称为中断类型码)
执行时,首先将标志寄存器的内容以及INTn指令的断口地址(其段地址CS和断口的有效地址IP)6元素入栈,然后转入系统N型中断服务程序。
(2)中断返回指令
格式
IRET执行时,依次从栈顶弹出6个元素→IP,CS,FLAGS,返回调用程序断点。
984.4.4逻辑运算和移位指令
1、逻辑运算指令2、移位指令3、测试与位测试指令991、逻辑运算指令——对字节或字数据进行按位的操作。
(1)取反指令
格式:NOT目标操作数功能:按位求反,结果放—>目标操作数,不影响标志位。(2)与指令
格式:AND目标,源操作数功能:源、目操作数按位相“与”,结果放—>目标操作数(3)或指令
格式:OR目标,源操作数功能:源、目操作数按位相“或”,结果放—>目标操作数(4)异或指令
格式:XOR目标,源操作数功能:源、目操作数按位“异或”,结果放—>目标操作数
以上三种操作影响标志P,S,Z,A标未定义,CF=0,OF=0。100说明:(1)NOT指令改变寄存器或存储单元的每一位状态,原来位0变为1,原位1变为0。【例】
MOV AX,878AH ;AX=878AHNOT AX, ;AX=7875H(2)AND指令主要用来屏蔽掉一个数中某些位,以便对剩下的其它位进行某些处理。逻辑乘的运算法则为:1∧1=1,1∧0=0,0∧1=0,0∧0=0【例】将AL中第3位和第7位清零。
MOV AL,0FFH;AL=11111111B
AND AL,77H ;AL=01110111B101说明:(3)OR指令用于对寄存器或存储单元中某一位置1或置0。逻辑加的运算法则为:1∨1=1,1∨0=1,0∨1=1,0∨0=0。【例】
ORBX,0C000B将BX的两位最高的有效位(15和14位)置成1,而其它位不变。【例】将AL寄存器中第3位和第7位置1。MOV AL,0OR AL,88H ;AL=10001000B102说明:(4)XOR指令主要用于判断两个操作数中那些位是不同的。如两个操作数相对应位的值不同时,在目的操作数产生一个1。相同为0,不同为1。逻辑异或的运算法则为:1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0。【例】按位加运算。MOV AL,88H ;AL=10001000BMOV BL,87H ;BL=10000111BXOR AL,BL ;AL=00001111B=0FH1032、移位指令(1)开环移位算术左移:SAL操作数,CL/立即数逻辑左移:SHL操作数,CL/立即数功能:将(OPR)向左移动CL指定的次数,最低位补入相应的0,CF的内容为最后移入位的值。算术右移:SAR操作数,CL/立即数功能:将(OPR)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。逻辑右移:SHR操作数,CL/立即数
功能:将(OPR)向右移动CL规定的次数,最高位补入相应个数的0,CF的内容为最后移入位的值。
0CFOPR0CFOPRCFOPR其中:OPR为操作数104【例】算术右移运算。
MOV BH,08H ;BH=08H=00001000BMOV CL,2 ;CL=2SAR BH,CL ;BH=02H=00000010B,CF=0该例语句“SARBH,CL”实际上完成了BH/4→BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)【例】将两个非压缩BCD码(高位在BL,低位在AL)合并成压缩BCD码送AL。MOV CL,4;将计数值送CLSHL BL,CL;将BL的低4位移到高4位
AND AL,0FH;清零AL高4位
OR AL,BL;合并AL和BL形成压缩BCD码。105(2)闭环移位(循环移位)含进位的循环左移:格式:RCL操作数,CL/立即数功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。含进位的循环右移:格式:RCR 操作数,CL/立即数功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。
CFOPRCFOPR106不含进位的循环左移:格式:ROL 操作数,CL/立即数功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。不含进位的循环右移:格式:ROR 操作数,CL/立即数功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。CFOPRCFOPR107【例】设AL=10110100B,CF=1执行下列语句:执行ROLAL,1后,AL=01101001,CF=1执行RORAL,1后,AL=01011010,CF=0执行RCLAL,1后,AL=01101001,CF=1执行RCRAL,1后,AL=11011010,CF=0【例】
ROL EAX,16;实现高低16位的互换。
108实例:将一个2位数压缩的BCD码转换成二进制数。设数据段
BCD DB01011001B;BCD码为59
BIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 10的认识(教学设计)-2024-2025学年一年级上册数学人教版
- 8《匆匆》教学设计-2023-2024学年统编版语文六年级下册
- 电梯出租服务合同范本
- 钢模板加工合同范本
- 人参买卖合同范本
- 6 传统游戏我会玩2023-2024学年二年级下册道德与法治同步教学设计(统编版)
- Module 5 Unit 2 Can I come in (教学设计)-2024-2025学年外研版(一起)英语三年级上册
- 3《桂花雨》教学设计 第二课时(教学设计)2024-2025学年统编版语文五年级上册
- 承装合同范本
- 6《工具帮助我》 教学设计-2024-2025学年科学一年级上册冀人版
- 海口市存量房买卖合同模板(范本)
- 《材料力学》说课-课件
- 与常见距离的比赛时间对应的VDOT值
- 义务教育物理课程标准(2022年版word版)
- 研学旅行概论教学课件汇总完整版电子教案
- 12月腹痛护理常规
- 控股集团公司组织架构图.docx
- 需求供给与均衡价格PPT课件
- 最常用2000个英语单词_(全部标有注释)字母排序
- 在银行大零售业务工作会议上的讲话讲解学习
- 古代传说中的艺术形象-
评论
0/150
提交评论