8086指令整理v0.95

合集下载

8086指令表

8086指令表

8086指令表表2-2算术运算指令表2-4 串操作指令表2-5程序转移指令表2-7串操作指令中寄存器和标志位的⽤途1.设BL=0FFH,执⾏指令“SAR BL , 1”后,BL中的内容是(0FFH)。

2.设SP=1300H,AX=200H,执⾏指令“POP AX”后,SP寄存器的内容为(1302H)。

3.⼗进制数的-1的8位⼆进制补码,⽤⼗六进制数表⽰是(D)A.01HB.8FHC.0FEHD.0FFHMOV⽤法总结⾮法操作:1.两个操作数都是存储器操作数2.src是⽴即数,dest是段寄存器3.两个操作数都是段寄存器MOV指令⽤法的举例:MOV AX , CX ;段寄存器⾄通⽤寄存器MOV AL , 125 ;⽴即数⾄寄存器MOV MEM , 15 ;⽴即数⾄存储器,直接寻址MOV SI , BX ;寄存器⾄寄存器MOV DS , AX ;通⽤寄存器⾄段寄存器(CS不⾏)MOV [BX] , 50H ;⽴即数⾄存储器,寄存器间接寻址MOV MEM , AX ;寄存器⾄存储器,直接寻址MOV MEM , DS ;段寄存器⾄存储器,直接寻址MOV ISP[BX] , CX ;寄存器⾄存储器,基址寻址MOV AX , DISP[SI] ;存储器⾄寄存器,变址寻址MOV DS , MEM ;存储器⾄段寄存器,直接寻址MOV AX , DISP[BX] [SI] ;存储器⾄寄存器,基址变址寻址标志位1.CF:进位标志位。

当进⾏加法或减法运算时,最⾼位发⽣进位或借位,CF=1;否则,CF=0。

2.PF:奇偶标志位。

当运算结果的最低有效字节中“1”的个数为偶数时,PF=1;为奇数时,CF=0。

3.AF:辅助进位位。

在减法或加法操作中,低4位向⾼4位有进位、借位发⽣时,AF=1;否则,AF=0。

4.ZF:零标志位。

ZF=1表⽰运算结果为零;否则ZF=0。

5.SF:符号标志位。

SF=1表⽰运算结果的最⾼位为1(即为负数);否则SF=0。

8086指令学习笔记

8086指令学习笔记

