




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计1.1 8086微处理器的寻址方式 为了找到操作数所存放的位置的操作成为寻址方式。8086汇编语言共有四种寻址方式。8086CPU内部寄存器可用助记符表示如下:8位寄存器名称;AL,AH,BL,BH,CL,CH,DL,DH.16位寄存器名称;AX, BX, CX,DX, SI, DI,SP,BP.段寄存器名称:CS,DS,ES,SS。 3. 2.1 立即数寻址立即数寻址方式指令中包含有操作数,此类指令一般用于对CPU中的寄存器赋值。例如: MOV AL,8 ;将8位数据送到寄存器AL中 MOV AX,16H ;将16位的数据0016H送到寄存器AX中,因为AX寄存器 ;是16位的,它由AH和AL组成,执行这条指令后AH中内 ;容为00,AL中内容为16H。所以(AX)= 0016H立即数寻址的特点是数据直接在指令中给出,操作直接在CPU中进行,不需要总线周期。3.2.2寄存器寻址 寄存器寻址指操作数在指令的寄存器中。此类指令的操作都在CPU内部的寄存器中进行,所以执行时间短。例如: ADD AL,BL ;把寄存器AL中内容和寄存器BL中内容相加的结果送AL寄存器寄存器寻址的特点是,操作在CPU的寄存器间进行,不需要总线周期。3.2.3直接寻址 直接寻址指操作数在CPU外部的存储器中需要通过数据总线才能把数据取出进行操作。例如: MOV AL,2010 ;把内存2010单元中的内容送到CPU的AL寄存器中 直接寻址的特点是指令中有个操作数在内存中,指令执行时需要总线周期操作。3.2.4寄存器间接寻址 寄存器间接寻址指操作数以寄存器中的内容作为地址指向内存的某一单元。例如: MOV AL,BX ;以BX中的内容作为内存单元的地址,把该内存单元中的可用于寄存器间接寻址的寄存器为BX,BP,DI,SI.3.3 8086汇编指令系统3.3.1 可执行指令1,传送类指令 传送指令用于实现CPU个寄存器之间,CPU的各寄存器和存储器之间,CPU的各寄存器和输入/输出的个端口之间进行数据传递。除了取标志指令外,传送类v执行后不对标识寄存器产生影响。1) 基本转移类指令 指令形式; MOV DST,SRC;功能:SRC内容送到DST中。SRC可以是常数、CPU中的寄存器、内存地址。 DST可以是CPU中的寄存器、内存地址,但不能是代码段寄存器CS或指令指针IP。8086 CPU中的寄存器可以按8位方式,也可以按16位方式操作,传送语句中的源操作数和目的操作数的位数必须一致。如果要把一个常数传送到存储器中,必须用伪指令WORD PTR或BYTE PTR来指定要传送的常数是以字节(8位)还是字(16位)方式传送。源操作数和目的操作数不允询同时为存储器地址。不允许向段寄存器或指令指针直接传送数据。如果耍向除CS外的寄存器传送数据,可以通过CPU中的其他寄存器进行。 例如:MOV AX,1024 ;先把常数送到AX寄存器, MOV DS,AX ;然后再把AX寄存器中的数据送入DS用DI、SI和BX作间接寻址时,默认的段寄存器为数据段寄存器DS,用BP作间接寻址时,默认的段寄存器为SS。2) 堆栈操作指令 PUSH SRC; POP DST; 堆栈是内存中的一块区域,该区域可定位在内存的任何地方,地址由堆栈段寄存器SS和堆栈指针SP决定。堆栈按先进后出(或后进先出)方式工作。 指令形式:PUSH SRC POP DST功能:PUSH指令用于把源操作数中的内容压到堆栈中,具体过程为:SP=( SP)-2,(SRC)- SP,即:先把堆栈指针SP寄存器中的内容减2后送回到SP寄存器中,再把源操作数SRC中自内容送到由Ss和SP构成的内存单元中;POP指令用于把堆栈中内容弹出到目的操作数中,具体过程为; SP-DST,SP=(SP) +2,即:先把由SS寄存器和堆栈指针SP寄存器构成的内存单元中的内容送到DST中,然后把SP中的内容加2后送回到SP中。SRC和DST可以是寄存器或存储器,DST不允许用CS,SRC和DST都必须是16位的操作。3) 交换指令 XCHG DST,SRC;功能:把DST和SRC中的内容交换SRC和DST不能同时为内存的地址,也不可以是CS或IP寄存器。4) 换码指令 XLAT 功能:把BX和AL中的内容相加后作为内存的地址,然后把该地址所指向的内存单元中的内容取到AL寄存器中去。5) 取地址指令 LEA DST,SRC; LEA指令用于把SRC所指向的内存地址的偏移量取到DST中 LDS DST,SRC; LDS指令用于把SRC内存地址的第一个字取到DST中,并将内存地址的第二个字取到DS寄存器中;LES DST,SRC; LES指SRC所指向的内存地址的第一个字取到DST中,并将内存地址的第二个字取到ES寄存器中。6) 取标志指令 LAHF SAHF PUSHF POPF功能:LAHF把标志寄存器的低8位取到AH,标志寄存器中的各位位置与AH各位位置对应。SAHF 把AH内容送到标志寄存器的低8位;标志寄存器中的各位位置对应PUSHF把标志寄存器的值压入堆栈:SP值的变化和PUSH指令类似。POPF把堆栈顶部的值弹出到标志寄存器中,SP值的变化和POP指令;2算术类指令算术类指令用作加、减、乘、除运算。参加运算的数据都按整数对待。指令执行后将根据运算结果改变标志寄存器中的某些标志位。标志位改变的基本规律如下: 如果运算结果等于0,则ZF=1。 如果运算结果为负数,则SF=1。 如果运算结果中有偶数个1,则PF=l。 当有符号数运算产生溢出,则OF=1。 当无符号数运算产生溢出,则CF=I。 当无符号数相减,被减数小于减数时,CF=1。 1)不带进位位的加法指令 指令形式:ADD DST, SRC 功能:SRC内容和DST内容相加,结果送到DST中。2) 不带进位位的减法指令SUB 指令形式:SUB DST, SRC 功能:SRC内容和DST内容相加,结果送到DST中。3) 带进位位的加法指令ADC 指令形式:ADC DST, SRC 功能:SRC内容和DST内容相加后再加标志位CF内容,结果送到DST中。4) 带借位位的减法指令SBB 指令形式:SBB DST, SRC 功能:SRC内容和DST内容相减后再减标志位CF内容,结果送到DST中。5) 增1指令 INC 指令形式:INC DST-SRC 功能:DST-SRC内容加1后结果送到DST-SRC中。6) 减1指令 DEC指令形式:DEC DST-SRC 功能:DST-SRC内容减1后结果送到DST-SRC中。7) 无符号数乘法指令 指令形式:MUL SRC; (AL)*SRC-AX (AX)*SRC-DX,AX8) 带符号数乘法指令 指令形式:IMUL SRC; (AL)*SRC-AX (AX)*SRC-DX,AX9) 无符号数除法指令 指令形式:DIV SRC; (AX)/SRC-AX AL商AH余 (DX)(AX)/SRC=DX,AX AX商,DX余数10 带符号数除法指令 指令形式:IDIV SRC; (AX)/SRC-AX AL商AH余 (DX)(AX)/SRC=DX,AX AX商,DX余数11) BCD码运算指令 P97 指令形式 AAA AAS DAA DAS AAM AADBCD码在计算机中有两种表示方法:一种用8位二进制数表示2位BCD码,如01 100111,称为组合BCD码;另一种用8位二进制数的低4位表示1位BCD码,如00000111,称为非组合BCD码。由于计算机的运算指令都是按二进制的形式进行,所以在对用BCD码表示的数算时,必须进行必要的处理,也叫调整。指令形式: AAA AAS DAA DAS AAM AAD 功能:AAA用于非组合的BCD加法的调整;AAS用于非组合的BCD减法的调整;DAA用于组合的BCD加法的调整;DAS用于组合的BCD减法的调整;AAM用于非组合的BCD乘法的调整;AAD用于非组合的BCD除法的调整。12)比较指令 CMP DST ,SRC; 指令形式:CMP DST,SRC; 功能:把DST内容减去SRC内容,结果不送回到DST。该指令与SUB指令相似,不同点在于不把结果送到目的操作数。3. 逻辑运算和移位类指令1)逻辑运算指令指令形式:AND DST,SRC; TEST DST,SRC; OR DST,SRC; XOR DST,SRC; NOT DST,SRC; NEG DST,SRC;l 送DST;TEST指令买现uM布u 3K乙功能:AND指令实现DST和SRC按位逻辑与操作,结果送DST;TEST指令实现DST和SRC按位逻辑与操作,DST结果不变;OR指令实现DST和SRC按位逻辑或操作,结果送DST;NOT指令实现DSTSRC按位取反操作,结果送DST-SRC; NEG实现DST和SRC按位逻辑异或操作,结果送DST;2) 移位指令 (1)非循环移位指令 指令形式; SAL DST,SRC; SAR DST,SRC; SHL DST,SRC; SHR DST,SRC; 功能:SAL是算术左移指令,根据SRC的值K把DST中内容左移K位,每移一次,最左边的一位移入 CF,最右边的位补O;SHL是逻辑左移指令,功能同SAL指令。 SAR是算术右移指令,根据SRC的值K把DST中内容右移K位,每移一次,最左边的一位除了向右移外还保持本身的值不变,即:保持符号位不变。最右边的一位移人CF中。SGR是逻辑右移指令,根据SRC的值后把DST中内容右移座位,每移一次,最右边的一位移入CF中,最左边的位补0。 上面四条指令的SRC可以是常数1或寄存器CL两种形式。常数l表示移1位,如果希望移多位,则必须用CL指定要移的位数。 上面指令的SRC可以是常数1或寄存器CL两种形式。常数l表示移1位,如果希望移多位,则必须用CL指定要移的位数。(2)不带进位位的循环移位指令 指令形式: ROL DST,SRC;ROR DST,SRC;功能:ROL是左移指令,根据SRC的值七把DST中内容左移座位,每移一次,最左边的一位移人CF的同时也移入最右边的位中。ROR是右移指令,根据SRC的值K把DST中内容右移K位,每移一次,最右边的一位除了移入CF的同时也移入最左边的位中。(3) 带进位位的循环移位指令指令形式:RCL DST,SRC RCR DSTSRC功能:RCL是左移指令,根据SRC的值K把DST中内容左移K位,每移一次,最左边的一位移人CF,同时把CF移人到最右边的位中。RCR是右移指令,根据SRC的值K后把DST中内容右移K位,每移一次,最右边的一位移入CF,同时把CF移人到最左边的位中。4. 串操作指令 串操作指令用于对内存区域中的一串数据进行操作。源数据的地址一般在数据段中,由DS给出它的段地址,并用SI来指定它的偏移量;目的数据的地址一般在附加段中,由ES给出它的段地址,并用DI来指定它的偏移量。 串操作指令既可以对单个字节数据或单个字数据进行操作,也可以以对串操作指令加前缀的方式作连续的操作。 1)串操作前缀指令 (1) REP指令 REP指令使得串操作指令重复执行,每执行一次,CX中的内容减1,在CX中的内容减到0时才停止。其执行步骤如下: 如果CX=0,则退出,否则往下执行; cxcx-1; 执行REP后面的串处理指令一次; 重复到。 这条指令可以和MOVS、STOS、LODS一起使用。(2) REPE/REPZ指令 REPE和REPZ两条前缀指令的功能相同,即让串操作指令重复执行,每执行一次,CX中的内容减l,当CX中的内容减到0时停止,或者标志寄存器ZF=0时,即使CX内容没有减到0,也将停止串操作指令的执行。其执行步骤如下: 如果CX=0或ZF=0,则退出,否则往下执行; cxcx-1; 执行REPE/REPZ后面的串处理指令一次; 重复到。(3) REPNE/REPNZ指令 REPNE和REPNZ两条前缀指令的功能相同,即让串操作指令重复执行,每执行一次,CX中的内容减1,在CX中的内容减到0时停止,或者标志寄存器ZF=1时,即使CX内容没有减到0,也将停止串操作指令的执行。其执行步骤如下: 如果CX=0或ZF=1,则退出,否删往下执行; cxcx-1; 执行REPE/REPZ后面的串处理指令一次; 重复到。 注意:上述串操作前缀指令在执行前都是先做判断后执行的串操作指令。2)串操作指令 (1)串传送指令 指令形式:MOVSB MOVSW 功能:MOVSB用于把源地址的一个字节数据送到目的地址;MOVSW用于把源地址的一个字数据送到目的地址。 如果标志寄存器中的方向标志DF=O,那么,每传送一个字节(或字)后SI和DI的内容将加 1(或2),如果DF=1,那么,每传送一个字节(或字)后SI和DI的内_容将减1(或2)。(2) 串比较指令) 指令形式:CMPSB CMPSW 功能:CMPSB用于把源地址的一个字节数据和目的地址的一个字节数据作比较;CMPSW用于把源地址的一个字数据和目的地址的一个字数据作比较。 如果标志寄存器中的方向标志DF=O,那么,每比较一个字节(或字)后SI和DI的内容将加1(或2);如果DF=1,那么每比较一个字节(或字)后SI和DI的内容将减1(或2)。 (3) 串检索指令指令形式:SCASB SCASW功能; SCASB 用于把AL中的数据和目的地址的一个字节数据作比较; SCASW用于把AX中的数据和目的地址的一个字数据作比较。 如果标志寄存器中的方向标志DF=O,那么,每比较一个字节(或字)后SI和DI的内容将加1(或2);如果DF=1,那么每比较一个字节(或字)后SI和DI的内容将减1(或2)。(4) 取串指令指令形式:LODSB LODSW功能:LODSB用于把DS:SI所指向的目的地址中的一个字节数据取到AL中;LODSW用于把DS:SI所指向的目的地址中的一个字数据取到AX中。 如果标志寄存器中的方向标志DF=O,那么,每取一个字节(或字)后SI的内容将加1(或2);如果DF=1,那么,每取一个字节(或字)后SI的内容将减1(或2)。(5)、存串指令 指令形式:STOSB STOSW功能:STOSB用于把AL中的内容存到ES:DI所指向的目的地址中;STOSW用于把AX中的内容存到ES:DI所指向的目的地址中。如果标志寄存器中的方向标志DF=O,那么,每取一个字节(或字)后SI的内容将加1(或2);如果DF=1,那么,每取一个字节(或字)后SI的内容将减1(或2)。5. CPU控制指令1) 方向标志操作指令 CLD STD CLD ;置DF=0STD ;置DF=12) 进位标志操作指令 CLC STC CMC(CF取反) CLC ;置CF=OSTC :置CF=ICMC ;CF取反,如果CF原来等于1,执行CMC指令后CF=O3) 中断允许标志操作指令 CLI STICLI :置IF=O,即CPU不响应外部可屏蔽中断请求STI ;置IF=1,即CPU可响应外部可屏蔽中断请求4) 停机指令 HLTHLT ;CPU进入暂停状态,当有外部中断或复位时才退出暂停状态5) 空操作指令 NOP NOP ;CPU不做任何操作6. 输入/输出指令指令形式: IN AL/AX,PORT8;IN AL/AX , DX;OUT PORT8 , AL/AX;OUT DX, AL/AX;功能: IN指令用于从I/O端口中读进数据, OUT指令用于把数据写到I/O端口中.AL或AX存放输入或输出的数据。PORT8是8位的端口地址,如果外部的端口地址为16位,必须先把16位的地址送到DX,然后再用DX做间接寻址。7. 转移类指令1) 无条件转移指令无条件转移指令有段间转移和段内转移,前者转移的范围超过64K,此时转移指令的地址中除了包含偏移地址外还包含段地址。段间转移和段内转移又分为直接转移和间接转移,前者的地址直接包含在指令中,后者的地址由寄存器或存储器间接给出。指令形式:JMP DST功能:根据DST的形式转移到相应的程序执行。2) 条件转移指令(1)单标志条件转移指令指令形式:JZ/JE DST ;如果ZF=1,则转移JNZ/JNE DST ;如果ZF=O,则转移JS DST ;如果SF=1,则转移JNS DST ;如果SF=O,则转移JC DST ;如果CF=l,则转移JNC DST ;如果CF=O,则转移JO DST ;如果OF=1,则转移JNO DST ;如果OF=O,则转移JP/JPE DST ;如果PF=I,则转移JNP/JPO DST ;如果PF=O,则转移()用于无符号数A和B比较的转移指念。指令形式:JB/JNAE DST ;如果AB,则转移 (3) 用于有符号A和B比较的转移指令指令形式:JL/JNGE DST ;如果AB,则转移条件转移指令只能用于段内转移,且只能在转移指令地址范围-128 - 127 B范围内转移。(4)根据CX内容转移指令指令形式:JCXZ DST ;如果(CX)=0,则转移8. 子程序调用与返回指令1)调用指令指令形式:CALL DST功能:调用DST处的子程序,子程序执行完后返回到CALL指令的下一条指令处执行。CALL指令的目的操作数地址和JMP指令类似,也有段内直接、段内间接、段间直接和段间间接四种地址形式。2)返回指令 指令形式 : RET 功能:程序返回到调用此程序的CALL指令的下一条处执行。RET指令后还可以带一个常数。如:RET 8,它表示从堆栈弹出返回地址后SP的值再加8。9. 循环控制指令 指令形式: LOOP DST LOOPZ/LOOPE DST LOOPNZ/LOOPNE DST功能:LOOP指令根据CX内容决定是否做循环,如果(CX)=0,则循环停止;LOOPZ/LOOPE指令执行时先使CX减l,再判断CX内容是否等于0,并且判断ZF是否为1。如果(ZF)=0或者(CX)=0,则退出循环。 LOOPNZ/LOOPNE指令执行时先使CX减l,再判断CX内容是否等于0,并且判断ZF是否为0,如果(ZF)=1,或者(CX)=0,则退出循环。10. 中断与返回指令1) 中断指令 措令形式;INT n、功能:INT指令用于实现软件中断指令,CPU执行此指令时把CS、IP和标志寄存器的内容压人堆栈,并以n作为中断类型码进行中断处理。2)中断返回指令指令形式:IRET功能:把堆栈中内容弹出到标志寄存器、IP和CS中,程序返回到被中断的程序处执行。3.2 不可执行指令常不可执行指令不属于8086 CPU指令系统,它属于汇编语言
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程安全隐患排查方案
- 混凝土施工中砂石质量监控方案
- 水稻脱险计课件
- 混凝土施工中的表面防水层施工方案
- 陶瓷造型工艺35课件
- 人防工程建设验收标准与流程
- 2025中国视神经脊髓炎谱系疾病诊断与治疗指南解读课件
- 乙型肝炎病毒山东医学高等专科学校刘琳琳47课件
- 信息技术(Kylin系统+WPS办公+AI赋能)教案 项目4 录入与编排技术服务合同
- 二零二五年度环保产业园区建设项目承包工程合同范本
- 2025年全国焊工证理论考试题库及答案
- 2025贵州省专业技术人员继续教育公需科目考试题库(2025公需课课程)
- 山西省持有《危险废物经营许可证》单位一览表
- PCB全制程培训教材
- 《李将军列传》教学教案及同步练习 教案教学设计
- 烟草配送车辆GPS管理方案
- 中图法分类号与中图分类法查询
- 酒店客房验收工程项目检查表(双床房、大床房、套房)
- 开音节闭音节中元音字母的发音规律练习
- 电力设备预防性试验及维护保养方案
- 融资性担保贷款保后检查表
评论
0/150
提交评论