您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 第2章 汇编指令简介
1第二章汇编指令简介8086汇编指令形式2常用的传送类指令38086编程结构12.18086CPU的编程结构23已知当前CS=1000HIP=100HDS=1492H要执行以下指令:MOVAX,100;B86400HADDAX,256;050001HMOV[2000H],AX;A30020H请看指令在CPU中的执行过程。4第三章指令系统5主要内容:指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:操作码的含义指令对操作数的要求指令执行的结果2.2汇编指令的形式68088/8086指令系统:(1)指令向后兼容(x86系列)(2)应用广泛,资料易于寻找指令——控制计算机完成指定操作的命令机器指令——指令的二进制代码形式。例如:CD21H汇编指令——助记符形式的指令。例如:INT21H指令系统——CPU所有指令及其使用规则的集合7指令按功能分为六大类(92种)(1)数据传送类;(2)算术运算类;(3)逻辑运算和移位;(4)串操作;(5)控制转移类;(6)处理器控制。82.2.1指令的基本构成说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源指令所在的地址对指令的说明标号:操作码[操作数],[操作数];注释9ADDAX,[SI+6];双操作数INC[BX];单操作数HLT;无操作数指令举例:ABC:MOVAX,BX;BXAX标号操作码操作数注释10部分8086常用指令指令类型助记符数据传送数据传送MOV,PUSH/POP,XCHG等地址传送LEA,LDS,LES输入输出IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET118088/8086的操作数分为3类:1、立即数(常数)取值范围如下表:8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128-127)8000H-7FFFH(-32768-32767)立即数只能用作源操作数MOVAX,0FA00H;正确MOV8000H,DX;错误122、寄存器操作数放在8个通用寄存器或4个段寄存器中的操作数注意:在32位机中,以上4个寄存器寄存器数量增加可扩展为32位,标记为EAX、EBX、ECX、EDX,还增加了相应的一些寄存器,所以汇编指令也相应扩充,注意要不断学习新增指令。AX16位AHALBX16位BHBLCX16位CHCLDX16位DHDL13只能存放字操作数段寄存器存放当前操作数的段基地址•没有将立即数直接传送到段寄存器的指令SIDIBPSPCSDSESSS143、存储器操作数存储器操作数字节字双字124类型存储单元个数*一般不允许两个操作数同时为存储器操作数同时要注意寄存器和存储器的区别一个在CPU内部,一个在外部需要寻址。存储单元的物理地址=段基地址+偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。15存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。例如,若(BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的:MOVAL,[2A00H]MOVAL,[BX+0A00H]MOVAL,[BX][SI]MOVAL,[DI]162.1.2指令的执行时间一条指令的执行时间=∑取指令取操作数执行指令传送结果单位用时钟周期数表示结论:1)尽量使用寄存器作为操作数2)若有可能,用移位代替乘除法3)尽量使用简单的寻址方式172.28086的寻址方式寻址方式——寻找操作数的方法寻找操作数的地址(一般指源操作数)寻找要执行的下一条指令的地址在8086指令系统中,说明操作数所在地址的寻址方式可分为8种:①立即数寻址⑤寄存器相对寻址②直接寻址⑥基址-变址寻址③寄存器寻址⑦相对的基址-变址寻址④寄存器间接寻址⑧隐含寻址18操作数(为一常数)直接由指令给出(此操作数称为立即数)立即寻址只能用于源操作数。例:MOVAX,1C8FHMOVBYTEPTR[2A00H],8FH错误例:×MOV2A00H,AX;错误!2.1.2立即数寻址它的特点,操作数就直接包含在指令里面。192.2.2直接寻址指令中直接给出操作数的16位偏移地址偏移地址也称为有效地址(EA,EffectiveAddress)默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀偏移地址也可用符号地址来表示,如ADDR、VAR例:MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVSI,TABLE_PTR202.2.3寄存器寻址操作数放在某个寄存器中源操作数与目的操作数字长要相同寄存器寻址与段地址无关例:MOVAX,BXMOV[3F00H],AXMOVCL,AL错误例:×MOVAX,BL;字长不同×MOVES:AX,DX;寄存器与段无关212.2.4寄存器间接寻址操作数的偏移地址(有效地址EA)放在寄存器中只有SI、DI、BX和BP可作间址寄存器EA=(BX)(BP)(SI)(DI)例:MOVAX,[BX]MOVCL,CS:[DI]错误例:×MOVAX,[DX]×MOVCL,[AX]222.2.5寄存器相对寻址EA=间址寄存器的内容加上一个8/16位的位移量寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之)EA=(BX)(BP)(SI)(DI)+8位16位位移量只要是相对,就一定还要与一个位移量相加232.2.6基址+变址寻址若操作数的偏移地址:由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址+变址寻址EA=(BX)(BP)+(SI)(DI)同一组内的寄存器不能同时出现。例:MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]错误例:×MOVAX,[BX][BP]×MOVAX,[DI][SI]242.2.7相对的基址+变址寻址在基址-变址寻址的基础上再加上一个相对位移量注意事项同基址+变址寻址EA=(BX)(BP)+(SI)(DI)+8位16位位移量例:MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASE252.2.8隐含寻址指令操作数是隐含的,在指令中未显式地指明。例:MULBL指令隐含了被乘数AL及乘积AX类似的指令还有:DIV、CBW、MOVS等(AL)×(BL)→AX26小结:指令由(操作码)和(操作数)构成如何取得操作数——称(寻址方式)寻址方式可分为立即寻址直接寻址寄存器相对寻址寄存器寻址基址+变址寻址基址+变址相对寻址寄存器间接寻址272.3.1数据传送指令可实现存储器寄存器I/O数据传送指令又可分为如下四种:通用传送目标地址传送标志传送输入输出281.通用传送指令(1)MOVdest,src;dest←src传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。具体来说可实现:①MOVmem/reg1,mem/reg2指令中两操作数中至少有一个为寄存器例:MOVCL,DLMOVAX,BXMOV[SI],CXMOVCL,[BX+5]29②MOVreg,data;立即数送寄存器③MOVmem,data;立即数送存储单元④MOVacc,mem;存储单元送累加器⑤MOVmem,acc;累加器送存储单元⑥MOVsegreg,mem/reg;存储单元/寄存器送段寄存器⑦MOVmem/reg,segreg;段寄存器送存储单元/寄存器30MOV指令使用规则:1)IP不能作目的寄存器2)不允许mem←mem3)不允许segreg←segreg4)立即数不允许作为目的操作数5)不允许segreg←立即数6)源操作数与目的操作数类型要一致31应用举例:将1000H开始的100个存储单元全部填充为ASCII码2AH(*)。程序段如下:MOVDI,1000HMOVCX,64HMOVAL,2AHAGAIN:MOV[DI],ALINCDIDECCXJNZAGAINHLT322.输入输出(I/O)指令只限于用累加器AL或AX来传送信息。功能:(累加器)←→I/O端口(1)输入指令IN格式:INacc,PORT;PORT端口号0~255INacc,DX;DX表示的端口范围达64K例:INAL,80H;(AL)←(80H端口)INAL,DX;(AL)←((DX))33(2)输出指令OUT格式:OUTport,accOUTDX,acc例:OUT68H,AX;(69H,68H)←(AX)OUTDX,AL;((DX))←(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如:MOVDX,220HINAL,DX;将220H端口内容读入AL当端口号大于255时,一定要用DX作间接寻址。34
本文标题:第2章 汇编指令简介
链接地址:https://www.777doc.com/doc-3997267 .html