8086指令学习笔记⼀、8086CPU中的寄存器8086CPU中有14个16位的寄存器,按⽤途分为4类1.数据寄存器AX AH AL累加器常⽤于运算BX BH BL基址寄存器常⽤于地址索引CX CH CL计数(寄存)器常⽤于计数DX DH DL数据寄存器常⽤于数据传递AX,AH,ALAX是16位寄存器,AH是AX的⾼8位,AL是AX的低8位AX是EAX的低16位2.段寄存器组CS代码段寄存器DS数据段寄存器SS堆栈寄存器ES附加段寄存器3.其他寄存器组IP指令指⽰器指令指针寄存器,与CS配合使⽤,可跟踪程序的执⾏过程;IF标志寄存器4.指针和变址寄存器SP堆栈指⽰器堆栈指针,与SS配合使⽤,可指向⽬前的堆栈位置BP基址指⽰器基址指针寄存器,可⽤作SS的⼀个相对基址位置SI源变址寄存器源变址寄存器可⽤来存放相对于DS段之源变址指针DI⽬的变址寄存器⽬的变址寄存器,可⽤来存放相对于 ES 段之⽬的变址指针⼆、8086的指令寻址⽅式⽴即寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址基址变址相对寻址隐含寻址三、8086的指令系统数据传送指令Ⅰ. 通⽤指令1.MOV指令数据传送由“源-> ⽬的地”MOV AX, BX ;寄存器寻址MOV DL, AL ;寄存器寻址MOV AX, 02 ;源操作数⽤⽴即寻址MOV SI, [BX] ;源操作数寄存器间接寻址MOV AL, 4[DI] ;源操作数寄存器相对寻址MOV AX, [BX+2] ;源操作数寄存器相对寻址MOV [BX][DI],DX ;⽬的操作数⽤基址加变址寻址2.堆栈指令⼊栈指令: PUSH出栈指令:POP3.字节或字交换指令:XCHG寄存器之间或寄存器与存储器之间内容交换xchg ax,cx4.字节转换指令 XLATXLAT [转换表]常⽤于查表Ⅱ.I/O指令1.⼋位数据的I/O指令输⼊IN AL, PORT ;输⼊ port表⽰某⼀个具体的I/O端⼝地址输出OUT PORT, AL2.⼗六位数据的I/O指令输⼊IN AX, PORT输出OUT PORT, AXⅢ.地址⽬标传送指令LEA: 有效地址传送指令LDS: 双字指针送寄存器和DS指令LES: 双字指针送寄存器和ES指令1.LEA将源操作数的偏移地址送到⽬的操作数中LEA CX,[2000H];执⾏结果CX=2000H;若SI=1000H,BX=2000HLEA DX,[SI+BX]; 执⾏结果为DX=3000H2.LDS传送⼀个32位的远地址指针,其中包括⼀个便宜地址和⼀个段地址,前者送寄存器,后者送DS.;设:DS=C000H,有关存储单元内容为;(C0010H)=80H;(C0011H)=01H;(C0012H)=00H;(C0013H)=20HLDS SI,[0010H];执⾏后SI=0180H,DS=2000H3.LES传送⼀个32位的远地址指针,其中包括⼀个便宜地址和⼀个段地址,前者送寄存器,后者送ES.;设:DS=B000H,BX=080AH有关存储单元内容为;(B080AH)=A2H;(B080BH)=05H;(B080CH)=00H;(B080DH)=40HLES DI,[BX];执⾏后DI=05A2H,ES=4000HⅣ.标志传送指令LAHF:标志送AH指令SAHF: AH送标志寄存器指令PUSHF:标志⼊栈指令POPF:标志出栈指令算术运算类指令1.加法与减法指令ADD DST,SRC; DST <- DST+SRCADC DST,SRC; DST <- DST+SRC+CFSUB DST,SRC; DST <- DST-SRCSBB DST,SRC; DST <- DST-SRC-CFNEG DST ; 0-DST,即取补2.⽐较指令CMP AX,BX;; ⽐较后 ZF=1,则AX=BX; ZF =0,则AX不等于BX3.增量指令INC DST; DST+1 -> DSTDEC DST; DST-1 -> DST4.乘法与除法指令IMUL SRC;符号数的乘法;字节运算时,ALXSRC->AX;字运算时,AX x SRC -> DX与AXMUL SRC; ⽆符号数的乘法,其他同上IDIV SRC;符号数除法;字节运算时:AX/SRC的商 -> AL; AX/SRC的余数-> AH ;字运算时: DX/SRC的商 -> AX; DX/SRC的余数-> DX DIV SRC; 符号数除法,其他同上位操作指令1.逻辑运算类指令AND DST,SRC ; DST^SRC -> DST,清CF、OF;根据结果置SF、ZF、PF,标志AF不定OR DST,SRT ;或, 标志位设置同上XOR DST,SRT ;异或, 标志位设置同上TEST DST,SRT;DST^SRC,仅设置标志位, 标志位设置同上NOT DST ;取反, 不影响标志位2.移位指令SHR DST,CNT; 逻辑右移SHL/SAL DST,CNT;逻辑/算数左移SAR DST,CNT;算数右移3.循环移位指令ROR DST,CNT; 循环右移ROL DST,CNT; 循环左移RCR DST,CNT; 带进位循环右移RCL DST,CNT; 带进位循环左移串操作指令串传送MOVSW ;字传送:SI+(-)2->SI,DI+(-)2->DIMOVSB ;字节传送:SI+(-)1->SI,DI+(-)1->DI串⽐较CMPSW ;字⽐较:SI+(-)2->SI,DI+(-)2->DICMPSB ;字节⽐较:SI+(-)1->SI,DI+(-)1->DI串扫描SCASW ;字扫描: AX-(ES:DI),DI+(-)2->DISCASB ;字节扫描:AL-(ES:DI),DI+(-)1->DI串取出LODSW ;字取出: (DS:SI) -> AX,SI+(-)2->SILODSB ;字节取出: (DS:SI) -> AL,SI+(-)1->SI串存储STOSW ;字存储: AX -> (ES:DI),DI+(-)2->DISTOSB ;字节存储: AL -> (ES:DI),DI+(-)1->DI控制转移指令1.⽆条件转移、电泳和返回指令⽆条件转移指令JMPJMP OPRD ;OPRD时转移的⽬的地址调⽤和返回CALL 来电泳⼀个过程或⼦程序CALL NEAR PTR OPRD;段内调⽤CALL FAR PTR OPRD ;段间调⽤2.条件转移指令3.循环控制指令标志处理和CPU控制1.标志处理指令指令助记符功能指令名称STC CF <- 1进位标志置1CLC CF <- 0进位标志置0CMC CF <-进位标志取反STD DF <- 1⽅向标志置1 (地址减量)SLD DF <- 0⽅向标志置0 (地址增量) STI IF <- 1中断允许标志置1 (开中断) CLI IF <- 0中断允许标志置0 (关中断)2.外部同步指令ESC指令等待指令WAIT封锁总线指令LOCK。

8086汇编指令大全.

