当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机三级考试PC技术知识要点(13)
发布时间:2010/12/12 18:36:38 来源:城市学习网 编辑:ziteng
  七、80x86指令系统
  (一)8086指令系统
  8086/8088指令系统是整个80x86系列微处理器的基础,按功能可以分为六种类型。
  1.传送指令
  传送指令用于在存储单元、寄存器、输入/输出端口之间传送地址或数据。
  ①通用数据传送指令
  MOV指令:该指令可以将一个立即数传送到寄存器或存储单元中,也可以在寄存器与寄存器之间、寄存器与存储器之间传送字数据或字节数据。例如:将一个立即数传送到寄存器中的指令MOV AL,05H;在两个寄存器之间传送字节数据的指令MOV AL,BL;在寄存器和存储器之间传送数据的指令MOV SI,[BX+5AH]。
  XCHG指令:该指令可以将源操作数和目的操作数进行交换,但操作数可以是寄存器或存储单元,不能是段寄存器或立即数,也不能同时为两个存储器操作数。
  PUSH指令:PUSH指令是对一个16位操作数执行进栈操作,这是在一个操作数和堆栈之间进行数据传送,而不是在两个操作数之间进行数据传送。
  POP指令:POP指令是将一个16位操作数执行出栈操作,这也是在一个操作数和堆栈之间进行数据传送。
  XLAT指令:该指令专门用于在AL寄存器与字节表中某一存储单元之间进行数据传送。其中字节表的首地址存放在BX基址寄存器中,根据AL设置的偏移地址,可以将该单元的内容传送到AL累加寄存器中。
  ②输入/输出指令
  该指令专门用于在累加器和I/O端口之间进行数据传送操作。输入/输出的工作原理:CPU使用AL或AX寄存器接收数据或发送数据,最多可提供64K个8位端口地址,或32K个16位端口地址。当端口地址小于256时使用直接寻址来获得操作数,即在指令中直接指定端口地址;当端口地址超过256时使用间接寻址来获得操作数,即先将端口地址放到DX寄存器中,然后利用IN指令或OUT指令进行输入/输出操作。例如:IN AX,28H是从I/O端口28H输入一个字到AX寄存器中;OUT 5,AL是从AL寄存器输出一个字节到I/O端口5中。
  ③地址传送指令
  LEA指令:该指令是将源操作数的偏移地址传送到通用寄存器、指针寄存器或变址寄存器中,要求目的操作数是一个16位寄存器,源操作数是一个存储器地址,这样就可以获得指令执行所需的有效地址。
  LDS指令:该指令是将源操作数指定的连续四个存储单元中存放的32位地址指针(包括一个段地址和一个偏移量)传送到两个16位寄存器,其中两个高位字节(段基址)送段寄存器DS,两个低位字节(指偏移量)送指令指定的16位通用寄存器,这样就获得指令执行所需的地址指针。LES指令:该指令是将源操作数指定的连续四个存储单元中所存放的32位地址指针(一个段地址和一个偏移量)传送到指令指定的16位通用寄存器和段寄存器ES中。其中两个高位字节(段基址)送段寄存器ES,两个低位字节(指偏移量)送指令指定的16位通用寄存器,这样就获得指令执行所需的地址指针。④标志传送指令
  该指令用于对标志寄存器中的内容进行数据传送操作。
  2.算术运算指令
  在8086/8088微处理器中,算术运算指令可用于二进制数和无符号十进数的各种算术运算。二进制数可以是单字或双字节,也可以是有符号数或无符号数。十进制数直接使用BCD码,以表示无符号(Unsigned)的十进制数。
  (1)加法指令
  ①ADD
  格式: ADD OPRD1,OPRD2
  功能:实现两个操作数相加,结果送原来存放目的操作数的地方。目的操作数可以是累加器、通用寄存器或存储器操作数。
  加法指令可以完成累加器与立即数,或与任一通用寄存器、或与存储单元的内容相加,结果放在累加器中。
  说明:加法指令可以完成任一通用寄存器与任一通用寄存器,或与立即数、或与存储单元的内容相同,其“和”放在通用寄存器中。
  加法指令也可以实现存储器操作数与立即数,或与累加器、或与通用寄存器内容相加,其“和”放在存储单元中。
  注意:存储器操作数与立即数相加时,必须指明操作数的类型。ADD指令的执行结果将影响标志位CF、AF、PF、ZF、SF和OF。
  ②ADC
  格式: ADC OPRD1,OPRD2
  功能:ADC指令与ADD类似,不同之处在于两个操作数相加时,还要加上进位标志CF的当前值,结果送原来存放目的操作数的地方。
  说明:指令执行结果对标志值的影响与ADD相同。
  ③INC
  格式: INC OPRD
  功能:操作数OPRD加1。操作数可以是通用寄存器,也可为存储器操作数。说明:该指令执行结果影响标志位SF、ZF、AF、PF和OF,而对CF无影响。④AAA
  功能:AAA是未组合BCD码加法调整指令。它对在AL中两个未组合的十进制数相加的结果进行校正,产生一个未组合的十进制和数。⑤DAA
  功能:DAA为十进制加法调整指令。它对AL中两个组合的十进制数相加的结果进行校正,产生一个组合的十进制和数。 [NextPage]    (2)减法指令
  ①SUB
  格式: SUB OPRD1,OPRD2
  功能:完成两个操作数相减,结果放在目的操作数OPRD1中。其规则与加法指令相同。
  说明:SUB的执行结果影响标志位SF、ZF、AF、PF、CF和OF。
  ②SBB
  格式: SBB OPRD1,OPRD2
  功能:SBB指令与SUB基本相同,不同的是两个操作数相减时,还要减去借位标志位CF的当前值。
  ③DEC
  格式: DEC OPRD
  功能:完成对操作数OPRD减1运算后返回操作数中。操作数可以是寄存器或存储器。
  说明:指令执行对标志位CF无影响,但影响标志位SF、ZF、AF、PF和OF。
  ④NEG
  格式: NEG OPRD
  功能:完成对操作数取补,即用零减去操作数,再把结果送回操作数。
  说明:该指令执行结果影响标志位SF、ZF、AF、PF和OF,对于CF一般总是CF=1,只有当操作数为0时,CF=0。⑤CMP
  格式: CMP OPRD1,OPRD2
  功能:完成两个操作数相减,但不回送结果,结果只影响状态标志位。操作数规定与加法操作数相同。
  CMP指令只比较两个数的大小。若两数相等,则ZF=1,否则ZF为0。若两数不相等,则其大小的确定可利用CMP指令执行后的其他标志位来确定。例如,对于无符号数,可利用CF标志值来判断。当CF=1时,则OPRD1OPRD2。对于有符号数,则用标志位SF和OF的状态一同判定。
  ⑥AAS
  功能:完成对在AL中的两个未组合的十进制数相减的结果进行校正,在AL中产生一个正确的未组合十进制数的差。
  ⑦DAS
  功能:完成对在AL中两个未组合的十进制数相减以后的结果进行校正,在AL中产生一个正确的组合十进制数的差。
  (3)乘法指令
  ①MUL
  格式: MUL OPRD
  功能:完成源操作数OPRD与累加器中的数相乘,结果放在累加器中。参与运算的操作数可以是寄存器或存储器。乘积为单字节长时,放在AX中;乘积为双字长时,分别存放在DX(乘积的高16位)和AX中。
  说明:将内存单元FIRST和SECOND的两个字节的内容相乘,乘积放在THIRD单元和下一个单元内。MUL指令运行结果只影响标志位CF和OF。
  ②IMUL
  格式: IMUL OPRD
  功能:IMUL指令为带符号数相乘指令,即将源操作数与累加器中的数都作为带符号数相乘,其余与MUL指令相同。
  ③AAM
  功能:对在AX中两个未组合的十进制数的乘积进行校正,以得到正确的未组合的十进制数的乘积。
  (4)除法指令
  ①DIV
  格式: DIV OPRD
  功能:无符号除法指令。用指定的源操作数OPRD去除累加器中的值,所得商和余数分别放在AL和AH(字节操作)或AX和DX(字操作)中。
  ②其他除法指令
  ●IDIV: 完成带符号数的除法运算。
  ●AAD: 完成AX中的两位未组合的十进制数在两个数相除之前进行核正。
  ●CBW: 字节转换为字。具体操作是按AL的符号位扩展到整个AH中。
  ●CMD: 字转换为双字。按AX的符号扩展到整个DX中。
  3.逻辑运算和移位指令
  (1)逻辑运算指令①NOT
  格式: NOT OPRD
  功能:完成对操作数求反,然后送回原处。说明:此指令对标志位无影响。
  ②AND
  格式: AND OPRD1,OPRD2
  功能:对两操作数进行按位逻辑“与”运算,结果送目的操作数。目的操作数可为通用寄存器、存储器,源操作数可以是立即数、寄存器、存储器。
  ③OR
  格式: OR OPRD1, OPRD2
  功能:对两操作数进行按位“或”运算,结果回送目的操作数。操作数规定与AND相同。
  说明:“或”运算令标志位CF=0,OF=0,其“或”操作后的结果反映在标志位PF、SF和ZF上。
  ④XOR
  格式: XOR OPRD1,OPRD2
  功能:对两个操作数进行按位“异或”运算,结果回送目的操作数。
  说明:XOR执行后,标志位CF=0,OF=0,“异或”操作结果反映在标志位PF、SF和ZF上。
  ⑤TEST
  格式: TEST OPRD1,OPRD2
  功能:TEST指令的操作与AND指令完全相同,但结果不送目的操作数,仅反映在状态标志位上,TEST指令的操作数规定与AND相同,对标志位的影响亦与AND相同,即:CF=0,OF=0,结果反映在标志位PF、SF和ZF上。
