《微机原理与应用教学资料》第三章(课件)

上传人:lisu****2020 文档编号:188947466 上传时间:2023-02-20 格式:PPT 页数:80 大小:474.50KB
返回 下载 相关 举报
《微机原理与应用教学资料》第三章(课件)_第1页
第1页 / 共80页
《微机原理与应用教学资料》第三章(课件)_第2页
第2页 / 共80页
《微机原理与应用教学资料》第三章(课件)_第3页
第3页 / 共80页
点击查看更多>>
资源描述
1第三章第三章 8086的寻址方式和指令系统的寻址方式和指令系统 电气学院学习部资料库2 v3-1 80863-1 8086寻址方式寻址方式指令:操作码:给出此指令应完成何种操作。告诉计算机指令:操作码:给出此指令应完成何种操作。告诉计算机 做什么做什么 操作数:该指令的操作对象。告诉计算机对谁做操作数:该指令的操作对象。告诉计算机对谁做指令格式:操作码指令格式:操作码 目的操作数,源操作数目的操作数,源操作数 源操作数:数据从何而来。操作过程中原值不变。源操作数:数据从何而来。操作过程中原值不变。目的操作数:送到哪里去。操作数原值不保留。目的操作数:送到哪里去。操作数原值不保留。寻址方式:说明操作数所在地址的方法。寻址方式:说明操作数所在地址的方法。操作数来源:操作数来源:指令指令 CPU CPU内部寄存器内部寄存器 内存单元内存单元电气学院学习部资料库3v一、一、立即寻址方式立即寻址方式 指令中包含操作数,不必执行总线周期,指令执指令中包含操作数,不必执行总线周期,指令执行速度快行速度快例例1 1:MOV ALMOV AL,80H80H;80HAL80HAL,(,(ALAL)=80H=80H例例2 2:MOV AXMOV AX,1234H1234H;1234HAX1234HAX,(,(AHAH)=12H=12H,(ALAL)=34H=34H *加上(加上(),表示取寄存器或内存单元的内容),表示取寄存器或内存单元的内容v 一般用于赋值。源操作数和目的操作数字长一般用于赋值。源操作数和目的操作数字长应相同应相同v 立即数只能做源操作数,不能做目的操作数立即数只能做源操作数,不能做目的操作数 若是以字母打头的数,例:若是以字母打头的数,例:A0HA0H在编程中必须在编程中必须表示为表示为0A0H0A0H电气学院学习部资料库4v二、寄存器寻址二、寄存器寻址操作数在寄存器中,不必执行总线周期,执行速度快操作数在寄存器中,不必执行总线周期,执行速度快例例1 1:INC AL INC AL;(;(ALAL)+1AL+1AL,若(,若(ALAL)=86H=86H,指令执行完,指令执行完(ALAL)=87H=87H例例2 2:MOV AXMOV AX,CXCX;(;(CXCX)AXAX,若指令执行前,若指令执行前CX=3A68H,CX=3A68H,指令指令执行后执行后AX=3A68HAX=3A68H目的与源操作数都可用寄存器寻址目的与源操作数都可用寄存器寻址注意数据匹配,源与目的操作数的长度必须一致注意数据匹配,源与目的操作数的长度必须一致 例:例:MOV AXMOV AX,BLBL;错误。错误。可用于寄存器寻址的寄存器包括:可用于寄存器寻址的寄存器包括:4 4个通用寄存器,个通用寄存器,4 4个专用个专用寄存器寄存器 1616位操作数:位操作数:AXAX,BXBX,CXCX,DXDX,SISI,DIDI,SPSP,BPBP 8 8位操作数:位操作数:AHAH,ALAL,BHBH,BLBL,CHCH,CLCL,DHDH,DLDL从第三种开始,指令的操作数都在内存中,须用不同的方法求出操作数的从第三种开始,指令的操作数都在内存中,须用不同的方法求出操作数的物理地址,来获得操作数。物理地址,来获得操作数。电气学院学习部资料库5v三、直接寻址三、直接寻址 指令中直接给出操作数的有效地址指令中直接给出操作数的有效地址EAEA,操作数在内存中,操作数在内存中,需执行总线周期需执行总线周期 有效地址有效地址EAEA:操作数的偏移地址:操作数的偏移地址 物理地址物理地址=段地址段地址*16+EA16+EA默认段地址为默认段地址为DSDS,指令中有效地址,指令中有效地址EAEA加加 ,以区别于立,以区别于立即数。即数。*加上加上 ,表示里面的内容是内存中偏移地址,表示里面的内容是内存中偏移地址 例例1 1:MOV ALMOV AL,1064H 1064H;若(;若(DSDS)=1000H=1000H,则,则(11064H11064H)ALAL 例例2:2:MOV AXMOV AX,1064H 1064H;(;(11064H11064H)ALAL,(11065H11065H)AHAH 若(若(11064H11064H)=00H=00H,(,(11065H11065H)=12H=12H,(,(AXAX)=1200H=1200H 电气学院学习部资料库6 一个字在存储体中相邻的两个字节存放,字单元的地址以一个字在存储体中相邻的两个字节存放,字单元的地址以低位地址表示,存入时以低位字节在低地址,高位字节在低位地址表示,存入时以低位字节在低地址,高位字节在高地址高地址段超越前缀段超越前缀:若段地址为若段地址为CSCS、SSSS、ESES,应在指令中指定段超,应在指令中指定段超越前缀越前缀 例:例:MOV AXMOV AX,ESES:1064H1064H;将;将ESES段中段中1064H1064H的内容的内容AXAX ES ES:MOV AXMOV AX,1064H 1064H 符号地址符号地址(给存储单元起一名字,变量名)(给存储单元起一名字,变量名)例:例:MOV AXMOV AX,AREA1AREA1;从符号地址为从符号地址为AREA1AREA1的存储单元中取的存储单元中取一个字一个字 AXAX 符号地址也允许段超越符号地址也允许段超越电气学院学习部资料库7v四、寄存器间接寻址四、寄存器间接寻址 指令中通过寄存器给出有效地址指令中通过寄存器给出有效地址EA EA,寄存器中为地址,操,寄存器中为地址,操作数在内存中,需执行总线周期作数在内存中,需执行总线周期可以用于寄存器间接寻址的寄存器有:可以用于寄存器间接寻址的寄存器有:SISI、DIDI,BXBX、BPBP 变址寄存器变址寄存器 基址寄存器基址寄存器 寄存器名称外面必须加寄存器名称外面必须加 (SISI)EA=EA=(DIDI)DSDS(默认)(默认)(BXBX)(BPBP):):SSSS物理地址物理地址=段地址段地址*16+EA16+EA 电气学院学习部资料库8 例:例:MOV BX,SI;MOV BX,SI;若(若(DSDS)=1000H=1000H,(,(SISI)=2000H=2000H,(12000H12000H)=318BH=318BH。则(。则(BHBH)=31H=31H,(,(BLBL)=8BH=8BH 也可以通过指定超越前缀,改变段基地址也可以通过指定超越前缀,改变段基地址 例:例:MOV BXMOV BX,DS:BPDS:BP ;(DS:BPDS:BP)BL BL,(DS:BP+1(DS:BP+1)BH BH 电气学院学习部资料库9v五、寄存器相对寻址五、寄存器相对寻址 通过基址或变址寄存器的内容与指令中指定的通过基址或变址寄存器的内容与指令中指定的8 8位或位或1616位位移量(位位移量(Displacement)Displacement)给出给出EAEA,操作数在内存中,操作数在内存中,需执行总线周期需执行总线周期 (SISI)8 8位位 EA=EA=(DIDI)DS+dispDS+disp (BXBX)1616位位 (BPBP):):SSSS 物理地址物理地址=段地址段地址*16+EA16+EA 例:例:MOV AXMOV AX,BX+1000HBX+1000H;(;(DS:BX+1000HDS:BX+1000H)ALAL,(DS:DS:BX+1001HBX+1001H)AHAH MOV AX MOV AX,1000HBX1000HBX也可以通过指定超越前缀,改变段基地址也可以通过指定超越前缀,改变段基地址 例:例:MOV AXMOV AX,ES:1000HBXES:1000HBX电气学院学习部资料库10v六、基址加变址寻址六、基址加变址寻址 由一个基址由一个基址寄存器寄存器(BXBX或或BPBP)和一个变址)和一个变址寄存器寄存器(SISI或或DIDI)之和给出之和给出EAEA BX SI BX SI EA=+EA=+BP DI BP DI 物理地址物理地址=段地址段地址*16+EA16+EA 默认的段地址:只需出现默认的段地址:只需出现BPBP,即为,即为SSSS,其余为,其余为DSDS例:例:MOV AXMOV AX,BX+SIBX+SI;(;(DSDS:BX+SIBX+SI)ALAL,(,(DSDS:BX+SI+1BX+SI+1)AHAH MOV AX MOV AX,BXSIBXSI MOV AX MOV AX,SI+BPSI+BP;(;(SSSS:SI+BPSI+BP)ALAL,(,(SSSS:SI+BP+1SI+BP+1)AHAH MOV AX MOV AX,BP+SIBP+SI例:例:MOV AXMOV AX,BX+BP BX+BP;错误,;错误,BXBX、BPBP均为基址寄存器均为基址寄存器电气学院学习部资料库11v七、相对基址加变址寻址七、相对基址加变址寻址 由一个基址由一个基址寄存器寄存器和一个变址和一个变址寄存器寄存器的内容,再加上一个的内容,再加上一个位移量,三者之和确定位移量,三者之和确定EAEA BX SI 8 BX SI 8位位 EA=+disp EA=+disp BP DI 16 BP DI 16位位例:例:MOV AXMOV AX,BX+SI+1000HBX+SI+1000H ;(;(DSDS:EAEA)ALAL,(,(DSDS:EA+1EA+1)AHAH MOV AX MOV AX,1000H BXSI1000H BXSI若若 DS=2000HDS=2000H,BX=1500HBX=1500H,SI=0300HSI=0300H,disp=1000Hdisp=1000H,(22800H)=26BFH(22800H)=26BFH则则 EA=1500H+0300H+1000H=2800HEA=1500H+0300H+1000H=2800H,物理地址物理地址=20000=20000H+2800H=22800HH+2800H=22800H,AX=26BFH AX=26BFH电气学院学习部资料库12v 八、其它八、其它 隐含寻址隐含寻址 例:例:DAADAA、AAAAAA、AASAAS、DASDAS、AAMAAM、AADAAD I/O I/O端口寻址端口寻址 例:例:IN ALIN AL,63H63H;OUT 85HOUT 85H,ALAL;MOV DXMOV DX,0FF4H0FF4H;OUT DXOUT DX,ALAL;电气学院学习部资料库13课堂练习:举例:指出下列指令中目的、源操作数各采用何种寻址方式举例:指出下列指令中目的、源操作数各采用何种寻址方式 目的操作数目的操作数 源操作数源操作数 MOV SIMOV SI,1000H 1000H ;MOV SI MOV SI,AL AL ;MOV 1000H MOV 1000H,AL AL ;MOV BP MOV BP,BX BX ;MOV BP MOV BP,BX BX ;MOV AX MOV AX,AREA1 AREA1 ;AND DL AND DL,BX+SI+20H BX+SI+20H;PUSH DS PUSH DS ;ADD AX ADD AX,BX+SI BX+SI ;SUB AX SUB AX,BX+1000H BX+1000H;IN AL,05H ;IN AL,05H ;R R寻址寻址 立即数寻址立即数寻址 R R间接寻址间接寻址 R R寻址寻址 直接寻址直接寻址 R R寻址寻址 R R寻址寻址 R R寻址寻址 R R寻址寻址 R R间接寻址间接寻址 R R寻址寻址 直接寻址直接寻址 R R寻址寻址 相对基址加变址相对基址加变址 R R寻址寻址 R R寻址寻址 基址加变址基址加变址 R R寻址寻址 R R相对寻址相对寻址 R R寻址寻址 I/OI/O端口寻址端口寻址 电气学院学习部资料库143.2 80863.2 8086指令系统指令系统一、数据传送指令一、数据传送指令1 1、通用数据传送指令、通用数据传送指令(1)MOV(1)MOV传送指令传送指令 格式:格式:MOV MOV 目的,源目的,源 功能:源操作数功能:源操作数 目的操作数,可实现目的操作数,可实现R R R R,R R M M,立即数,立即数 M M的传送(参见图的传送(参见图3-123-12)受影响的标志位:无受影响的标志位:无 例:例:MOV AXMOV AX,BX BX ;BX BX AXAX,R R R R MOV AX MOV AX,1064H 1064H ;M M R R MOV 1064H MOV 1064H,AX AX ;R R M M MOV MOV WORD PTRWORD PTR1000H1000H,1000H1000H;立即数;立即数 M M电气学院学习部资料库15注意:注意:v源操作数和目的操作数字长应相同源操作数和目的操作数字长应相同v立即数只能做源操作数,且不能被直接送进段寄存器立即数只能做源操作数,且不能被直接送进段寄存器vIPIP寄存器不能用作源操作数,亦不能做目的操作数寄存器不能用作源操作数,亦不能做目的操作数vCSCS寄存器不能作目的操作数寄存器不能作目的操作数v不能在两个内存单元,或两个段寄存器之间直接传送数不能在两个内存单元,或两个段寄存器之间直接传送数据据v指令中至少要有一项操作数明确说明传送的是字节还是指令中至少要有一项操作数明确说明传送的是字节还是字字电气学院学习部资料库16DATA SEGMENTDATA SEGMENT AREA1 DB 14HAREA1 DB 14H,3BH3BH;变量名;变量名 助记符助记符 AREA2 DB 3 DUPAREA2 DB 3 DUP(0 0);重复;重复3 3个个0 0存入存入AREA2AREA2起始的储存单元起始的储存单元 ARRAY DW 3100HARRAY DW 3100H,01A6H01A6H STRING DB STRING DB GOODGOODDATA ENDSDATA ENDSDOOG01HA6H31H00H00H00H00H3BH14HARRAYARRAYSTRINGSTRINGAREA1AREA1AREA2AREA2DATADATA:0000H0000HDATADATA:0002H0002HDATADATA:0005H0005HD DATAATA:0009H0009H段定义符段定义符电气学院学习部资料库17说明:说明:v1.1.SEGMENTSEGMENTENDS ENDS 段定义语句段定义语句 DATA DATA 数据段段名数据段段名v2.2.DBDB、DW DW 数据定义语句数据定义语句 作用作用:将操作数存入变量名指定的存储单元将操作数存入变量名指定的存储单元 格式格式1 1:变量名:变量名 伪操作符伪操作符(DBDB、DWDW)操作数,操作数,操作数,操作数,.格式格式2 2:变量名:变量名 伪操作符伪操作符(DBDB、DWDW)n DUPn DUP(操作数,操作(操作数,操作数,数,.)其中,其中,DB DB 用来定义字节变量,用来定义字节变量,DWDW用来定义字变量用来定义字变量v3.3.AREA1AREA1:变量名,将此变量的助记符后的第一个字节的偏:变量名,将此变量的助记符后的第一个字节的偏移地址作为它的符号地址移地址作为它的符号地址例:例:STRING1 DB STRING1 DB OKOK STRING2 DW STRING2 DW OKOK 例:例:STRING2 DW STRING2 DW GOODGOOD;错误;错误OKKOSTRING1STRING1STRING2STRING2电气学院学习部资料库18(2)(2)堆栈、出栈指令堆栈、出栈指令 PUSHPUSH、POPPOP 格式:格式:PUSH PUSH 源源 POP POP 目的目的 功能:功能:PUSH PUSH 将源操作数压到堆栈中,将源操作数压到堆栈中,POPPOP将堆栈中数据弹出将堆栈中数据弹出到目的操作数到目的操作数 受影响的标志位:无受影响的标志位:无 说明:说明:v按按“字字”操作操作,源操作数可以是,源操作数可以是1616位通用寄存器,段寄存位通用寄存器,段寄存器或存储器中的数据字器或存储器中的数据字 PUSH PUSH:(:(SPSP)-2-2 SPSP,POPPOP:(:(SPSP)+2+2 SPSP 操作数不能是立即数操作数不能是立即数 例:例:PUSH 1000HPUSH 1000H;错误;错误v堆栈操作原则:堆栈操作原则:先进后出先进后出v SPSP始终指向栈顶,且总是指向偶地址单元,其值可以从始终指向栈顶,且总是指向偶地址单元,其值可以从FFFEHFFFEH开始开始v POP POP指令中,指令中,CS CS 不能做目的操作数,即不能做目的操作数,即 PUSH CS PUSH CS 正确,正确,而而POP CS POP CS 错误错误电气学院学习部资料库19 PUSH AX PUSH AX PUSH BX PUSH BX .POP BX POP BX POP AX POP AXSPSP11H 00H 33H 22HSPSPSPSP堆栈段末地址堆栈段末地址(栈底)(栈底)堆栈段首地址堆栈段首地址栈顶栈顶 例:已知指令执行前(例:已知指令执行前(SSSS)=C000H=C000H,(,(SPSP)=C100H=C100H,(AXAX)=1100H=1100H,(,(BXBX)=3322H=3322H;该指令执行后(;该指令执行后(SPSP)=C0FEH=C0FEH;该指令执行后(;该指令执行后(SPSP)=C0FCH=C0FCH电气学院学习部资料库20堆栈初始化操作堆栈段起始地址堆栈段起始地址栈底及初始栈顶栈底及初始栈顶 地址地址 存储单元存储单元10200H10202H10204H10206H10208H1020AH1020CH10230H 00 11 SS 10 20SP初值初值 00 30电气学院学习部资料库21入栈操作栈顶栈顶PUSH AX 12 34PUSH BX 1A B110200H10202H10204H10206H10208H1022CH1022EH10230H 00 11 SS 10 20 SP 00 30栈栈底底00 2E00 30堆栈段堆栈段起始地起始地址址12 341A B100 2E00 2C电气学院学习部资料库22出栈操作栈顶栈顶POP AXPOP BX10200H10202H10204H10206H10208H1022CH 1A B11022EH 12 3410230H 00 11 SS 10 20 SP 00 2C(栈底栈底)堆栈段堆栈段起始地起始地址址00 2E00 30 1A B1 12 34电气学院学习部资料库23(3)3)交换指令交换指令 XCHGXCHG 格式:格式:XCHG XCHG 目的,源目的,源 功能:目的操作数与源操作数互换功能:目的操作数与源操作数互换 影响标志位:无影响标志位:无 例:例:XCHG ALXCHG AL,BLBL XCHG BX XCHG BX,DXDX XCHG AL XCHG AL,BXBX;错误;错误注意:注意:v CSCS、IP IP 不能做操作数不能做操作数 例:例:XCHG CSXCHG CS,AXAX;错误;错误 XCHG IPXCHG IP,BXBX;错误;错误v 不能直接交换两个存储单元不能直接交换两个存储单元 例:例:XCHG 1000HXCHG 1000H,BXBX;错误;错误电气学院学习部资料库24(4)(4)换码指令换码指令XLATXLAT 格式:格式:XLAT XLAT 转换表转换表 或或XLATXLAT 功能:将一个字节从一种代码转换为另一种代码,结果自功能:将一个字节从一种代码转换为另一种代码,结果自动送入动送入ALAL中中 影响标志位:无影响标志位:无 执行以下操作:执行以下操作:先建立一个表格(在先建立一个表格(在DSDS段中),将转换表的起始偏移地址段中),将转换表的起始偏移地址BXBX将表中某一项(所要查找的)与表首地址之间的位移量将表中某一项(所要查找的)与表首地址之间的位移量 ALALXLATXLAT指令执行时,指令执行时,CPUCPU会将会将BXBX和和ALAL中的值相加,将得到的中的值相加,将得到的值作为地址,然后将此地址所对应的单元中的值取到值作为地址,然后将此地址所对应的单元中的值取到ALAL中中即:即:BX+AL BX+AL ALAL电气学院学习部资料库25例:要求将例:要求将3 3从十进制数转换成相应的字型代码从十进制数转换成相应的字型代码ASC码码十进制数十进制数BCD码码字型代码字型代码30H00000B40H31H10001B79H32H20010B24H33H30011B30H34H40100B19H35H50101B12H36H60110B02H37H70111B78H38H81000B00H39H91001B18H电气学院学习部资料库26数据段中数据段中T1T1用于存储字型代码表格用于存储字型代码表格 T1 DB 40HT1 DB 40H,79H79H,24H24H,30H30H,19H19H DB 12H DB 12H,02H02H,78H78H,00H00H,18H 18H ;定义七段码表格;定义七段码表格 MOV BX MOV BX,OFFSET T1 OFFSET T1 ;表格首地址;表格首地址BXBX,;(;(OFFSET OFFSET 变量或标号)用于返回变量或标号的偏移地址值变量或标号)用于返回变量或标号的偏移地址值 MOV ALMOV AL,3 3 ;数字;数字3 3的位移量的位移量 ALAL XLAT T1 XLAT T1 ;查表得(;查表得(ALAL)=30H=30H,T1T1也可不写也可不写电气学院学习部资料库272 2、输入、输入/输出指令:输出指令:IN/OUTIN/OUT 格式:格式:ININ 目的,源目的,源 OUTOUT 功能:实现功能:实现AXAX,ALAL与与I/O InterfaceI/O Interface间的数据传递间的数据传递 影响标志位:无影响标志位:无 例:例:IN ALIN AL,50H 50H;50H50H端口内容端口内容ALAL IN AX IN AX,50H 50H;50H50H端口内容端口内容ALAL,51H51H内容内容AHAH OUT 50HOUT 50H,AL AL;ALAL内容内容50H50H端口端口电气学院学习部资料库28注意:注意:v 寄存器只能是累加器寄存器只能是累加器AXAX或或ALAL 例:例:IN BLIN BL,50H 50H ;错误;错误 IN ALIN AL,50H50H MOV BL MOV BL,ALAL ;可实现(;可实现(50H50H)BLBLv如果端口地址如果端口地址0FFH0FFH(255255),只能用),只能用DXDX间接寻址间接寻址 即即 在在DXDX寄存器中设置好端口号寄存器中设置好端口号 例:例:IN ALIN AL,01FFH 01FFH ;错误错误 MOV DXMOV DX,01FFH01FFH IN AL IN AL,DX DX ;可实现(可实现(01FFH01FFH)ALAL电气学院学习部资料库293 3、地址传送指令地址传送指令(1)LEA (1)LEA 取有效地址指令取有效地址指令格式:格式:LEA LEA 目的,源目的,源功能:将功能:将存储器中源存储器中源操作数地址的偏移量送到一个操作数地址的偏移量送到一个1616位寄位寄存器(除存器(除CSCS以外)以外)影响标志位:无影响标志位:无例:例:LEA AXLEA AX,2728H 2728H ;(;(AXAX)=2728H=2728H 比较比较 MOV AXMOV AX,2728H 2728H ;(;(DSDS:2728H2728H)AXAX LEA BXLEA BX,TABLETABLE 等效等效 MOV BXMOV BX,OFFSET TABLEOFFSET TABLE注意:注意:LEALEA指令和指令和MOVMOV指令的区别指令的区别例:例:MOV BXMOV BX,OFFSET 2728HOFFSET 2728H;错误;错误 电气学院学习部资料库30(2)LDS(2)LDS 将双字指针送到寄存器和将双字指针送到寄存器和DSDS指令指令格式:格式:LDS LDS 目的,源目的,源功能:从源操作数指定的存储单元中,取出功能:从源操作数指定的存储单元中,取出4 4字节内容,前字节内容,前2 2字节字节目的(多用目的(多用SISI),后),后2 2个字节个字节DSDS例:已知例:已知DS=1200HDS=1200H,(,(12450H12450H)=F346H=F346H,(,(12452H12452H)=0A90H=0A90H LDS SI LDS SI,0450H0450H;执行后,(执行后,(SISI)=F346H=F346H,(,(DSDS)=0A90H=0A90H(3)LES (3)LES 将双字指针送到寄存器和将双字指针送到寄存器和ESES指令指令格式:格式:LES LES 目的,源目的,源功能:从源操作数指定的存储单元中,取出功能:从源操作数指定的存储单元中,取出4 4字节内容,前字节内容,前2 2字节字节目的(多用目的(多用DIDI),后),后2 2字节字节ESES例:已知例:已知DS=1200HDS=1200H,(,(12450H12450H)=F346H=F346H,(,(12452H12452H)=0A90H=0A90H LES DI LES DI,0450H0450H;执行后,(执行后,(DIDI)=F346H=F346H,(,(ESES)=0A90H=0A90H电气学院学习部资料库31SFZFAFPFCF4、标志传送指令(1)(1)LAHF LAHF 标志送到标志送到AHAH指令指令 格式:格式:LAHF LAHF 功能:把功能:把PSWPSW低低8 8位取到位取到AHAH中中 影响标志位:无影响标志位:无(2)(2)SAHF AHSAHF AH送标志寄存器指令送标志寄存器指令 格式:格式:SAHFSAHF 功能:为功能:为LAHFLAHF的反操作,即将的反操作,即将AHAH的内容存入的内容存入PSWPSW低低8 8位位 影响标志位:影响标志位:SFSF、ZFZF、AFAF、PFPF、CFCF电气学院学习部资料库32(3)(3)标志入栈、出栈指令标志入栈、出栈指令 PUSHFPUSHF、POPFPOPF 格式:格式:PUSHF PUSHF、POPFPOPF 功能:功能:PUSHFPUSHF:PSWPSW内容入栈,内容入栈,SP-2 SP-2 SP SP POPF POPF:栈顶内容栈顶内容弹到弹到PSW PSW,SP+2 SP+2 SPSP (当前堆栈指针所指的一个字)(当前堆栈指针所指的一个字)用途:用途:v 成对使用,常用于子程序调用和中断服务子程序的开成对使用,常用于子程序调用和中断服务子程序的开头和结尾,对头和结尾,对PSWPSW保护和恢复保护和恢复v 用于修改用于修改TFTF电气学院学习部资料库33二、算术运算指令 (都影响标志位)(都影响标志位)1 1、加法指令、加法指令(1)(1)ADD ADCADD ADC格式:格式:ADD ADD 目的操作数,源操作数目的操作数,源操作数 ADC ADC功能:功能:ADDADD:源:源+目的目的 目的目的 ADCADC:源:源+目的目的+CF CF 目的目的注意:注意:v目的操作数和源操作数不能同时为存储器目的操作数和源操作数不能同时为存储器v目的操作数和源操作数类型必须一致,同为目的操作数和源操作数类型必须一致,同为字字或或字字节节例例1 1:ADD AXADD AX,1000H1000H;(;(AXAX)+1000H+1000H AX AX ADD AL ADD AL,12H12H ADC AL ADC AL,0AH0AH电气学院学习部资料库34例例2 2:假设一个四字节数:假设一个四字节数12346678H12346678H存于起始地址存于起始地址0100H0100H中,中,一个二字节数一个二字节数A567HA567H存于存于0200H0200H中,要求进行两数求和,并中,要求进行两数求和,并把结果存放于把结果存放于0300H0300H起始地址的内存中起始地址的内存中 MOV SIMOV SI,0100H 0100H ;把四字节数首地址;把四字节数首地址 SISI MOV BX MOV BX,0300H 0300H ;存放求和结果内存单元首地址;存放求和结果内存单元首地址 BXBX MOV AX MOV AX,SI SI ;把四字节数低;把四字节数低1616位位 AX AX ADD AX ADD AX,0200H 0200H ;二字节数;二字节数 +四字节数低四字节数低1616位位 MOV BX MOV BX,AX AX ;(;(AXAX)BXBX MOV AX MOV AX,SI+2 SI+2 ;高;高1616位位 AXAX ADC AX ADC AX,0000H 0000H ;(;(AXAX)+0000H+CF+0000H+CF AX AX MOV BX+2 MOV BX+2,AXAX 电气学院学习部资料库35(2)(2)增量指令增量指令INCINC格式:格式:INC INC 目的操作数目的操作数功能:目的功能:目的+1+1 目的目的例例1 1:INC AL INC AL ;(;(ALAL)+1+1 AL AL INC AX INC AX ;(;(AXAX)+1+1 AX AX注意:注意:v执行后影响执行后影响AFAF、OFOF、PFPF、SFSF、ZFZF,但不影响,但不影响CFCF例例2 2:INC AXINC AX;若;若AX=FFFFHAX=FFFFH,按正常情况,加,按正常情况,加1 1后,后,CF=1CF=1,按此规定不影响,按此规定不影响CFCFv 由于该指令只有一个操作数,如果操作数是内存单元,则由于该指令只有一个操作数,如果操作数是内存单元,则必须用伪指令进行类型说明必须用伪指令进行类型说明 伪指令格式:类型伪指令格式:类型 PTRPTR(类型说明符)(类型说明符)变量或地址表达式变量或地址表达式例例3 3:INC BYTE PTR BX+DI+500HINC BYTE PTR BX+DI+500H WORD PTR WORD PTR PWORD PTR PWORD PTR(定义一个四字节的内存空间存储一个数)(定义一个四字节的内存空间存储一个数)电气学院学习部资料库362 2、减法指令、减法指令(1)(1)SUBSUB,SBBSBB格式:格式:SUB SUB 目的,源目的,源 SBB SBB功能:功能:SUBSUB:目的:目的-源源目的目的 SBBSBB:目的:目的-源源-CFCF 目的目的 例:例:SUB AXSUB AX,2000H2000H SUB AL SUB AL,0ABH0ABH SBB AX SBB AX,2030H 2030H SBB WORD PTR DI+2 SBB WORD PTR DI+2,1000H1000H(2)(2)减量指令减量指令DECDEC格式:格式:DEC DEC 目的目的功能:目的功能:目的-1-1 目的,为目的,为INC INC 的反操作的反操作影响标志位,但不影响影响标志位,但不影响CFCF 例:例:DEC AXDEC AX DEC BYTE PTR BX DEC BYTE PTR BX电气学院学习部资料库37(3)(3)求补指令求补指令NEGNEG 格式:格式:NEG NEG 目的目的 功能:对目的操作数求补功能:对目的操作数求补目的(目的(0-0-目的目的目的目的)例:若(例:若(AXAX)=1234H=1234H,NEG AX NEG AX ;执行后,(;执行后,(AXAX)=EDCCH=EDCCH,CF=1CF=1 只有当目的操作数为只有当目的操作数为0 0,CF=0CF=0(4)(4)比较指令比较指令 CMPCMP 格式:格式:CMP CMP 目的,源目的,源 功能:目的功能:目的-源,源,只进行比较,不破坏两个操作数只进行比较,不破坏两个操作数 影响标志位:影响标志位:ZFZF、CFCF、SFSF、OFOF、PFPF、AFAFva a、目的、目的=源源 ,ZF=1ZF=1vb b、若目的、若目的源源 无符号数无符号数 CF=0 CF=0 目的目的 源源 CF=1 CF=1 目的目的 源源 SF SF OF=1OF=1(即(即SFSF、OFOF不同)不同)目的目的 99或半进位标志或半进位标志AF=1AF=1,则则ALAL AL+6 AL+6调整高半字节:上步调整后,若调整高半字节:上步调整后,若ALAL中高中高4 4位位99或或CF=1CF=1,则则ALALAL+60HAL+60H,并使,并使CF=1CF=1,否则,否则CF=0CF=0AAAAAA调整规则:调整规则:若若ALAL中低四位中低四位99或或AF=1AF=1 AL+6 AL+6 AL AL用与操作(用与操作()将)将ALAL高高4 4位清位清0 0AF=1AF=1,CF=1CF=1,AH+1 AH+1 AH AH电气学院学习部资料库44例:编一段程序实现组合例:编一段程序实现组合BCDBCD相加指令,结果送入相加指令,结果送入BXBX 1945 1271 3216程序:程序:45+71组合组合BCD码调整码调整结果送结果送BL取取1945高高8位位高高8位位 19+12+CF 组合组合BCD码调整码调整结果送结果送BH取取1945低低8位位电气学院学习部资料库45MOV ALMOV AL,45H 0100 0101 45H45H 0100 0101 45HADD ALADD AL,71H71H;(;(ALAL)=0B6H AF=0 CF=0 +0111 0001 71H=0B6H AF=0 CF=0 +0111 0001 71HDAA DAA ;(;(ALAL)=16H=16H,CF=1 1011 0110 CF=1 1011 0110 MOV BLMOV BL,AL +0110 AL +0110 调整调整MOV ALMOV AL,19H 1,0001 0110 19H 1,0001 0110(BLBL)=16H=16HADADC C AL AL,12H12H;(;(ALAL)=2CH=2CH AF=0AF=0 CF=0 CF=0 DAA DAA ;(;(ALAL)=32H=32H,CF=0CF=0MOV BHMOV BH,AL AL ;(;(BXBX)=3216H=3216H 0001 1001 19H 0001 1001 19H 0001 0010 12H 0001 0010 12H +1 CF +1 CF 0010 1100 0010 1100 +0110 +0110 调整调整 0011 0010 0011 0010 (BHBH)=32H=32H电气学院学习部资料库46减法的十进制调整指令减法的十进制调整指令 DASDAS:用于调整组合:用于调整组合BCDBCD码码 AASAAS:用于调整非组合:用于调整非组合BCDBCD码码乘法的十进制调整指令乘法的十进制调整指令 AAM AAM:用于调整:用于调整非压缩非压缩十进制数十进制数除法的十进制调整指令除法的十进制调整指令 AADAAD:用于调整:用于调整非压缩非压缩十进制数,在除法指令之前,把非压十进制数,在除法指令之前,把非压缩缩BCDBCD数转换成二进制数数转换成二进制数80868086中乘除运算不允许采用压缩中乘除运算不允许采用压缩BCDBCD数,必须先化为非压缩数,必须先化为非压缩BCDBCD数数电气学院学习部资料库47三、串操作指令三、串操作指令1 1、字符串传送指令、字符串传送指令 MOVSB/MOVSWMOVSB/MOVSWv格式:格式:REP MOVSBREP MOVSB MOVSW MOVSWv功能:把功能:把DSDS:SISI指出的源串指出的源串 ESES:DIDI指出的目的串中,指出的目的串中,且自动修改指针且自动修改指针SISI、DIDIv不影响标志位不影响标志位DF=0DF=1字节操作字节操作+1-1字操作字操作+2-2电气学院学习部资料库48例:编一段程序,实现把起始地址为例:编一段程序,实现把起始地址为1000H1000H,长度为,长度为100100个字个字节的数据送到起始地址为节的数据送到起始地址为2000H2000H的存储单元中的存储单元中 MOV SI MOV SI,1000H1000H MOV DI MOV DI,2000H2000H MOV CX MOV CX,100 100 ;CXCX作串长度计数器,作串长度计数器,只能用只能用CXCX CLDCLD ;DF=0DF=0,地址增量(存储数据存储器地址方向增加,地址增量(存储数据存储器地址方向增加)REP MOVSB REP MOVSB ;DSDS:SI ESSI ES:DIDI SI+1 SI SI+1 SI,DI+1 DIDI+1 DI CX-1 CX-1 CX CX (当有加前缀(当有加前缀REPREP时执行,重复传送串中的字节,直到时执行,重复传送串中的字节,直到CX=0CX=0为止为止 )电气学院学习部资料库492 2、字符串比较指令、字符串比较指令 CMPSB/CMPSWCMPSB/CMPSWv格式:格式:REPZREPZREPNZ CMPSBREPNZ CMPSB CMPSW CMPSWv功能:把功能:把DSDS:SISI与与ESES:DIDI指出的字符串进行比较,且自动指出的字符串进行比较,且自动修改指针修改指针SISI、DIDIv影响标志位:影响标志位:ZFZF、CFCF、OFOF、SFSFv比较指令,退出循环,有两个可能比较指令,退出循环,有两个可能 不满足循环条件不满足循环条件 计数器计数器CX=0CX=0 REPZ REPZ :ZF=1&CX0ZF=1&CX0 循环条件循环条件 REPNZ REPNZ:ZF=0&CX0ZF=0&CX0电气学院学习部资料库50例:编程,从两个字符串中找出第一个不相同的字符例:编程,从两个字符串中找出第一个不相同的字符 STRING1 DB STRING1 DB ABCDEFABCDEF STRING2 DB STRING2 DB ABCDKFABCDKF ;定义两个字符串;定义两个字符串 MOV SI MOV SI,OFFSET STRING1 OFFSET STRING1;等效;等效 LEA SILEA SI,STRING1STRING1 MOV DI MOV DI,OFFSET STRING2OFFSET STRING2 MOV CX MOV CX,6 6 CLD CLD REPZREPZ CMPSB CMPSB ;循环条件;循环条件ZF=1ZF=1,若,若ZF=0ZF=0退出循环,找到退出循环,找到第一个不相同的字符第一个不相同的字符 电气学院学习部资料库51例:编程:比较两个字符串,第一个是你在程序中例:编程:比较两个字符串,第一个是你在程序中设定的口令串,第二个是从键盘输入的字符串设定的口令串,第二个是从键盘输入的字符串IN_WORDIN_WORD,若两者相同,程序将开始执行,否则,若两者相同,程序将开始执行,否则驱动驱动PCPC机的扬声器发声警告,并拒绝往下执行。机的扬声器发声警告,并拒绝往下执行。DATA SEGMENTDATA SEGMENTPASSWORD DB 750430LIPASSWORD DB 750430LIIN_WORD DB 7504IN_WORD DB 75042424L LE ECOUNT EQU 8COUNT EQU 8DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME DS:DATA,ES:DATAASSUME DS:DATA,ES:DATA MOV SI MOV SI,OFFSET PASSWORD OFFSET PASSWORD;等效;等效 LEA SILEA SI,PASSWORD PASSWORD MOV DI MOV DI,OFFSET IN_WORD OFFSET IN_WORD MOV CX,COUNT MOV CX,COUNT CLD CLD REPZ CMPSB REPZ CMPSB ;循环条件;循环条件ZF=1JZF=1J及及 CX0 CX0。若。若ZF=0ZF=0,退出循环,退出循环 JNE SOUNDJNE SOUND ;若不相等,转发声程序;若不相等,转发声程序OKOK:;比完且相等,往下执行;比完且相等,往下执行SOUNDSOUND:CODE ENDSCODE ENDSPASSWORDSIPASSWORDSIIN_WORDDIIN_WORDDI计数值计数值CXCX(SI)=(DI)?SI+1SIDI+1DI CX-1CXCX=0?字符串相字符串相等?等?ZF=1?SOUNDOKNYYNYN电气学院学习部资料库523 3、字符串检索指令、字符串检索指令 SCASBSCASBSCASWSCASWv格式:格式:REPZREPZREPNZ SCASBREPNZ SCASB SCASW SCASWv功能:从功能:从ESES:DIDI字符串中查找与字符串中查找与ALAL、AXAX不同或相同的不同或相同的字符;同时自动修改字符;同时自动修改DIDIv影响标志位影响标志位自学例自学例3 37777电气学院学习部资料库53例:编程,实现某一数由格例:编程,实现某一数由格雷码转换为雷码转换为ASCASC码码假设:假设:ASCASC码存于表码存于表T1T1中,中,格雷码存于表格雷码存于表T2T2中,中,ALAL中中为需要转换的数的格雷码为需要转换的数的格雷码格雷码格雷码ASC码码0000030H1000131H2001132H3001033H4011034H5011135H6010136H7010037H8110038H9110139H电气学院学习部资料库54取表取表T1T1首地址到首地址到BX BX*确定需转换的格雷码某数相对于表确定需转换的格雷码某数相对于表T1T1首首地址的偏移量地址的偏移量 ALAL(采用(采用SCASBSCASB指令指令)执行执行XLATXLAT指令指令 格雷码的表首地址入格雷码的表首地址入DIDI 确定检索字符个数(循环次数)确定检索字符个数(循环次数)设定地址为增量设定地址为增量 字符串检索,并求出转换数的偏移量字符串检索,并求出转换数的偏移量 电气学院学习部资料库55T1 DB 30HT1 DB 30H,31H31H,32H32H,33H33H,34H34H,35H35H,36H36H,37H37H,38H38H,39H39HT2 DB 00HT2 DB 00H,01H01H,03H03H,02H02H,06H06H,07H07H,05H05H,04H04H,0CH0CH,0DH0DHMOV BXMOV BX,offset T1offset T1MOV DI,offset T2 ;MOV DI,offset T2 ;表表T2T2首地址首地址DIDIMOV CXMOV CX,0AH 0AH ;确定检索字符个数;确定检索字符个数CLD CLD ;DF=0DF=0,地址增量,地址增量 REPNZ SCASB REPNZ SCASB ;不相等,循环;相等则退出。;不相等,循环;相等则退出。MOV AXMOV AX,DIDIMOV DIMOV DI,offset T2offset T2SUB AXSUB AX,DI DI ;(;(ALAL)=偏移量偏移量XLAT T1XLAT T1电气学院学习部资料库564 4、取字符串指令、取字符串指令 LODSBLODSBLODSWLODSWv格式:格式:LODSBLODSBLODSWLODSWv功能:把功能:把DSDS:SISI指出的字符串取到指出的字符串取到AL AL 或或AXAX,同时修改,同时修改SISIv不影响标志位,该指令无重复前缀不影响标志位,该指令无重复前缀例:编程实现将例:编程实现将0700H0700H开始开始5 5个字节内容逐一取出,经过一定处个字节内容逐一取出,经过一定处理,结果回送理,结果回送 MOV SIMOV SI,0700H0700H MOV CX MOV CX,5 5 CLD CLDLILI:LODSB LODSB ;DSDS:SI ALSI AL,(,(SI+1SI+1)SISI DEC CXDEC CX ;由于取字符串指令;由于取字符串指令LODSBLODSB无前缀无前缀Repeat,Repeat,所以必须手动设置所以必须手动设置-1-1 MOV MOV SISI1 1,ALAL JNZ LI JNZ LI电气学院学习部资料库575 5存字符串指令存字符串指令 STOSBSTOSBSTOSWSTOSWv 格式:格式:REP STOSBREP STOSBSTOSWSTOSWv 功能:把功能:把ALAL,AXAX值值 ESES:DIDI,同时修改,同时修改DIDI 例:将例:将0100H0100H开始的开始的256256个内存字节单元清零个内存字节单元清零 MOV DIMOV DI,0100H0100H MOV CX MOV CX,256256 CLD CLD MOV AL MOV AL,0 0 REP STOSB REP STOSB ;存数据,;存数据,DI+1 DI+1 DI DI CX-1 CX-1 CX CX电气学院学习部资料库58四、逻辑运算与移位指令四、逻辑运算与移位指令1 1、逻辑运算:、逻辑运算:ANDAND、OROR、XORXOR、NOTNOT、TESTTEST 格式:格式:ANDAND OR OR 目的,源目的,源 XORXOR NOT NOT 目的目的功能:将目的与源功能:将目的与源按位按位逻辑操作,结果回送目的逻辑操作,结果回送目的影响标志位(除影响标志位(除NOTNOT指令外)指令外)格式:格式:TEST TEST 目的,源目的,源 测试指令测试指令功能:目的与源按位与,功能:目的与源按位与,但结果不回送目的但结果不回送目的,仅影响标志位,仅影响标志位(与(与CMPCMP指令相似)指令相似),一般都是和后面的控制转移指令相结一般都是和后面的控制转移指令相结合使用合使用 TEST ALTEST AL,80H 80H ;若;若D7=0D7=0,ZF=1ZF=1;D7=1D7=1,ZF=0ZF=0 电气学院学习部资料库59 执行指令前执行指令前 执行指令后执行指令后1.AND AL,0FH ;(AL)=3AH (AL)=0AH 用于高四位清零(屏蔽),低四位保留用于高四位清零(屏蔽),低四位保留2.AND AX,1000H;(AX)=3234H (AX)=1000H3.OR AL,0FH ;(;(AL)=3AH (AL)=3FH 用于高四位保留,低四位置用于高四位保留,低四位置1 14.OR AX,1000H ;(AX)=2234H (AX)=3234H 0011 1010 0011 0010 0011 0100 0011 0101 x 0000 1111 x 0001 0000 0000 0000 +0000 1111 0000 1010 0001 0000 0000 0000 0011 1111电气学院学习部资料库605.XOR AX,AX ;(;(AX)=任意任意 (AX)=0000H 用于某一单元清零用于某一单元清零6.XOR AL,0FH ;(;(AL)=0AH (AL)=05H 用于某些位保留(和用于某些位保留(和0 0相异或),某些位取反(和相异或),某些位取反(和1 1相异或)相异或)7.NOT AL ;(;(AL)=0FFH;(AL)=00H8.NOT AX ;(;(AX
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!