8086汇编指令大全.
不影响标志位
不允许寄存器或存储单元到除CS外的段寄存器
2入栈(出栈指令PUSH (POP
注意:
PUSH操作数不能是“立即数” POP操作数不能是段寄存器
CS
不影响标志位
先进后出
单操作符
3交换指令XCHG
注意:
只允许寄存器与存储单元之间的交换
不影响标志位
4换码指令XLAT
5地址传送指令LEA :偏移地址
ZF=0
SF符号标志位
OF溢出标志位
DF方向标志位
IF中断允许位IF=1时响应外部中断
TF跟踪标志位
操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式:
1寄存器寻址例:INC AX ; MOV AX , BX
2寄存器间接寻址(寄存器只能是BX , DI , SI , BP ; [PA=(BX、DI、SI +DS》4或BP+SS》4]
6数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI、高地址的字
送DS
7附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI、高
地址送ES
上三指令不影响标志位
8标志寄存器传送指令
LAHF :标志寄存器低八位送
AH
SAHF :AH送标志寄存器低八位
PUSHF :标志寄存器压入堆栈
标志寄存器:9个有效位,分6个状态寄存器和3个控制寄存器
CF当执行一个加法(减法使最高位产生进位(借位时CF=1否则
CF=0
PF指令执行的结果低8位有偶数个一时, CF=1否则
CF=0
AF当执行一个加法(减法使运算结果低4位向高4位有进位(借位时AF=1否则

8086的汇编超级浓缩教程

8086的汇编超级浓缩教程

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。

”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。

)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。

三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%& “醒醒!”对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。

所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。

某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。

为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。

但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。

大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解)因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提)CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。

8086指令

8086指令

8086指令1.数据传送指令
(1)通用传送指令
(2)累加器专用传送指令
(3)地址传送指令
2.算术运算指令
(2)减法指令
(5)符号扩展指令
(6)十进制调整指令
3.逻辑运算和移位指令(1)逻辑运算指令
(2)移位指令
注:OPR不能为立即数和段寄存器,若CNT大于1,应先将CNT存入CL寄存器中,移位指令中CNT写为CL即可。

4.串操作指令
(1)重复前缀指令
(2)串传送指令
(3)串比较指令
5.控制转移指令
(1)无条件转移指令
(2)条件转移指令
①简单条件转移指令(根据某一标志位的值决定是否有转移,测试的标志位有S、Z、C、P、O 5个,每个标志位可能取“0”和“1”,共10条)
②无符号数比较条件转移指令
③有符号数比较条件转移指令
④测试CX的值为0则转移的指令
(3)子程序调用和返回指令
(4)循环控制指令
(5)中断指令
6.处理机控制指令
(2)其他处理机控制指令
7.伪指令
(1)数据定义伪指令
(2)分析运算符
(3)属性操作符
(4)符号定义指令
(5)地址计数器与对准伪操作
(6)宏与过程(子程序)的定义和调用。

8086常用指令表

8086常用指令表

8086/8088常用助记符指令类型助记符目的源功能注释数据传送MOV X X 把数据从源操作数传送到目的操作数1.两个操作数不能同时为内存操作数,也不能同时为立即数,目的操作数不能为立即数2两个操作数的类型须一致3立即数不能直接传入段寄存器4CS,IP不能作目的操作数5段寄存器之间不能直接传送PUSH X把指定的寄存器/内存单元的内容压入堆栈1.按字操作,CS能入栈内存不能直接寻址.P-2→SP,再写入栈顶POP X从栈顶弹出一字到指定的寄存器/内存单元1.同上2.先弹出一字,再SP-2→SP XCHG 寄寄/内两操作数互换内容不能用立即数和段寄存器XCHG 寄指定寄存器同累加器互换内容IN AC 端口号从指定端口送数到AL端口号为立即数,地址为8位端口号在DX中,地址为16位OUT 端口号 AL从AL送数到指定端口LEA 寄内存LDS 寄内存LES 寄内存把内存偏址送指定寄存器把内存低2字节送寄存器,高2字节送DS(ES)只能用通用寄存器,不能用段寄存器LAHF把标寄低8位送AHSAHF把AH送标寄低8位PUSHF标寄入栈POPF栈顶弹出进标寄算术运算ADD X X加法(和送目的操作数)加减1.2.同MOV3.段寄存器不能作操作数4.调正在AL中进行,并必需紧跟在运算之后执行.5.比较运算同减法,结果不存,而仅影响标志寄存器6.乘除法的目的操作数隐含是ACAL*乘数→AX, AX*乘数→DX AX,AX/除数→AL, 余数在AH中DXAX/除数→AX, 余数在DX中7.加1减1指令把操作数当无符号数,其他加减指令是否为有符号数要由程序设计需要设定ADC X X带进位加法INC X 指定的寄/内的内容加1AAA分离BCD码调正(AL)DAA组合BCD码调正(AL)SUB X X减法SBB X X带借位减法DEC X指定的寄/内的内容减1NEG X指定的寄/内的内容求补CMP X X 比较AAS分离BCD码调正(AL)DAS组合BCD码调正(AL)MUL 寄/内不带符号乘法IMUL 寄/内带符号整数乘法AAM 分离BCD码调正(AL)DIV 寄/内不带符号除法IDIV 寄/内带符号整数除法AAD非组合BCD码调正CBW扩展AL中的符号位到AHCWD扩展AX中的符号位到DX类型助记符目的源功能注释逻辑运算NOT X 对字或字节按位取反 1.2.3同上4.按位操作5.AND1不变(保持),AND0置0OR1置1,OR0不变(保持)自身与或,结果不变(保持),影响标志位, 自身XOR常用于清零XOR 1取反,XOR 0不变AND X X对字或字节按位与操作OR X X 对字或字节按位或操作XOR X X对字或字节按位异或操作TEST X X同AND,但结果仅影响标寄而不存目的操作数移位和循环移位SHL 寄/内 1/CL按位左移 CF←M←0 1.循环或移位的次数为1或CL中的数2.SHL一次,原数乘2SHR一次,原数除23.目的操作数不能是立既数SAL 寄/内 1/CL按位左移 CF←M←0SHR 寄/内 1/CL逻辑右移 0→M→CFSAR 寄/内 1/CL算术右移→M→CFROL 寄/内 1/CL循环左移 CF← ←M ←ROR 寄/内 1/CL循环右移 CF← →M →RCL 寄/内 1/CL带进位循环左移←CF←M←RCR 寄/内 1/CL带进位循环右移→CF→M→重复前缀REP重复后面字串指令,直到CX=0一般与字串指令联合使用REPE/REPZ当相等/为零时重复REPNE/REPNZ当不相等/不为零时重复MOVSB/MOVSW字符串传送 1.源串偏址在SI中,目的串偏址在DI中.2.每次自动修改SI,DI 内容3.装入和存储是对AX(AL)操作CMPSB/CMPSW字符串比较SCASB/SCASW字符串扫描LODSB/LODSW字符串装入STOSB/STOSW字符串存储转移JMP X无条件转移到指定内存地址操作数前可带NEAR或FAR前缀条件转移(无符号数)JA/JNBE X高于/不低于,不等于由比较和减法指令的结果JA/JNBE 表示二者等价JAE/JNB X大于等于/不低于JB/JNAE X低于/不高于,不等于TBE/JNA X低于等于/不高于条件转移(带符号数)JG/JNLE X大于/不小于等于JGE/JNL X大于等于/不小于JL/JNGE X小于/不大于不等于JLE/JNG X小于等于/不大于条件转移JE/JZ X等于/为零JNE/JNZ X不等于/不为零条件转移JC/JNC X有进位CF=1/无进位CF=0由影响标志位的操作结果JC/JNC表示二者是两个不同用法JO/JNO X有溢出OF=1/无溢出OF=0JP/JPE X奇偶性为偶PF=1JNP/JPO X奇偶性为奇PF=0JS/JNS X符号位为1/符号位为0FR15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF 溢出方向符号零半进位奇偶进位类型助记符目的源功能注释LOOP X[CX]-1→[CX],[CX]≠0转移到X由CX决定循环次数循环LOOPZ/LOOPE X [CX]-1→[CX],[CX]≠0且ZF=1转移到X为零/相等时循环LOOPNZ/LOOPNE X[CX]-1→[CX],[CX]≠0且ZF=0转移到X非零/不相等时循环JCXZ X [CX]=0转移到X调用返回CALL 过程名调用指定地址开始的子程序对标寄无影响注意用堆栈保护断点RET子程返回RET XRETF标志操作CLC CF=0 (进位)STC CF=1CMC CF取反CLD DF=0 (方向)STD DF=1CLI IF=0 (中断)STI IF=1HLT暂停ESC交权INT 21H DOS功能调用AH=1键盘输入到AL,AH=2显示DL内容,AH=9显示DX为偏移量以$结尾的内存字串NOP空操作3个时钟伪指令功能特征符号 EQU 符号/表达式把右边的值赋予左边的符号1.不产生目标代码,不分配内存单元2.在同一源程序中同一符号不能用EQU重定义,可用=重定义符号=符号/表达式变量名 DB 表达式1,表达式2…. DWDD 定义字节(或字、双字)1.要求汇编分配内存单元,并把表达式1,表达式2…等存入2.为变量名分配这些内存单元的首字节地址段名SEGMENT [定位] [组合]['类别名'] :段名 ENDS 定义逻辑段定位隐含PARA,表示能被16整除ASSUME 段寄名:段名,段寄名:段名,….告诉汇编已定义的段与段寄的关系不产生目标代码,不分配内存单元,不为段寄存器存放段基值过程名 PROC [NEAR/FAR]:RET过程名 ENDP构造子程序最后语句RET不能少ORG 表达式定义下一个数据或指令的偏移量$表示偏移量的现行值宏名 MACRO 形参1,形参2,….ENDM宏定义宏名实参1,实参2,….宏调用一.指令由名字,操作码、操作数(地址)组成。

微机第二章 8086处理器指令

微机第二章 8086处理器指令

第二章处理器指令一.微机在实地址模式下的寄存器1 .Pentium处理器的工作模式Inter系列的微处理器从80386开始就具备了3 种工作模式,到80486DX 又增加了1种工作模式,这4种工作模式都被Pentium继承下来并一直延续到Pentiu mⅡ/Ⅲ和Pentiu m 4。

这4种状态分别是:实地模式、虚地址保护模式、虚拟8086模式和系统管理模式。

1)实地址模式系统启动后,Pentium自动进入实地址模式。

在此模式下,采用类似于8086的体系结构。

Pentium在实地址模式下的寻址方式、存储器管理、中断处理与8086的一样。

操作数默认长度为16位,但如果在指令前加前缀也允许访问32位寄存器。

在实地址模式下不用虚拟地址,最大地址范围仍限于1MB,只采用分段方式,每段最大64KB。

尽管Pentium有4个特权级,但在实地址模式下,程序在最高级0级上执行,也就是说用户此时和操作系统拥有一样的级别。

2)保护模式所谓保护是指在执行多任务操作时,对不同任务使用的虚拟存储器空间进行完全的隔离,保护每个任务顺利执行。

保护模式是80386及以后的微机常用的模式,系统启动后先进入实地址模式,完成系统初始化后立即转到保护模式。

这种保护模式提供了多任务环境下的各种复杂功能以及对复杂存储器组织的管理机制。

只有在保护模式下,Pentium 才发挥其强大的功能。

在保护模式下,Pentium具有如下特点:存储器采用虚拟地址空间,线性地线空间和物理地址空间三种方式来描述。

在保护模式下,Pentium寻址机构是通过描述符这种数据结构来实现对内存访问的。

Pentium可以寻址的空间大至64TB2),这个空间就是所谓的虚拟地址空间。

在保护模式下,可以使用Pentium (48的4级保护功能,实现程序与程序,用户与用户及用户与操作系统之间的隔离和保护,为多任务操作系统提供优化支持。

只是在保护模式下,Pentium就能启动其分页单元,以支持虚拟内存。

8086(8088)指令手册

8086(8088)指令手册
源操作数可以是8/16位通用寄存器、存储器操作数或立即数;目标操作数不允许是立即数,其他同源操作数。且不允许两者同时为存储器操作数。
ADC d,s
;d←d+s+CF
带进位加法。
指令的操作过程与ADD指令基本相同,惟一的不同是进位标志位CF的原状态也将一起参与加法运算,待运算结束,CF将重新根据结果置成新的状态。
IN AL,DX;AL←(端口(DX))
IN AX,DX;AX←(端口(DX))
注意:I/O指令只能用累加器作为执行I/O数据传送的机构,而不能用其他寄存器代替。另,当用直接I/O指令时,寻址范围仅为0~255,这适用于较小规模的微机系统;当需要寻址大于255的端口地址时,则必须用间接寻址的I/O指令。例如,在IBM PC/XT微机系统中,既用了0~255范围的端口地址,也用了255~65535范围的端口地址。
IMUL s
有符号乘法指令,它完成两个带符号的8/16位二进制相乘的功能。
对于两个带符号的数相乘,如果简单采用与无符号数乘法相同的操作过程,那么会产生完全错误的结果。为此,专门设置了IMUL指令。
IMUL指令除计算对象是带符号二进制数以外,其他都与MUL是一样的,但结果不同。
IMUL指令对OF和CF的影响是:若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。它仍然可用来判断相乘的结果中高一半是否含有有效数值。另外,IMUL指令对其他标志位没有定义。
表三、数据寄存器的隐含使用………………………………………………第19页
表四、标志寄存器……………………………………………………………第20页
8086/8088指令分类
8086/8088的指令按功能可分为6类:数据传送、算术运算、逻辑运算、串操作、程序控制和CPU控制。

8086汇编语言指令表(按字母顺序)

8086汇编语言指令表(按字母顺序)
(2) 若(AL) and 0F0H>90H 或 CF=1,则(AL)<--(AL)+60H,CF<--1.
2. 示例: (AL)=18H,(BL)=06H
ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH
DAA ; (AL)
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
DAA
组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)
格式: DAA
功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.
说明:
1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1

8086指令

8086指令

3.3 8086指令系统§§ 3.3.1 数据传送指令§(1)通用数据传送指令§数据传送指令的功能是把数据、地址传送到寄存器或存储器单元中。

它分为以下4类:§ (1)通用数据传送指令§ MOV DST ,SRC ;传送§ PUSH ;进栈§ POP ;出栈§ XCHG ;交换§ (2)累加器专用传送指令§ IN ;输入§ OUT ;输出§ XLAT ;换码§ (3)地址传送指令LEA 有效地址送寄存器LDS 地址指针送寄存器和DSLES 地址指针送寄存器和ES(4)标志寄存器传送指令LAHF 标志送AHSAHF AH送标志寄存器PUSHF 标志进栈POPF 标志出栈§1.通用数据传送指令§MOV dst,src ;传送指令§执行操作:(dst) ← (src)§ MOV指令的功能是将源操作数(字节或字)传送到目的地址。

§PUSH src ;进栈指令§执行操作: (SP) ←(SP)- 2§ ((SP)) ← (src)§POP dst ;出栈指令执行操作: (dst) ←((SP))(SP) ← (SP)十2例如: PUSH AXPUSH BX¦POP BXPOP AX§ PUSH指令执行时,SP的内容先减2,然后将数据压入SP所指示的字单元,高8位存入高地址字节,低8位存人低地址字节。

POP指令执行时,将SP所指示的栈顶地址的内容取出放人目的地址,然后SP增2,指向新的栈顶地址。

§使用堆栈指令应注意:§ (1)PUSH和POP指令只能是字操作,因此存取字数据后,SP的修改必须是+2或-2;§ (2)PUSH和POP指令不能使用立即数方式;§ (3)P0P指令的dst不允许是CS寄存器;§ (4)PUSH和POP指令都不影响标志位。

8086_8088汇编语言指令集

8086_8088汇编语言指令集

8086_8088汇编语言指令集8086/8088汇编语言指令集数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定AT&T与Intel汇编语法的区别比较1. 前缀:在Intel的语法中,寄存器和立即数都没有前缀,但是在AT&T中,寄存器前冠以"%",而立即数前冠以"$"。

8086汇编指令集

8086汇编指令集

机设08-4班8086汇编指令集数据传送类(14条)MOV PUSH POP XCHG XLAT LEA LDS LES LAHF SAHF POPF IN OUT PUSHF算术运算类(20条)ADD ADC INC SUB SBB DEC NEG CMP MU L IMUL DIV IDIV CBW CWD DAA DAS AA A AAS ASM AAD逻辑运算类(13条)AND OR NOT XOR TEST SHL SAL SHR SAR ROL ROR RCL RCR控制转移类(26条)JMP JC/JB JNC/JNB JP/JNP JS/JNS JZ/JNZ J O/JNO JCXZJBE/JNBE JL/JNL JLE/JNLE LOOP/LOOPE LO OPNZ CALL RET INT INTO IRET处理机控制类(12条)CLC CMC STC CLD STD CLI STI( NOP HCT WAIT ESC LOCK )串操作类指令(14条)REP MOVSB REP MOVSW REP LOOSB REP LOOSWREP STOSB REP STOSW REPZ CMPSB REPZ CMPSWREP SCASB REPZ SCASW REPZCMPSB REPNZ CMPSWREPNZ SCASB REPNZ SCASW 数据传递类指令1. 通用数据传递类(1)数据传递指令MOV(书P69)使用MOV指令注意以下几点:a) MOV指令不允许在两个存储单元之间直接传递数据b) MOV指令不允许在两个段寄存器之间直接传递数据c) MOV指令不允许用立即数为段寄存器赋值d) MOV指令不影响标志位(2)堆栈操作指令(书P70)a) PUSH入栈指令功能:将寄存器、段寄存器或存储器中的一个字数据压入7堆栈中。