[NextPage]   (2)移位指令
  移位指令可将寄存器或存储单元的8位或16位的内容向左或向右移动1位或多位。
  ①SAL/SHL
  格式: SAL/SHL OPRD m
  功能:SAL(算述左移)和SHL(逻辑左移)指令将操作数OPRD左移m位,移位后空出的位填零。操作数可以是寄存器、存储器。m是移位次数,为1时取立即数,大于1时先将m赋予CL寄存器。
  ②SAR
  格式: SAR OPRD m
  功能:算术右移指令。将指定操作数右移m位,最低位进入标志位CF,其他位依次右移,但符号位(最高位)保持不变。m的规定与SHL相同。③SHR
  格式: SHR OPRD m
  功能:逻辑右移指令。与SAR类拟,最低位进入标志位CF,但移位后空位的最高位填0。
  (3)循环移位指令
  8086/8088有四条循环移位指令,它们是:
  ●ROL OPRD M ;左循环移位
  ●ROR OPRD M ;右循环移位
  ●RCL OPRD M ;带进位的左循环移位
  ●RCR OPRD M ;带进位的右循环移位
  4.串操作指令
  串可以是字节串(一组字节)或字串(一组字)。串指令有两类,每类有5种。一类是串操作命令,一类是控制操作重复执行的前缀命令。串操作时,下列寄存器及标志起着特定的作用,程序应根据操作的具体要求先赋予初值。SI寄存器 源串变址用DI寄存器 目的串变址用CX寄存器 重复次数寄存器AL/AX 扫描值(关键字)FLAGS中标志位:
  DF 0表示重复操作中DI、SI应自动增量,1表示自动减量。 ZF 用于控制扫描或比较操作结果。
  (1)基本串操作命令
  ①MOVS
  格式: MOVS OPRD1,OPRD2
  功能:将由SI作为偏移地址的源串中的一个字节或字,传送到由DI作为偏移地址的目的串,且相应修改偏移地址,以指向串中下一个元素。传送完一个字节或字后,则依据控制标志位DF和源、目的操作数的属性,修改偏移地址。在使用MOVS指令之前,必须将源、目的操作数的偏移地址分别送SI、DI,并设置DF。
  ②MOVSB/MOVSW
  字节串/字串传送命令,不带操作数,地址修改MOVSB命令以±1形式修改偏移地址,MOVSW以±2形式修改偏移地址。其余与MOVS相同。
  ③CMPS
  格式: CMPS OPRD1,OPRD2
  功能:字节串或字串比较。从由SI作为偏移地址的源串中减去由DI为偏移地址的目标串(字或字节),减的结果不送至任何操作数,仅反映到标志位上。同时修改源、目的串的偏移地址,以指向串中的下一个元素。标志位AF、CF、OF、PF、SF和ZF反映两串元素之间的关系。
  ④CMPSB/CMPSW
  字节串/字串比较,无操作数。
  ⑤LODS OPRD
  读出字节串或字串。从由SI为偏移地址的源串中读出一个字节或一个字送AL或AX,同时修改偏移地址,指向串的下一个元素。此指令对标志位无影响。
  ⑥LODSB/LODSW
  字节或字操作,无操作数。
  ⑦SCAS
  格式: SCAS OPRD
  功能:搜索(扫描)串元素命令。从AL(字节操作)或AX的内容中减去由DI作为偏移地址的目标串元素。结果不改变累加器的值,只改变标志位。利用SCAS指令可以进行搜索,此时将搜索关键字放在AL(字节)或AX(字)中,用于查找字符串中有无此关键字,记下查找次数。
  ⑧SCASB/SCASW
  搜索串中字节或字元素,无操作数。
  ⑨STOS
  格式:STOS OPRD
  功能:存储字节或字串的指令。将AL(字节)或AX(字)中内容,存储到以DI为偏移地址的目的串中,同时修改偏移地址,指向串的下一个元素。
  ⑩STOSB/STOSW
  存储字节串/字串,无操作数。
  (2)重复前缀
  ①REP
  可作为串传送、串比较、串存储、串搜索指令的前缀。最常用的是串传送指令,使用时数据长度必须放在CX中。
  ②REPE/REPZ
  用于串传送、串搜索指令的前缀,使紧随其后的指令重复执行,直到CX=0或ZF=0为止。
  ③REPNE/REPNZ
  用于串比较或串搜索指令的前缀,使其重复执行直到XC=1或ZF=1为止。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved