1、微机原理与应用教学资料第三章(课件)2 v3-1 80863-1 8086寻址方式寻址方式指令:操作码:给出此指令应完成何种操作。告诉计算机指令:操作码:给出此指令应完成何种操作。告诉计算机 做什么做什么 操作数:该指令的操作对象。告诉计算机对谁做操作数:该指令的操作对象。告诉计算机对谁做指令格式:操作码指令格式:操作码 目的操作数,源操作数目的操作数,源操作数 源操作数:数据从何而来。操作过程中原值不变。源操作数:数据从何而来。操作过程中原值不变。目的操作数:送到哪里去。操作数原值不保留。目的操作数:送到哪里去。操作数原值不保留。寻址方式:说明操作数所在地址的方法。寻址方式:说明操作数所在地
2、址的方法。操作数来源:操作数来源:指令指令 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 *加上(加上(),表示取寄存器或内存单元的内容),表示取寄存器或内存单元的内容 一般用
3、于赋值。源操作数和目的操作数字长一般用于赋值。源操作数和目的操作数字长应相同应相同 立即数只能做源操作数,不能做目的操作数立即数只能做源操作数,不能做目的操作数 若是以字母打头的数,例:若是以字母打头的数,例:A0HA0H在编程中必须在编程中必须表示为表示为0A0H0A0H电气学院学习部资料库4v二、寄存器寻址二、寄存器寻址操作数在寄存器中,不必执行总线周期,执行速度快操作数在寄存器中,不必执行总线周期,执行速度快例例1 1:INC AL INC AL;(;(ALAL)+1AL+1AL,若(,若(ALAL)=86H=86H,指令执行完,指令执行完(ALAL)=87H=87H例例2 2:MOV
4、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,BPB
5、P 8 8位操作数:位操作数:AHAH,ALAL,BHBH,BLBL,CHCH,CLCL,DHDH,DLDL从第三种开始,指令的操作数都在内存中,须用不同的方法求出操作数的从第三种开始,指令的操作数都在内存中,须用不同的方法求出操作数的物理地址,来获得操作数。物理地址,来获得操作数。电气学院学习部资料库5v三、直接寻址三、直接寻址 指令中直接给出操作数的有效地址指令中直接给出操作数的有效地址EAEA,操作数在内存中,操作数在内存中,需执行总线周期需执行总线周期 有效地址有效地址EAEA:操作数的偏移地址:操作数的偏移地址 物理地址物理地址=段地址段地址*16+EA16+EA默认段地址为默认段地
6、址为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=1
7、200H 电气学院学习部资料库6 一个字在存储体中相邻的两个字节存放,字单元的地址以一个字在存储体中相邻的两个字节存放,字单元的地址以低位地址表示,存入时以低位字节在低地址,高位字节在低位地址表示,存入时以低位字节在低地址,高位字节在高地址高地址段超越前缀段超越前缀:若段地址为若段地址为CSCS、SSSS、ESES,应在指令中指定段超,应在指令中指定段超越前缀越前缀 例:例:MOV AXMOV AX,ESES:1064H1064H;将;将ESES段中段中1064H1064H的内容的内容AXAX ES ES:MOV AXMOV AX,1064H 1064H 符号地址符号地址(给存储单元起一名字,
8、变量名)(给存储单元起一名字,变量名)例:例:MOV AXMOV AX,AREA1AREA1;从符号地址为从符号地址为AREA1AREA1的存储单元中取的存储单元中取一个字一个字 AXAX 符号地址也允许段超越符号地址也允许段超越电气学院学习部资料库7v四、寄存器间接寻址四、寄存器间接寻址 指令中通过寄存器给出有效地址指令中通过寄存器给出有效地址EA EA,寄存器中为地址,操,寄存器中为地址,操作数在内存中,需执行总线周期作数在内存中,需执行总线周期可以用于寄存器间接寻址的寄存器有:可以用于寄存器间接寻址的寄存器有:SISI、DIDI,BXBX、BPBP 变址寄存器变址寄存器 基址寄存器基址寄
9、存器 寄存器名称外面必须加寄存器名称外面必须加 (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:B
10、PDS: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
11、例:例: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
12、 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,B
13、P+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
14、: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 八、其它八、其它 隐含寻
15、址隐含寻址 例:例: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 M
16、OV 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
17、间接寻址间接寻址 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的传送(
18、参见图的传送(参见图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立即数只能做源操作数,且不能被直接送进段寄存器立即数只能做源操作数,且不能被直接送进
19、段寄存器vIPIP寄存器不能用作源操作数,亦不能做目的操作数寄存器不能用作源操作数,亦不能做目的操作数vCSCS寄存器不能作目的操作数寄存器不能作目的操作数v不能在两个内存单元,或两个段寄存器之间直接传送数不能在两个内存单元,或两个段寄存器之间直接传送数据据v指令中至少要有一项操作数明确说明传送的是字节还是指令中至少要有一项操作数明确说明传送的是字节还是字字电气学院学习部资料库16DATA SEGMENTDATA SEGMENT AREA1 DB 14HAREA1 DB 14H,3BH3BH;变量名;变量名 助记符助记符 AREA2 DB 3 DUPAREA2 DB 3 DUP(0 0);重复
20、;重复3 3个个0 0存入存入AREA2AREA2起始的储存单元起始的储存单元 ARRAY DW 3100HARRAY DW 3100H,01A6H01A6H STRING DB STRING DB GOODGOODDATA ENDSDATA ENDSDOOG01HA6H31H00H00H00H00H3BH14HARRAYARRAYSTRINGSTRINGAREA1AREA1AREA2AREA2DATADATA:0000H0000HDATADATA:0002H0002HDATADATA:0005H0005HD DATAATA:0009H0009H段定义符段定义符电气学院学习部资料库17说明:说
21、明: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.A
22、REA1AREA1:变量名,将此变量的助记符后的第一个字节的偏:变量名,将此变量的助记符后的第一个字节的偏移地址作为它的符号地址移地址作为它的符号地址例:例: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 PUS
23、H 将源操作数压到堆栈中,将源操作数压到堆栈中,POPPOP将堆栈中数据弹出将堆栈中数据弹出到目的操作数到目的操作数 受影响的标志位:无受影响的标志位:无 说明:说明:v按按“字字”操作操作,源操作数可以是,源操作数可以是1616位通用寄存器,段寄存位通用寄存器,段寄存器或存储器中的数据字器或存储器中的数据字 PUSH PUSH:(:(SPSP)-2-2 SPSP,POPPOP:(:(SPSP)+2+2 SPSP 操作数不能是立即数操作数不能是立即数 例:例:PUSH 1000HPUSH 1000H;错误;错误v堆栈操作原则:堆栈操作原则:先进后出先进后出v SPSP始终指向栈顶,且总是指向偶
24、地址单元,其值可以从始终指向栈顶,且总是指向偶地址单元,其值可以从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)=C000
25、H=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
26、 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电气学院学习
27、部资料库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 1000HX
28、CHG 1000H,BXBX;错误;错误电气学院学习部资料库24(4)(4)换码指令换码指令XLATXLAT 格式:格式:XLAT XLAT 转换表转换表 或或XLATXLAT 功能:将一个字节从一种代码转换为另一种代码,结果自功能:将一个字节从一种代码转换为另一种代码,结果自动送入动送入ALAL中中 影响标志位:无影响标志位:无 执行以下操作:执行以下操作:先建立一个表格(在先建立一个表格(在DSDS段中),将转换表的起始偏移地址段中),将转换表的起始偏移地址BXBX将表中某一项(所要查找的)与表首地址之间的位移量将表中某一项(所要查找的)与表首地址之间的位移量 ALALXLATXLAT指令
29、执行时,指令执行时,CPUCPU会将会将BXBX和和ALAL中的值相加,将得到的中的值相加,将得到的值作为地址,然后将此地址所对应的单元中的值取到值作为地址,然后将此地址所对应的单元中的值取到ALAL中中即:即:BX+AL BX+AL ALAL电气学院学习部资料库25例:要求将例:要求将3 3从十进制数转换成相应的字型代码从十进制数转换成相应的字型代码ASC码码十进制数十进制数BCD码码字型代码字型代码30H00000B40H31H10001B79H32H20010B24H33H30011B30H34H40100B19H35H50101B12H36H60110B02H37H70111B78H3
30、8H81000B00H39H91001B18H电气学院学习部资料库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,
31、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端口内容端口
32、内容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
33、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
34、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 目的,源目的,源功能:从源操作数指定的存储单元中,取出功能:从源操作数指定
35、的存储单元中,取出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 目的,源目的,源功能:从源操作数指定的存储单
36、元中,取出功能:从源操作数指定的存储单元中,取出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指令指令 格式:格
37、式: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 功能:功能:PUSHFP
38、USHF: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 目的操作数,源操作数
39、目的操作数,源操作数 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:假设一个四字节数:假设一个四字节数123466
40、78H12346678H存于起始地址存于起始地址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
41、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
42、;(;(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(类型
43、说明符)(类型说明符)变量或地址表达式变量或地址表达式例例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,20
44、00H2000H 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
45、 目的目的 功能:对目的操作数求补功能:对目的操作数求补目的(目的(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、目的、目的=源源
46、,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 A
47、L 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 ALA
48、DD 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 ;(;(A
49、LAL)=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码码乘法的十进制调
50、整指令乘法的十进制调整指令 AAM AAM:用于调整:用于调整非压缩非压缩十进制数十进制数除法的十进制调整指令除法的十进制调整指令 AADAAD:用于调整:用于调整非压缩非压缩十进制数,在除法指令之前,把非压十进制数,在除法指令之前,把非压缩缩BCDBCD数转换成二进制数数转换成二进制数80868086中乘除运算不允许采用压缩中乘除运算不允许采用压缩BCDBCD数,必须先化为非压缩数,必须先化为非压缩BCDBCD数数电气学院学习部资料库47三、串操作指令三、串操作指令1 1、字符串传送指令、字符串传送指令 MOVSB/MOVSWMOVSB/MOVSWv格式:格式:REP MOVSBREP MO
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。