b) POP出栈指令功能:将堆栈栈顶的内容弹入寄存器、段寄存器或存储器中。

8086常用指令集

8086常用指令集

8086常⽤指令集⽬录从功能上包括六⼤类:数据传送算术运算逻辑运算和移位串操作程序控制处理器控制⼀、数据传输指令注意点:两操作数字长必须相同;两操作数不允许同时为存储器操作数两操作数不允许同时为段寄存器;在源操作数是⽴即数时,⽬标操作数不能是段寄存器;IP和CS不作为⽬标操作数,FLAGS⼀般也不作为操作数在指令中出现。

①通⽤数据传输指令1、传送指令MOVMOV ⽬的操作数,源操作数注意:⽬的操作数和源操作数不能是IP寄存器、类型必须相同,不可以同时为段寄存器不允许在两个存储单元中直接传送数据⽬的操作数不允许是⽴即数⽴即数不允许直接送⼊段寄存器2、交换指令XCHG格式:XCHG REG,MEM/REG注意:操作数不能为⽴即数、段寄存器两操作数必须有⼀个是寄存器操作数,不能同时为存储单元。

②堆栈操作指令堆栈操作的原则先进后出以字节为单位指令的操作数必须是16位操作数可以是寄存器或存储器两单元,但不能是⽴即数;不能从栈顶弹出⼀个字给CS;1、进栈指令PUSHPUSH 源操作数2、出栈指令POPPOP ⽬的操作数③累加器(即AX或AL)专⽤传输指令指令寻址⽅式根据端⼝地址码的长度,指令具有两种不同的端⼝地址表现形式。

