版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章微处理器内部结构及指令系统2.1微处理器的内部结构从应用角度(不是从内部工作原理)展开典型8位微处理器的基本结构8088/8086的功能结构8088/8086的寄存器结构8088/8086的存储器结构为学习指令系统打好基础例如:关心用户“可编程”寄存器,不关心无法操纵的“透明”寄存器内部数据总线控制总线数据总线地址总线暂存器累加器ALU标志寄存器指令寄存指令译码时序和控制逻辑通用寄存器组地址寄存器组地址总线控制数据总线控制2.1.1微处理器的基本结构1.算术逻辑单元(运算器)2.寄存器组3.指令处理单元(控制器)2.1.28088/8086的功能结构8088的内部结构从功能上分成两个单元1.总线接口单元BIU管理8088与系统总线的接口负责CPU对存储器和外设进行访问2.执行单元EU负责指令的译码、执行和数据的运算两个单元相互独立,分别完成各自操作,还可以并行执行,实现指令预取(指令读取和执行的流水线操作)2.1.38088/8086的寄存器结构 8088/8086的寄存器组有8个通用寄存器4个段寄存器1个标志寄存器1个指令指针寄存器它们均为16位!图示
汇编语言程序员看到的处理器,就是寄存器所以,一定要熟悉这些寄存器的名称和作用1.通用寄存器8088有8个通用的16位寄存器(1)数据寄存器:AXBXCXDX(2)变址寄存器:SIDI(3)指针寄存器:BPSP4个数据寄存器还可以分成高8位和低8位两个独立的寄存器,这样又形成8个通用的8位寄存器AX:AHAL BX:BHBLCX:CHCL DX:DHDL(1)数据寄存器AX称为累加器(Accumulator)使用频度最高。用于算术、逻辑运算以及与外设传送信息等BX称为基址寄存器(BaseaddressRegister)常用做存放存储器地址CX称为计数器(Counter)作为循环和串操作等指令中的隐含计数器DX称为数据寄存器(Dataregister)常用来存放双字长数据的高16位,或存放外设端口地址(2)变址寄存器16位变址寄存器SI和DI常用于存储器变址寻址方式时提供地址SI是源地址寄存器(SourceIndex)DI是目的地址寄存器(DestinationIndex)在串操作类指令中,SI、DI还有较特殊的用法
现在不必完全理解,以后会详细展开(3)指针寄存器指针寄存器用于寻址内存堆栈内的数据SP为堆栈指针寄存器(StackPointer),指示堆栈段栈顶的位置(偏移地址)BP为基址指针寄存器(BasePointer),表示数据在堆栈段中的基地址SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址堆栈(Stack)是主存中一个特殊的区域,采用“先进后出”或“后进先出”存取操作方式、而不是随机存取方式。用8088/8086形成的微机系统中,堆栈区域被称为堆栈段2.指令指针寄存器IP(InstructionPointer)为指令指针寄存器,指示主存储器指令的位置随着指令的执行,IP将自动修改以指示下一条指令所在的存储器位置IP寄存器是一个专用寄存器IP寄存器与CS段寄存器联合使用以确定下一条指令的存储单元地址3.标志寄存器标志(Flag)用于反映指令执行结果或控制指令执行形式8088处理器的各种标志形成了一个16位的标志寄存器FLAGS(程序状态字PSW寄存器)
程序设计需要利用标志的状态标志寄存器-分类状态标志--用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它CFZFSFPFOFAF控制标志--可由程序根据需要用指令设置,用于控制处理器执行指令的方式DFIFTFOF111512DF10IF9TF8SF7ZF65AF43PF21CF0标志寄存器FLAGS进位标志CF(CarryFlag)当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=03AH+7CH=B6H,没有进位:CF=0AAH+7CH=(1)26H,有进位:CF=1零标志ZF(ZeroFlag)若运算结果为0,则ZF=1;否则ZF=03AH+7CH=B6H,结果不是零:ZF=084H+7CH=(1)00H,结果是零:ZF=1
注意:ZF为1表示的结果是0符号标志SF(SignFlag)运算结果最高位为1,则SF=1;否则SF=03AH+7CH=B6H,最高位D7=1:SF=184H+7CH=(1)00H,最高位D7=0:SF=0
有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的状态奇偶标志PF(ParityFlag)当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=03AH+7CH=B6H=10110110B结果中有5个“1”,是奇数:PF=0PF标志仅反映最低8位中“1”的个数是
偶或奇,即使是进行16位字操作溢出标志OF(OverflowFlag)若算术运算的结果有溢出,则OF=1;否则OF=03AH+7CH=B6H,产生溢出:OF=1AAH+7CH=(1)26H,没有溢出:OF=0?溢出和进位的区别溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确?辅助进位标志AF(AuxiliaryCarryFlag)3AH+7CH=B6H,D3有进位:AF=1运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0方向标志DF(DirectionFlag)用于串操作指令中,控制地址的变化方向:设置DF=0,存储器地址自动增加;设置DF=1,存储器地址自动减少CLD指令复位方向标志:DF=0STD指令置位方向标志:DF=1中断允许标志IF(Interrupt-enableFlag)控制可屏蔽中断是否可以被处理器响应:设置IF=1,则允许中断;设置IF=0,则禁止中断CLI指令复位中断标志:IF=0STI指令置位中断标志:IF=1陷阱标志TF(TrapFlag)用于控制处理器进入单步操作方式:设置TF=0,处理器正常工作;设置TF=1,处理器单步执行指令单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断这种内部中断称为单步中断所以TF也称为单步标志利用单步中断可对程序进行逐条指令的调试这种逐条指令调试程序的方法就是单步调试2.1.48088/8086的存储器结构存储器是计算机存储信息的地方。掌握数据存储格式,以及存储器的分段管理对以后的汇编程序设计非常重要你能区别寄存器、存储器(主存)、外存(包括硬盘、光盘、磁带等存储介质)吗?答案寄存器、存储器和外存的区别寄存器是处理器(CPU)内部暂存数据的存储单元,以名称表示,例如:AX,BX..….等存储器也就是平时所说的主存,也叫内存,可直接与CPU进行数据交换。主存利用地址区别外存主要指用来长久保存数据的外部存储介质,常见的有硬盘、光盘、磁带、U盘等。外存的数据只能通过主存间接地与CPU交换数据程序及其数据可以长久存放在外存,在运行需要时才进入主存1.数据的存储格式计算机中信息的单位二进制位Bit:存储一位二进制数:0或1字节Byte:8个二进制位,D7~D0字Word:16位,2个字节,D15~D0双字DWord:32位,4个字节,D31~D0最低有效位LSB:数据的最低位,D0位最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位图示存储单元及其存储内容每个存储单元都有一个编号;被称为存储器地址每个存储单元存放一个字节的内容图示0002H单元存放有一个数据34H表达为 [0002H]=34H多字节数据存放方式多字节数据在存储器中占连续的多个存储单元:存放时,低字节存入低地址,高字节存入高地址;表达时,用它的低地址表示多字节数据占据的地址空间。图2-5中0002H“字”单元的内容为:[0002H]=1234H0002H号“双字”单元的内容为:[0002H]=78561234H80x86处理器采用“低对低、高对高”的存储形式,被称为“小端方式LittleEndian”。相对应还存在“大端方式BigEndian”。图示数据的地址对齐同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等字单元安排在偶地址(xxx0B)、双字单元安排在模4地址(xx00B)等,为“地址对齐(Align)”(N字节数据安排的起始地址能够被N整除)对于不对齐地址的数据,处理器访问时,需要额外的访问存储器时间应该将数据的地址对齐,以取得较高的存取速度2.存储器的分段管理8088CPU有20条地址线最大可寻址空间为220=1MB物理地址范围从00000H~FFFFFH8088CPU将1MB空间分成许多逻辑段(Segment)每个段最大限制为64KB段地址的低4位为0000B这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址物理地址和逻辑地址8088CPU存储系统中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH分段后在用户编程时,采用逻辑地址,形式为段基地址
:
段内偏移地址分隔符物理地址14700H逻辑地址1460H:100H逻辑地址段地址说明逻辑段在主存中的起始位置8088规定段地址必须是模16地址:xxxx0H省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址偏移地址说明主存单元距离段起始位置的偏移量每段不超过64KB,偏移地址也可用16位数据表示物理地址和逻辑地址的转换将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址一个物理地址可以有多个逻辑地址逻辑地址 1460:100、1380:F00物理地址 14700H14700H14600H+100H14700H13800H+F00H14700H段地址左移4位加上偏移地址得到物理地址3.段寄存器8088有4个16位段寄存器CS指明代码段的起始地址SS指明堆栈段的起始地址DS指明数据段的起始地址ES指明附加段的起始地址每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途代码段寄存器CS(CodeSegment)代码段用来存放程序的指令序列代码段寄存器CS存放代码段的段地址指令指针寄存器IP指示下条指令的偏移地址处理器利用CS:IP取得下一条要执行的指令堆栈段寄存器SS(StackSegment)堆栈段确定堆栈所在的主存区域堆栈段寄存器SS存放堆栈段的段地址堆栈指针寄存器SP指示堆栈栈顶的偏移地址处理器利用SS:SP操作堆栈顶的数据数据段寄存器DS(DataSegment)数据段存放运行程序所用的数据数据段寄存器DS存放数据段的段地址各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址处理器利用DS:EA存取数据段中的数据附加段寄存器ES(ExtraSegment)附加段是附加的数据段,也保存数据:附加段寄存器ES存放附加段的段地址各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址处理器利用ES:EA存取附加段中的数据串操作指令将附加段作为其目的操作数的存放区域如何分配各个逻辑段程序的指令序列必须安排在代码段程序使用的堆栈一定在堆栈段程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段数据的存放比较灵活,实际上可以存放在任何一种逻辑段中段超越前缀指令没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段默认的情况允许改变,需要使用段超越前缀指令;8088指令系统中有4个:CS: ;代码段超越,使用代码段的数据SS: ;堆栈段超越,使用堆栈段的数据DS: ;数据段超越,使用数据段的数据ES: ;附加段超越,使用附加段的数据示例段超越的示例没有段超越的指令实例:MOVAX,[2000H] ;AX←DS:[2000H];从默认的DS数据段取出数据采用段超越前缀的指令实例:MOVAX,ES:[2000H];AX←ES:[2000H];从指定的ES附加段取出数据总结段寄存器的使用规定访问存储器的方式默认可超越偏移地址取指令CS无IP堆栈操作SS无SP一般数据访问DSCSESSS有效地址EABP基址的寻址方式SSCSESDS有效地址EA串操作的源操作数DSCSESSSSI串操作的目的操作数ES无DI寄存器的总结8088有8个8位通用寄存器、8个16位通用寄存器8088有6个状态标志和3个控制标志8088将1MB存储空间分段管理,有4个段寄存器,对应4种逻辑段8088有4个段超越前缀指令,用于明确指定数据所在的逻辑段
熟悉上述内容后,就可以进入下节8088的内部结构1234内部暂存器
IP
ES
SSDSCS输入/输出控制电路总线执行部分控制电路∑ALU标志寄存器AHALBHBLCHCLDHDLSPBPSIDI通用寄存器地址加法器指令队列执行部件(EU)总线接口部件(BIU)16位20位8位8位8088的指令执行过程图2-58088的存储格式D7D0字节D15D0字D31D0双字D7D000006H78H00005H56H00004H12H00003H34H00002H00001H00000H低地址LSBMSB2.28088/8086的数据寻址方式从8088/8086的指令格式入手,论述:立即数寻址方式寄存器寻址方式存储器寻址方式进而熟悉8088/8086汇编语言指令格式,尤其是其中操作数的表达方法为展开8088/8086指令系统做好准备指令的助记符格式操作数2,常被称为源操作数src,它表示参与指令操作的一个对象操作数1,成被称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释
操作码
操作数1,操作数2
;注释汇编语句格式操作数的寻址方式指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做(操作数)寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式一方面,会影响处理器执行指令的速度和效率另一方面,对程序设计也很重要MOV指令2.2.1立即数寻址方式指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm可以是8位数值i8(00H~FFH)也可以是16位数值i16(0000H~FFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现演示MOVAX,0102H ;AX←0102H2.2.2寄存器寻址方式操作数存放在CPU的内部寄存器reg中:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数)演示MOVAX,BX ;AX←BX2.2.3存储器寻址方式操作数在主存储器中,用主存地址表示程序设计时,8088采用逻辑地址表示主存地址段地址在默认的或用段超越前缀指定的段寄存器中指令中只需给出操作数的偏移地址(有效地址EA)8086设计了多种存储器寻址方式1、直接寻址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式1.直接寻址方式直接寻址方式的有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变用中括号包含有效地址,表达存储单元的内容演示MOVAX,[2000H] ;AX←DS:[2000H]MOVAX,ES:[2000H] ;AX←ES:[2000H]2.寄存器间接寻址方式有效地址存放在基址寄存器BX或变址寄存器SI、DI中默认的段地址在DS段寄存器,可使用段超越前缀改变演示MOVAX,[BX] ;AX←DS:[BX]3.寄存器相对寻址方式有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址=BX/BP/SI/DI+8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变演示MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]4.基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变演示MOVAX,[BX+SI] ;AX←DS:[BX+SI]MOVAX,[BX][SI] ;AX←DS:[BX+SI]5.相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变演示MOVAX,[BX+DI+6] ;AX←DS:[BX+DI+6]MOVAX,6[BX+DI]MOVAX,6[BX][DI]存储器寻址方式中的变量变量指示内存中的数据,变量名具有地址属性。存储器寻找方式中经常采用变量形式变量的定义WVARDW1234H;定义16位变量WVAR,具有初值1234H;假设其偏移地址为10H单独引用变量名是直接寻址方式MOVAX,WVAR;指令功能:AX=1234H;等同于MOVAX,[0010H]相对寻址方式中,变量名表示其偏移地址,相当于位移量MOVAX,[DI+WVAR];=MOVAX,WVAR[DI];等同于MOVAX,[DI+0010H]相对寻址方式中的位移量在寄存器相对和相对基址变址寻址方式中,其位移量不仅可用常量表示,也可用符号表示这个符号可以是变量名,例如WVAR变量,而且支持多种表达形式MOVAX,[DI+WVAR];;等同于MOVAX,WVAR[DI]MOVAX,[BX+SI+WVAR]
;等同于MOVAX,[BX][SI+WVAR]
;等同于MOVAX,WVAR[BX+SI]
;等同于MOVAX,WVAR[BX][SI]操作数的表达符号寻址方式操作数符号及含义立即数寻址imm代表i8或i16,i8:一个8位立即数,i16:一个16位立即数寄存器寻址reg代表r8或r16,r8:8位通用寄存器,r16:16位通用寄存器seg段寄存器存储器寻址mem代表m8或m16
,m8:8位存储器操作数,m16:16位存储器操作数
掌握操作数的寻址方式后,进入指令学习汇编语言的两种语句格式⑴执行性语句——执行性语句用于表达处理器指令(也称为硬指令),汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体标号:
硬指令助记符操作数,操作数 ;注释⑵说明性语句——说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等名字
伪指令助记符参数,参数,…;注释MOV指令的功能立即数寻址方式寄存器寻址方式直接寻址方式间接寻址方式相对寻址方式基址变址寻址方式相对基址变址寻址方式2.3数据传送类指令数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA2.3.1通用数据传送指令提供方便灵活的通用传送操作有3条指令MOVXCHGXLATMOVXCHGXLAT1.传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示MOV指令--立即数传送movcl,4 ;cl←4,字节传送movdx,0ffh
;dx←00ffh,字传送movsi,200h
;si←0200h,字传送movbvar,0ah
;字节传送;假设bvar是一个字节变量,定义如下:bvar
db0movwvar,0bh
;字传送;假设wvar是一个字变量,定义如下:wvar
dw0明确指令是字节操作还是字操作以字母开头的常数要有前导0MOV指令--寄存器传送mov
ah,al
;ah←al,字节传送mov
bvar,ch
;bvar←ch
,字节传送mov
ax,bx
;ax←bx,字传送mov
ds,ax
;ds←ax,字传送mov[bx],al
;[bx]←al,字节传送
寄存器具有明确的字节和字类型MOV指令--存储器传送mov
al,[bx] ;al←ds:[bx]mov
dx,[bp] ;dx←ss:[bp+0]movdx,[bp+4] ;dx←ss:[bp+4]mov
es,[si] ;es←ds:[si]
不存在存储器向存储器的传送指令MOV指令--段寄存器传送mov[si],dsmov
ax,ds
;ax←dsmov
es,ax
;es←ax←ds
对段寄存器的操作不灵活MOV指令传送功能图解MOV指令也并非任意传送!立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器非法指令的主要现象:两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器段寄存器的操作有一些限制非法指令--两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令
MOVAL,050AH ;非法指令,修正: ;movax,050ah MOVSI,DL ;非法指令,修正: ;movdh,0
;mov
si,dx非法指令--无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明
MOV[BX+SI],255 ;非法指令,修正: ;mov
byteptr[bx+si],255
;byteptr
说明是字节操作
;mov
wordptr[bx+si],255
;wordptr
说明是字操作非法指令--两个操作数都是存储器8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)
MOVbuf2,buf1 ;非法指令,修正:
;假设buf2和buf1是两个字变量
;movax,buf1
;movbuf2,ax
;假设buf2和buf1是两个字节变量
;moval,buf1
;movbuf2,al非法指令--段寄存器的操作有一些限制8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活
MOVDS,ES ;非法指令,修正: ;mov
ax,es
;mov
ds,ax MOVDS,100H ;非法指令,修正: ;movax,100h
;mov
ds,ax
MOVCS,[SI] ;非法指令 ;指令存在,但不能执行2.交换指令XCHG(exchange)把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHGreg,reg/mem;reg
reg/mem演示例2.2数据交换movax,1199h ;ax=1199hxchg
ah,al
;ax=9911h;等同于xchg
al,ahmovwvar,5566h ;wvar是一个字量变量xchg
ax,wvar
;ax=5566h,wvar=9911h;等同于xchg
wvar,ax
xchg
al,byte
ptrwvar+1
;ax=5599h,wvar=6611h
;“byteptrwvar+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配3.换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码XLAT
;al←ds:[bx+al]演示2.3.2堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP图示进栈指令PUSH进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部PUSHr16/m16/seg
;SP←SP-2
;SS:[SP]←r16/m16/seg演示pushaxpush[2000h]出栈指令POP出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2POPr16/m16/seg
;r16/m16/seg←SS:[SP]
;SP←SP+2popaxpopwvar演示堆栈操作的特点堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈段是程序中不可或缺的一个内存区,常用来临时存放数据传递参数保存和恢复寄存器2.3.3标志操作指令1.标志位操作指令CLC
;复位进位标志:CF←0STC
;置位进位标志:CF←1CMC
;求反进位标志:CF←~CFCLD
;复位方向标志:DF←0STD
;置位方向标志:DF←1CLI
;复位中断标志:IF←0STI
;置位中断标志:IF←12.标志寄存器低字节与AH的传送指令3.标志寄存器出入堆栈指令将存储器操作数的有效地址送至指定的16位通用寄存器有效地址传送指令LEA(loadeffectiveaddress)LEAr16,mem;r16←mem的有效地址EA例题2.5
有效地址的获取
movbx,400h
movsi,3ch leabx,[bx+si+0f62h]
;BX←400H+3CH+0F62H=139EH例2.6地址传送与内容传送wvar
dw4142h ;假设偏移地址为04H…mov
ax,wvar
;内容传送:AX=4142Hleasi,wvar
;地址传送:SI=0004H;等同于leasi,[0004h]mov
cx,[si] ;内容传送:CX=4142Hmov
di,offset
wvar
;=movdi,0004h
;利用操作符OFFSET获取变量的有效地址mov
dx,[di] ;内容传送:DX=4142H调试程序DEBUGDEBUG是常用的汇编语言级调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段常用命令:-A汇编 -U反汇编-T单步执行 -G断点执行-D数据显示 -R寄存器启动方法DOS下执行DEBUG.EXE程序Windows9x中进入MS-DOS环境执行DEBUG.EXE程序Windows2000/XP/NT下运行COMMAND命令(不是CMD命令,也不要从“命令提示符”)进入MS-DOS环境执行DEBUG.EXE程序MOV指令的功能XCHG指令的功能XLAT指令的功能堆栈的图示SSSP0000H(栈顶)存储器高地址堆栈段PUSH指令的功能POP指令的功能2.4算术运算类指令算术运算类指令用来执行二进制的算术运算:加减乘除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志重点掌握加法指令:ADD、ADC、INC减法指令:SUB、SBB、DEC、CMP、NEG2.4.1加法和减法指令加法指令:ADD,ADC和INC减法指令:SUB,SBB,DEC,NEG和CMP他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位操作数组合:运算指令助记符reg,imm/reg/mem运算指令助记符mem,imm/reg1.加和减指令
ADD
dest,src
;加法:dest←dest+src
;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数
SUB
dest,src
;减法:dest←dest-src
;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数例题2.7加法movax,7348h ;AX=7348Haddal,27h
;AL=48H+27H=6FH,AX=736FH
;OF=0,SF=0,ZF=0,PF=1,CF=0addax,3fffh
;AX=736FH+3FFFH=B36EH
;OF=1,SF=1,ZF=0,PF=0,CF=0例题2.7减法subah,0f0h
;AH=B3H-F0H=C3H,AX=C36EH
;OF=0,SF=1,ZF=0,PF=1,CF=1movwordptr[200h],0ef00h
;[200H]=EF00H,标志不变sub[200h],ax
;[200H]=EF00H-C36EH=2B92H
;OF=0,SF=0,ZF=0,PF=0,CF=0sub
si,si
;SI=0
;OF=0,SF=0,ZF=1,PF=1,CF=02.带进位加和减指令ADC
dest,src
;加法:dest←dest+src+CF
;ADC指令除完成ADD加法运算外,还要加上进位CF,结果送到目的操作数SBB
dest,src
;减法:dest←dest-src-CF
;SBB指令除完成SUB减法运算外,还要减去借位CF,结果送到目的操作数例2.8无符号双字加法和减法movax,7856h ;AX=7856Hmovdx,8234h ;DX=8234Haddax,8998h ;AX=01EEH,CF=1adcdx,1234h ;DX=9469H,CF=0subax,4491h ;AX=BD5DH,CF=1sbbdx,8000h ;DX=1468H,CF=0DX.AX=82347856H+12348998H-80004491H=1468BD5DH3.比较指令CMP(compare)CMP
dest,src
;做减法运算:dest-src
;CMP指令将目的操作数减去源操作数,但差值不回送目的操作数比较指令通过减法运算影响状态标志,用于比较两个操作数的大小关系cmp
ax,bxcmpal,1004.增量和减量指令INCreg/mem
;增量(加1):reg/mem←reg/mem+1DECreg/mem
;减量(减1):reg/mem←reg/mem-1INC指令和DEC指令是单操作数指令与加法和减法指令实现的加1和减1不同的是:INC和DEC不影响CF标志incsi
;si←si+1decbyteptr[si] ;[si]←[si]-15.求补指令NEG(negtive)NEGreg/mem
;reg/mem←0-reg/memNEG指令对操作数执行求补运算,即用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG指令也是一个单操作数指令2.4.2符号扩展指令符号扩展是指用一个操作数的符号位(最高位)形成另一个操作数,后一个操作数的高位是全0(正数)或全1(负数)符号扩展虽然使数据位数加长,但数据大小并没有改变,扩展的高部分仅是低部分的符号扩展符号扩展指令有两条,用来将字节转换为字,字转换为双字
CBW
;AL符号扩展成AX
CWD
;AX符号扩展成DX例题2.10符号扩展moval,64h
;AL=64H(机器数)
,表示10进制数100(真值)cbw
;将符号0扩展,AX=0064H,仍然表示100movax,0ff00h
;AX=FF00H,表示有符号10进制数-256cwd
;将符号位“1”扩展,DX.AX=FFFFFF00H
;仍然表示-2562.4.3乘法和除法指令乘法指令分无符号和有符号乘法指令MULreg/mem
;无符号乘法IMULreg/mem
;有符号乘法除法指令分无符号和有符号除法指令DIVreg/mem
;无符号除法IDIVreg/mem
;有符号除法乘法指令
乘法运算是双操作数运算,但是,在指令中却只指定一个操作数,另一个操作数是隐含规定的。
根据乘法运算的隐含规则,其中的操作数可以是寄存器操作数或存储器操作数(不能是立即数),而隐含的为AL或AX。
两个8位数相乘,其结果是16位数;两个16位数相乘,其结果是32位数。操作数位数决定了是8位还是16位乘法。乘法指令乘法指令 MULCX ;(DX:AX)=(AX)*(CX),为字操作 IMULCL ;(AX)=(AL)*(CL),为字节操作
下列指令是非法的。 MULAL,BL
;DST(被乘数)应为隐含寻址 IMUL05H ;
SRC(乘数)不能为立即数寻址乘法指令例:字节×字运算:计算两个有符号数15H、FB78H的乘积。解:实际上,有符号数FB78H为负数。程序段为:
MOV AL,15H CBW
;将AL的内容扩展为16位有符号数 MOV BX,0FB78H IMUL BX (DX,AX)=(AX)×(BX)除法指令除法指令(DIV,IDIV)
除法运算也是双操作数运算,它的隐含规则操作数与乘法指令相同。
在除法运算中,如果除数8位的,则要求被除数是16位的;如果除数是16位的,则要求被除数是32位的。除法指令除法指令规则除法指令DIVSRC ;无符号数的除法IDIVSRC ;有符号数的除法
除法不允许出现除数为0或商溢出,若发生除数为0或商溢出则其结果没有意义,并引起中断。
DIVBL ;AX÷BLIDIVCX ;DA,AX÷CXDIVWORDPTR[BX][SI];
DX,AX÷[BX+SI]单元的字除法指令例:有符号数字节÷字节的除法运算。设要完成除法运算—16÷53。(数据存放在字节单元中)解:应该先将字节变为字,再进行除法运算。 DA1 DB —16 DA2 DB 53 …… MOV AL,DA1 CBW ;将AL中的有符号数变为16位数 MOV BL,DA2 IDIV BL2.4.4十进制调整指令十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果,以此实现十进制BCD码运算8088指令系统支持两种BCD码调整运算压缩BCD码就是通常的8421码;它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即00~99非压缩BCD码用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位0~9,高4位任意,通常默认为0编码的比较真值(十进制) 8 64二进制编码 08H 40H压缩BCD码 08H 64H非压缩BCD码 08H 0604HASCII码 38H 3634H压缩BCD码加减法调整指令DAADAS非压缩BCD码加减乘除法调整指令AAAAASAAMAAD十进制调整指令 实现BCD十进制调整的指令有六个,它们一般紧跟在相应运算指令之后。1)加法的十进制调整(AAA,DAA)AAA ;加法分离BCD码调整DAA ;加法组合BCD码调整 AAA指令为分离BCD码加法运算后的调整指令,表示对相加结果AL的低4位进行加6修正。 DAA指令为组合BCD码加法运算后的调整指令,表示对相加结果AL的低4位和高4位分别进行加6修正。十进制调整指令例:计算4+8,采用分离BCD码解: MOVAL,4 MOVBL,8 ADDAL,BL AAA结果:AL=02H,CF=1例:计算34+28,采用组合BCD码解: MOVAL,34H MOVBL,28H ADDAL,BL DAA结果:AL=62H,CF=0十进制调整指令例:多字节组合十进制加法:将1000H开始的8字节十进制十进制数与2000H开始的8字节数相加,结果放到2000H开始单元。
MOV SI,1000H ;SI指向第一个数据
MOV DI,2000H ;DI指向第二个数据
MOV CX,8 ;字节长度
CLC ;清除进位标志LOOP1: MOV AL,[SI] ;取第一个字节
ADC AL,[DI] ;加上第二个字节
DAA ;十进制调整
MOV [DI],AL ;存放结果
INC SI INC DI ;修改指针
DEC CX ;计数
JNZ LOOP1 ……十进制调整指令2)减法的十进制调整(AAS、DAS)AAS;减法分离BCD码调整DAS;减法组合BCD码调整 AAS指令为分离BCD码减法运算后的调整指令,表示对相减结果AL的低4位进行减6修正。 DAS指令为组合BCD码减法运算后的调整指令,表示对相减结果AL的低4位和高4位分别进行减6修正。十进制调整指令例:计算5-9,采用分离BCD码解: MOVAL,05H MOVBL,09H SUBAL,BL AAS结果:AL=04H,CF=1例:计算31-87,采用组合BCD码。解: MOVAL,31H MOVBL,87H SUBAL,BL DAS结果:AL=56H,CF=1十进制调整指令3)乘法的十进制调整(AAM)AAM;乘法分离BCD码调整 AAM为分离BCD码乘法的调整指令,两个分离BCD码相乘之后,需用AAM调整。例:计算7×8解: MOV AL,7 MOV BL,8 MUL BL AAM结果:AX=0506H十进制调整指令4)除法的十进制调整(AAD)AAD ;除法分离BCD码调整 AAD为分离BCD码除法的调整指令,两个分离BCD码除法指令之前应采用AAD进行调整。例:计算27÷4。解: MOVAX,0207H MOVBL,4 AAD ;(AX)←001BH DIVBL结果:AL=06H,AH=03H2.5位操作类指令位操作类指令以二进制位为基本单位进行数据的操作当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令注意这些指令对标志位的影响1.逻辑运算指令ANDORXORNOTTEST2.移位指令SHLSHRSAR3.循环移位指令ROLRORRCLRCR2.5.1逻辑运算指令双操作数逻辑指令AND、OR、XOR和TEST设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义;它们的操作数组合与ADD、SUB等一样:运算指令助记符reg,imm/reg/mem运算指令助记符mem,imm/reg
单操作数逻辑指令NOT不影响标志位,操作数与INC、DEC和NEG一样:NOTreg/mem逻辑与指令AND对两个操作数执行逻辑与运算,结果送目的操作数ANDdest,src
;dest←dest∧src
只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0逻辑或指令OR对两个操作数执行逻辑或运算,结果送目的操作数ORdest,src
;dest←dest∨src只要相“或”的两位有一位是1,结果就是1;否则,结果为0逻辑异或指令XOR对两个操作数执行逻辑异或运算,结果送目的操作数XORdest,src
;dest←dest⊕src只有相“异或”的两位不相同,结果才是1;否则,结果为0测试指令TEST对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按AND指令影响标志用TEST指令来检测指定位是1还是0。 TEST AL,08H ;测试AL的D3是0还是1。如果ZF=1,说明D3位为0。TESTdest,src
;dest∧src
AND与TEST指令的关系,同SUB与CMP指令的关系一样逻辑非指令NOT对一个操作数执行逻辑非运算NOTreg/mem
;reg/mem←~reg/mem
按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”例2.13逻辑运算moval,75h ;AL=75Handal,32h ;AL=30H
;CF=OF=0,SF=0,ZF=0,PF=1oral,71h ;AL=71H
;CF=OF=0,SF=0,ZF=0,PF=1xoral,0f1h ;AL=80H
;CF=OF=0,SF=1,ZF=0,PF=0notal ;AL=7FH,标志不变例2.14逻辑运算指令的应用andbl,11110110b
;BL中D0和D3清0,其余位不变orbl,00001001b
;BL中D0和D3置1,其余位不变xorbl,00001001b
;BL中D0和D3求反,其余位不变
AND指令可用于某些位置0(同0相与),不影响其他位
OR指令可用于某些位置1(同1相或),不影响其他位
XOR指令可用于某些位取反(同1相异或),不影响其他位TEST指令可用于测试某些位为0或为12.5.2移位指令将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元;后一个操作数表示移位位数:该操作数为1,表示移动一位该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能CL表示)按照移入的位设置进位标志CF,根据移位后的结果影响SF、ZF、PF逻辑左移指令SHLSHLreg/mem,1/CL
;reg/mem左移1或CL位 ;最低位补0,最高位进入CF演示逻辑右移指令SHRSHRreg/mem,1/CL
;reg/mem右移1/CL位 ;最高位补0,最低位进入CF演示算术左移指令SALSALreg/mem,1/CL
;与SHL是同一条指令演示算术右移指令SARSARreg/mem,1/CL
;reg/mem右移1/CL位 ;最高位不变,最低位进入CF演示例2.15数据移位movdx,6075h
;DX=0110000001110101Bshldx,1
;DX=1100000011101010B
;CF=0,SF=1、ZF=0、PF=0sardx,1
;DX=1110000001110101B
;CF=0,SF=1、ZF=0、PF=0shrdx,1
;DX=0111000000111010B ;CF=1,SF=0、ZF=0、PF=1movcl,4
;CL=4,标志不变sar
dx,cl
;DX=0000011100000011B
;CF=1,SF=0、ZF=0、PF=1例2.16将AL寄存器中的无符号数乘以10xor
ah,ah
;实现AH=0,同时使CF=0shlax,1
;AX←2×ALmov
bx,ax
;BX←AX=2×ALshlax,1
;AX←4×ALshlax,1
;AX←8×ALaddax,bx
;AX←8×AL+2×AL=10×ALsubah,ahandah,0
逻辑左移一位相当于无符号数乘以2
逻辑右移一位相当于无符号数除以22.5.3循环移位指令循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为:ROLreg/mem,1/CL
;不带进位循环左移RORreg/mem,1/CL
;不带进位循环右移RCLreg/mem,1/CL ;带进位循环左移RCRreg/mem,1/CL ;带进位循环右移循环移位指令的操作数形式与移位指令相同,按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志演示演示演示演示32位数据移位;将DX.AX中32位数值左移一位shlax,1rcldx,1DXAXCF0考虑32位数据的右移等操作例2.18非压缩BCD码合并为压缩BCD;DBCD有2位非压缩BCD码mov
dl,dbcd
;取低字节anddl,0fh
;只要低4位movdh,dbcd+1
;取高字节movcl,4shl
dh,cl
;低4位移到高4位ordl,dh
;合并到DLrol
dh,clrcr
dh,clNo!SHL和SAL指令的功能SHR指令的功能SAR指令的功能ROL指令的功能ROR指令的功能RCL指令的功能RCR指令的功能2.6控制转移类指令控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令重点掌握:
JMP/Jcc/LOOP/JCXZ
CALL/RET
INT
n/IRET
常用系统功能调用
控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变目标地址的寻址方式相对寻址方式指令代码中提供目的地址相对于当前IP的位移量,转移到的目的地址(转移后的IP值)就是当前IP值加上位移量直接寻址方式指令代码中提供目的逻辑地址,转移后的CS和IP值直接来自指令操作码后的目的地址操作数间接寻址方式指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中间接获得用标号表达用标号表达用寄存器或存储器操作数表达目标地址的寻址范围:段内寻址段内转移——近转移(near)在当前代码段64KB范围内转移(±32KB范围)不需要更改CS段地址,只要改变IP偏移地址段内转移——短转移(short)转移范围可以用一个字节表达,在段内-128~+127范围的转移代码段代码段目标地址的寻址范围:段间寻址段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址代码段代码段
实际编程时,汇编程序会根据目标地址的属性,自动处理成短转移、近转移或远转移程序员可用操作符short、nearptr
或farptr
强制成为需要的转移类型2.6.1无条件转移指令只要执行无条件转移指令JMP,就使程序转到指定的目标地址,从目标地址处开始执行指令操作数label是要转移到的目标地址(目的地址、转移地址)JMP指令分成4种类型:⑴段内转移、相对寻址⑵段内转移、间接寻址⑶段间转移、直接寻址⑷段间转移、间接寻址JMPlabel
;程序转向label标号指定的地址无条件转移指令JMP(jump)JMPlabel ;段内转移、相对寻址
;IP←IP+位移量
JMPr16/m16 ;段内转移、间接寻址
;IP←r16/m16
JMPfarptrlabel ;段间转移、直接寻址
;IP←偏移地址,CS←段地址
JMPfarptr
mem
;段间转移,间接寻址
;IP←[mem],CS←[mem+2]演示演示演示演示演示2.6.2条件转移指令条件转移指令Jcc根据指定的条件确定程序是否发生转移。其通用格式为:
Jcclabel ;条件满足,发生转移 ;IP←IP+8位位移量;
;否则,顺序执行label是一个标号、一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移label只支持短转移的相对寻址方式Jcc指令的分类Jcc指令不影响标志,但要利用标志(表2-3)根据利用的标志位不同,分成三种情况:⑴判断单个标志位状态⑵比较无符号数高低⑶比较有符号数大小
Jcc指令实际虽然只有16条,但却有30个助记符采用多个助记符,目的是为了方便记忆和使用1.判断单个标志位状态⑴
JZ/JE和JNZ/JNE
利用零标志ZF,判断结果是否为零(或相等)⑵JS和JNS
利用符号标志SF,判断结果是正是负⑶JO和JNO
利用溢出标志OF,判断结果是否产生溢出⑷JP/JPE和JNP/JPO
利用奇偶标志PF,判断结果中“1”的个数是偶是奇⑸JC/JB/JNAE和JNC/JNB/JAE
利用进位标志CF,判断结果是否进位或借位例题2.19题目:将AX中存放的无符号数除以2,如果是奇数则加1后除以2问题:如何判断AX中的数据是奇数还是偶数?解答:判断AX最低位是“0”(偶数),还是“1”(奇数)。可以用位操作类指令1:用逻辑与指令将除最低位外的其他位变成0,保留最低位不变。判断这个数据是0,AX就是偶数;否则,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数;否则,为奇数3:将最低位用移位指令移至最高位(符号位),判断符号标志是0,AX就是偶数;否则,为奇数例题2.19解答1用JZ指令实现 testax,01h;测试AX的最低位D0(不用AND指令,以免改变AX)
jz
even;标志ZF=1,即D0=0:AX内是偶数,程序转移
addax,1;标志ZF=0,即D0=1:AX内的奇数,加1even:
shrax,1
;AX←AX÷2用右移一位的方法实现除以2。本例中用RCR指令比SHR指令更好。例题2.19解答2用JNC指令实现
mov
bx,ax
shrbx,1;将AX的最低位D0移进CF
jnc
even;标志CF=0,即D0=0:AX内是偶数,程序转移
addax,1;标志CF=1,即D0=1:AX内的奇数,加1even:
shrax,1
;AX←AX÷2还可用SAR、ROR和RCR指令例题2.19解答3用JNS指令实现
mov
bx,ax
rorbx,1;将AX的最低位D0移进最高位(符号位SF)
jns
even;标志SF=0,即D0=0:AX内是偶数,程序转移
addax,1;标志SF=1,即D0=1:AX内的奇数,加1even:
shrax,1
;AX←AX÷2错误!循环指令不影响SF等标志ADDBX,0
;增加一条指令例2.20判断是否为字母Y;寄存器AL中是字母Y(含大小写),则令AH=0,否则令AH=-1
cmp
al,’y’ ;比较AL与小写字母y
jenext
;相等,转移
cmp
al,’Y’ ;不相等, ;继续比较AL与大写字母Y
jenext
;相等,转移
movah,-1
;不相等,令AH=-1
jmpdone
;无条件转移指令next: movah,0
;相等的处理:令AH=0done: ……例2.21偶校验;对DL寄存器中8位数据进行偶校验;校验位存入CF标志
testdl,0ffh
;使CF=0,同时设置PF标志
jpe
done
;DL中“1”的个数为偶数
;正好CF=0,转向done
stc
;DL中“1”的个数为奇数,设置CF=1done:
;完成2.比较数值大小:无符号数的高低无符号数的大小用高(Above)、低(Below)表示,需要利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系,对应4条指令JB(JNAE):目的操作数低于(不高于等于)源操作数JNB(JAE):目的操作数不低于(高于等于)源操作数JBE(JNA):目的操作数低于等于(不高于)源操作数JNBE(JA):目的操作数不低于等于(高于)源操作数2.比较数值大小:有符号数的大小判断有符号数的大(Greater)、小(Less),需要组合OF、SF标志、并利用ZF标志确定相等与否两数的大小分成4种关系,分别对应4条指令JL(JNGE):目的操作数小于(不大于等于)源操作数JNL(JGE):目的操作数不小于(大于等于)源操作数JLE(JNG):目的操作数小于等于(不大于)源操作数JNLE(JG):目的操作数不小于等于(大于)源操作数例2.22求较大值
cmp
ax,bx
;比较AX和BX
jaenext ;若AX≥BX,转移
xchg
ax,bx
;若AX<BX,交换next: mov
wmax,ax如果AX和BX存放的是有符号数,则条件转移指令应采用JGE指令例2.22求较大值(另解)
cmp
ax,bx
;比较AX和BX
jae
next
mov
wmax,bx
;若AX<BX,wmax←BX
jmp
donenext: mov
wmax,ax
;若AX≥BX,wmax
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年园林景观工程施工监理合同范本3篇
- 2024年度高端养生浴池租赁合作协议3篇
- 2024年标准协议免责条款模板版B版
- 2024年度文化旅游资源招商引资居间合同3篇
- 2024年度知识产权交易与评估合同范本3篇
- 2024年度校企合作人才培养与科研项目合作合同范本3篇
- 贵州省前期物业服务合同2025
- 定制代加工合同范例
- 火烧店加盟合同范例
- 网店运营兼职合同范例
- 春节期间施工现场安全方案
- 进料检验作业指导书
- 医院关于成立安全生产领导小组的通知
- 【施工方案】空调百叶施工方案
- 先张法U型梁施工与管理
- 国家开放大学电大《可编程控制器应用》形考任务(课程实验)答案
- 基坑开挖-降水
- 施工队结算单
- 死因调查记录示例
- 中南大学电气工程基础课程设计
- 毕业设计论文千斤顶液压缸加工专用机床电气控制系统设计
评论
0/150
提交评论