直接寻址端⼝地址为8位时,指令中直接给出8位端⼝地址;寻址256个端⼝。

间接寻址端⼝地址为16位时,指令中的端⼝地址必须由DX指定;可寻址64K个端⼝。

acc(AL/AX)PORT(端⼝地址)1、输⼊指令ININ acc,PORT2、输出指令OUTOUT PORT,acc3、查表指令XLATXLAT说明:⽤BX的内容代表表格⾸地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址操作:将BX+AL所指单元的内容送AL注意:执⾏该指令前需先执⾏:MOV BX,换码表的偏移⾸地址MOV AL,被转换码④⽬标地址传输指令取近地址指令:LEA取远地址指令:LDS、LESLDS和LES均⽤于将⼀个32位的远地址指针写⼊到⽬标寄存器。

8086汇编指令大全

8086汇编指令大全
CMPS串比较.(CMPSB比较字符.CMPSW比较字.)
SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中.(LODSB传送字符.LODSW传送字.LODSD传送双字.)
STOS保存串.是LODS的逆过程.
JC有进位时转移.
JNC无进位时转移.
JNO不溢出时转移.
JNP/JPO奇偶性为奇数时转移.
JNS符号位为"0"时转移.
JO溢出转移.
JP/JPE奇偶性为偶数时转移.
JS符号位为"1"时转移.
3>循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZCX不为零且标志Z=1时循环.
CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)
CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)
三、逻辑运算指令
AND与运算.
OR或运算.
XOR异或运算.
NOT取反.
TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL逻辑左移.
例:LGSDI,string;把段地址:偏移地址存到GS:DI.LSS传送目标指针,把指针内容装入SS.
例:LSSDI,string;把段地址:偏移地址存到SS:DI.
4.标志传送指令.
LAHF标志寄存器传送,把标志装入AH.
SAHF标志寄存器传送,把AH内容装入标志寄存器.
四、串指令
DS:SI源串段寄存器:源串变址.
ES:DI目标串段寄存器:目标串变址.
CX重复次数计数器.

8086指令系统 新

8086指令系统 新

MOV DX,AL
数据类型不匹配
MOV VA1,VA2 不允许两个操作数都是存储器单元
MOV 45,DL
目的操作数不允许是立即数
第三章 8086指令系统
举例:
例1:若名为VAR1和VAR2是字节型变量,现需把它们的内容互换,用
(1M)O通V指用令传实送现。指令MOV AL,VAR1
;(VAR1)→AL
出栈指令 POP ❖(1把) 栈通用顶传的送一指个令字传送至指定的目的操作数 ❖ 堆栈指针SP+2
POP r16/m16/seg ; r16/m16/seg←SS:[SP] ;SP←SP+2
pop ax
演示
pop wvar
第三章 8086指令系统
例: 假设BX = 2107 H , 执行 POP BX 即将 BX的内容弹出
❖ 堆栈只有两种基本操作:进栈和出栈,对应两条 指令PUSH和POP
图示
第三章 8086指令系统
堆栈:‘先进后出’的存储区,段地址存放在SS中, S(1P)在通任用传何送时指候令都指向栈顶,进出栈后自动修改SP。
注意:
* 堆栈操作必须以字为单位。
* 不影响标志位
* 不能用立即寻址方式
PUSH 1234H
3.2 指令系统
8086指令系统中的指令按功能可 分为六类:
数据传送 指令
逻辑运算 算术运算 与移位指令
指令
串操作 指令
控制转移 处理器 控
指令
制指令
数据传送 指令
可分为四类:
第三章 8086指令系统
• 通用传送指令 • 累加器专用传送指令 • 地址传送指令 • 标志传送指令
通用传送 指令
可分为五组:

8086CPU指令系统

8086CPU指令系统

•数据交换指令XCHG
【指令格式】XCHG dst,src 【 指令功能 】 交换指令 XCHG 的操作是使源操作数 src 与目标 操作数dst进行互换.即不仅将源操作数传送到目标操作数, 而且,同时将目标操作数传送到源操作数。交换的内容可以 是一个字节(8位),也可以是一个字(16位)。 【注意】①交换指令的源操作数和目标操作数各自均可以是 寄存器或存储器,但不能两者同时为存储器。 ②段寄存器不能参加交换 例:XCHG CH,AL 字节操作 XCHG BX,SI 字操作 XCHG [SI],CX 存储器与寄存器之间交换
•堆栈操作指令PUSH和POP
【注意】 ① 堆栈操作总是按字进行的,没有字节操作指令。 ② 码段寄存器CS的值可推入堆栈,但却不能从堆栈中弹出一个 字到CS中。 ③堆栈操作指令中,有一个操作数是隐含的,这个操作数就是 (SP)指示的栈顶单元。 【注意】 ① 堆栈主要用于暂存数据和在过程调用或处理中断时暂存断点 信息。 ② 有时在程序中需要对某些寄存器内容进行保护以便后面使用, 就常用堆栈先保护起来,用到时再恢复。
•堆栈操作指令PUSH和POP
堆栈就是在存储器中指定的一个特定的存储区域。在这个 区域中,信息的存入与取出的原则是按照先进后出( first in last out,FILO)或后进先出(last in first out,LIFO)的原 则进行存取,称该存储区为堆栈。此时,信息的存入称为推入, 信息的取出称为弹出。 可以把堆栈想像成一个开口向上的容器。堆栈的一端是固 定的,另一端是浮动的。堆栈的固定端是堆栈的底部,称为栈 底。堆栈的浮动端可以推入或弹出数据,称为栈顶。向堆栈推 入数据时,新推入数据堆放在以前推入数据的上面,而最先推 入的数据被推至堆栈底部,最后推入的数据堆放在堆栈顶部。 从堆栈弹出数据时,堆栈顶部的数据最先弹出,而最先推入的 数据则是最后弹出。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086/8088指令小结一、数据传送指令通用传送指令基本传送指令MOV dst, src;要类型匹配;不能同时为存储器操作数;立即数,CS,IP不能作为目的;不能给段寄存器赋立即数,段寄存器间不能直接赋值数据交换指令XCHG dst, src;使源与目的互换;要类型匹配;不能同时为存储器操作数,段寄存器不能参加交换堆栈操作指令PUSH src;将16位操作数压入栈顶,SP=SP-2,不能压立即数POP dst;从堆栈弹出一个字送至目的,SP=SP+2,dst不能为立即数查表转换指令XLAT src-tabel;src-tabel表的表首地址应先放入BX,表中元素序号送AL;查询后结果存于AL,可以段超越,如XLAT ES:src-tabel 输入输出指令输入指令ININ ac, port;从一个端口输入一个字节或字到累加器(ac)输出指令OUT;对于IN和OUT,间接寻址时,地址只能装在DX中OUT port, ac;执行与IN相反的操作。

地址传送指令取有效地址指令LEALEA reg, src;送指定存储器的16位偏移地址到16位通用寄存器指针送寄存器和DS的指令LDSLDS reg, src;32位地址,段地址放入DS,偏移地址放入reg 指针送寄存器和ES的指令LESLES reg, src;32位地址,段地址放入ES,偏移地址放入reg标志位传送指令取标志位Load AH Flag对标志位无影响LAHF;将SF、ZF、AF、PF、CF存入AH的7、6、4、2、0位存标志位Save AH Flag明显对标志位有影响SAHF;将AH的7、6、4、2、0位存入SF、ZF、AF、PF、CF 标志位入栈PUSHF;将16位标志位入栈保护标志位出栈POPF;将栈顶字单元弹出到标志位二、算术运算指令加法指令无进位加法ADD dst, src;影响标志位,类型要匹配。

源、目的不能同时为存储器;段寄存器不能参加计算带进位加法ADC dst, src;与ADD类似,但会把CF加到目的中;主要用于多字节加法自加1INC dst;将目的自加1,标志位除CF之外都影响减法指令无借位减法SUB dst, src;影响标志位带借位减法SBB dst, src;与SUB类似,但会将目的减去CF自减1DEC dst;将目的自减1,标志位除CF之外都影响求补NEG dst;求目的数的相反数,不是补码哦,影响标志位比较CMP dst, src;影响标志位,不改变源、目的,常与条件转移指令结合使用乘法指令无符号乘法MUL src;目的数(乘数)放在AL(8位)或AX(16位)中;结果放在AX(字节乘法)或DX:AX(字乘法)中;对CF、OF无影响,其他标志位不确定;乘积高半部分为0,则CF=OF=0,否则为CF=OF=1带符号乘法IMUL src;将两个操作数当作带符号数处理,其余和MUL类似;如乘积高半部分包含乘积的有效数字而不只是符号的扩展;则CF=OF=1,否则CF=OF=0除法指令无符号除法DIV src;类比MUL,但所有标志位都不确定;除数为0或AL、AH中的商大于FFH、FFFFH时;CPU将产生0号中断,商和余数都不能表示真值带符号除法IDIV src;类比DIV,标志位都不确定。

除数为0或字节除法与字除法时;Al与AX中的商超出范围,CPU会产生0号中断BCD码运算指令(未组合8位、组合4位)未组合BCD码加法十进制调整指令AAAAAA;对两个未组合的BCD码之和(应放于AL中)进行调整;即结果大于9就作加6处理,影响AF、CF,其他不定组合BCD码加法十进制调整指令DAADAA;类比AAA,但影响除OF外其他标志位未组合BCD码减法十进制调整指令AASAAS;操作数隐含在AL和AH中,影响AF、CF,其他不定;若结果大于9或AF=1,将结果减去6组合BCD码减法十进制调整指令DASDAS;操作数隐含在AL中,影响除OF外其他标志位;若结果大于9或AF=1,将结果减去6,且置AF=1;若结果大于9或CF=1,将结果减去6,且置CF=1未组合BCD码乘法十进制调整指令AAMAAM;操作数隐含在AL和AH中,通常紧跟MUL后来调整结果;调整后结果存于AH(高位)、AL(低位)中;据AL中的结果影响SF、ZF、PF,其他不定未组合BCD码除法十进制调整指令AADAAD;类比AAM,但是通常用于进行除法之前调整;且商还需要再用AAM进行调整,结果方能正确扩展指令(常用于带符号乘法IMUL除法IDIV之前扩展AL或AX的符号位)字节扩展成字CBWCBW;操作数隐含在AL和AH中,不影响标志位;若AL符号位为0,AH=0,反之,AH=FFH 字扩展成双字CWDCWD;操作数隐含在AX和DX中,不影响标志位;若AX符号位为0,DX=0,反之,DX=FFFFH三、逻辑运算指令、移位指令和循环指令逻辑运算指令(除NOT外,其他都会使OF=CF=0)逻辑与ANDAND dst, src;与的结果放在dst中,不能同时为存储器操作数逻辑或OROR dst, src;或的结果放在dst中,不能同时为存储器操作数逻辑非NOTNOT dst;按位取反。

不能操作立即数。

不影响标志位逻辑异或XORXOR dst, src;异或的结果放在dst中,不能同时为存储器操作数测试指令TESTTEST dst, src;进行与运算,但不将结果送回dst,只影响标志位移位指令逻辑左移SHL,算术左移SALSHL dst, 1;这两条指令的格式和功能都一样SHL dst, CL;左移1位或CL中指定的位数SAL dst, 1;只影响CF、OF,若移1位后新的dst的最高位!=CFSAL dst, CL;则OF=1,反之为0,即OF表示是否改变了符号位逻辑右移SHRSHR dst, 1;类比SHL。

右移1位时,最低位放入CF,最高位补0SHR dst, CL;若移1位后新的最高位与次高位不等,OF=1,反之OF=0算术右移SARSAR dst, 1;于SHR类似,最低位放入CF,但最高位不变SAR dst, CL;影响CF、OF、PF、SF、ZF,使AF不确定循环移位指令不带进位标志CF的左循环移位指令ROLROL dst, 1;最高位移入CF和最低位。

影响CF、OF,若移1位后ROL dst, CL;新的dst的最高位!=CF,则OF=1,反之为0带进位标志CF的左循环移位指令RCLRCL dst, 1;最高位移入CF,CF原来的值移入最低位RCL dst, CL;对标志位的影响同ROL不带进位标志CF的右循环移位指令RORROR dst, 1;最低位移入CF和最高位。

影响CF、OF,若移1位后ROR dst, CL;新的dst的最高位与次高位不等,则OF=1,反之为0带进位标志CF的右循环移位指令RCRRCR dst, 1;最低位移入CF,CF原来的值移入最高位RCR dst, CL;对标志位的影响同ROR四、控制转移指令无条件转移指令JMP段内直接转移JMP NEAR PTR Label;NEAR PTR是近距离属性运算符段内直接短转移JMP SHORT Label;SHORT是短转移运算符段内间接转移←JMP reg16;IP reg16←或IP mem16JMP mem16;段内转移,CS不会变段内直接转移JMP FAR PTR Label;FAR PTR是远距离属性运算符段间间接转移JMP mem32;IP mem32←;CS mem32 + 2←条件转移指令A bove B elow E qual G reater L ess指令助记符测试内容转移条件含义备注JCCF CF=1有进位/借位JNC CF=0无进位/借位JZZF ZF=1相等/等于0JNZ ZF=0不相等/不等于0JSSF SF=1是负数JNS SF=0是正数/0JPPF PF=1有偶数个1JNP PF=0有奇数个1JOOF OF=1有溢出JNO OF=0无溢出JACF、ZF CF=0且ZF=0高于无符号数A>BJAE CF=0或ZF=1高于等于无符号数A>=B JB CF=1且ZF=0低于无符号数A<B JBE CF=1或ZF=1低于等于无符号数A<=BJGSF、OF、ZF SF=OF且ZF=0大于带符号数A>BJGE SF=OF或ZF=1大于等于带符号数A>=B JL SF!=OF且ZF=0小于带符号数A<B JLE SF!=OF或ZF=1小于等于带符号数A<=B JCXZ CX( CX ) = 0CX的内容为0循环控制指令循环转移指令LOOPLOOP short-label;CX CX -1←,若CX != 0,则IP IP + diap8←;否则结束循环,顺序执行下一条指令。

;只能是短标号。

不影响标志位相等(为零)循环转移指令LOOPE/LOOPZ←,若CX != 0且ZF = 1,LOOPE short-label;CX CX -1←LOOPZ short-label;则IP IP + diap8;两条指令功能一样不相等(不为零)循环转移指令LOOPNE/LOOPNZLOOPNE short-labe l;CX CX -1←,若CX != 0且ZF = 0,←LOOPNZ short-label;则IP IP + diap8;两条指令功能一样过程调用与返回指令调用指令CALLCALL proc;proc表示过程的名字。

指令执行时,;先把CALL调用指令的下一条指令压入堆栈保存,;再将过程首地址装入IP或IP和CS,以便执行过程;CALL必须与RET成对使用,这也是压栈的缘由返回指令RETRET;如上所述,过程的最后一条指令必须是RET;它会将入栈保存的地址弹出赋给IP或IP和CS;以便CPU返回去执行CALL指令的下一条指令中断指令INTINT n;常数n称为中断类型号,其值在0 ~ 255之间;INT n会讲IF和TF清零,但不影响其他标志位溢出中断指令INTOINTO;若OF = 1,则启动一个类似INT n (n=4)的中断;否则没有操作。

中断向量为4 *4 = 16 = 10H 中断返回指令IRETIRET;类似RET,通常为中断服务的最后一条指令五、串操作指令字符串操作字符串传送指令MOVSMOVS目的串,源串;源串由DS:SI寻址,目的串由ES:DI寻址;可用无操作数指令代替;MOVSB字节串传送指令;MOVSW字串传送指令;不影响标志位字符串比较指令CMPSCMPS目的串,源串;源串由DS:SI寻址,目的串由ES:DI寻址;可用无操作数指令代替;CMPSB字节串比较指令;CMPSW字串比较指令;比较不影响操作数的值,但影响大多数标志位;同时,CPU自动修改SI和DI以便指向下一元素;影响大多数标志位字符串搜索指令SCASSCAS目的串;在目的串中查找AX或AL中的内容;影响大多数标志位;SCASB字节串搜索指令;SCASW字串搜索指令取串指令LODSLODS源串;将源串中由DS:SI所指向的一个字或一个字节;存入AX或AL中,然后SI会自动增减;不影响标志位;LODSB字节串搜索指令;LODSW字串搜索指令存串指令STOSSTOS;类比LODS重复前缀指令无条件重复前缀指令REPREP串操作指令;条件重复前缀指令REPE串操作指令;相等重复前缀REPZ串操作指令;为零重复前缀REPNE串操作指令;不相等重复前缀REPNZ串操作指令;不为零重复前缀处理器控制指令标志位操作清除进位标志CLC;置CF = 0进位标志置位STC;置CF = 1进位标志取反CMC;CF 取反清除方向标志CLD;置DF = 0方向标志置位STD;置DF = 1清除中断标志CLI;置IF = 0中断标志置位STI;置IF = 1同步控制指令处理器交权指令ESCESC ext_op,src;ext_op是其他协处理器的操作码,称为外部操作码;src是存储器操作数等待指令WAIT____WAIT;使8086进入等待状态,直至TEST=0;通常WAIT与ESC成对使用;对标志位没有影响总线封锁指令LOCKLOCK某指令;特殊指令空操作指令NOPNOP;什么也不做,但会占用3个时钟周期暂停指令HLTHLT;执行后,CPU暂停。

相关文档
最新文档