汇编指令手册

合集下载

汇编指令手册

汇编指令手册

计算机寄存器常用指令
一、常用指令
1. 通用数据传送指令.
MOV 传送字或字节.
MOVSX 先符号扩展,再传送.
MOVZX 先零扩展,再传送.
PUSH 把字压入堆栈.
POP 把字弹出堆栈.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
一、常用指令
二、算术运算指令
三、逻辑运算指令
四、串指令
五、程序跳转指令
------------------------------------------
计算机寄存器分类简介:
32位CPU所含有的寄存器有:
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6、溢出标志OF(Overflow Flag)
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否
则,OF的值被清为0。
“溢出”和“进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
二、状态控制标志位
状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
1、追踪标志TF(Trap Flag)
当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。
指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。

arm32汇编指令手册简要

arm32汇编指令手册简要

ARM32汇编指令手册简要:掌握ARM32汇编指令,轻松开发嵌入式系统在嵌入式系统开发中,ARM32汇编指令是必不可少的一部分。

ARM32汇编指令手册简要提供了ARM32汇编指令的基础知识和常用指令的详细介绍,帮助开发人员更好地掌握ARM32汇编指令,从而轻松开发嵌入式系统。

ARM32汇编指令是一种低级语言,它是由CPU直接执行的指令。

掌握ARM32汇编指令对于嵌入式系统开发人员来说非常重要。

了解ARM32汇编指令的基本结构和语法是必要的。

ARM32汇编指令的基本结构包括指令助记符、寄存器、操作数和注释。

指令助记符是指令的名称,寄存器是用来存储数据的地方,操作数是指令的参数,注释是对指令的解释说明。

ARM32汇编指令手册简要中还介绍了一些常用的指令,如MOV、ADD、SUB、CMP、B、BL等。

这些指令涵盖了ARM32汇编指令的大部分功能。

MOV指令可以将一个寄存器的值传递给另一个寄存器;ADD和SUB指令可以进行加法和减法运算;CMP指令可以比较两个值的大小;B和BL指令可以进行跳转操作。

掌握这些指令可以帮助开发人员更好地编写ARM32汇编程序。

除了介绍基本结构和常用指令外,ARM32汇编指令手册简要还介绍了一些高级指令,如LDR、STR、LDM、STM、SWI等。

这些指令可以让开发人员更加灵活地操作内存和系统调用。

例如,LDR和STR指令可以读取和写入内存中的数据;LDM和STM指令可以一次性读取或写入多个寄存器的值;SWI指令可以进行系统调用。

掌握这些高级指令可以让开发人员更加高效地编写ARM32汇编程序。

ARM32汇编指令手册简要提供了ARM32汇编指令的基础知识和常用指令的详细介绍,帮助开发人员更好地掌握ARM32汇编指令,从而轻松开发嵌入式系统。

掌握ARM32汇编指令不仅可以提高开发效率,还可以让开发人员更好地理解计算机底层原理,更加深入地了解嵌入式系统的工作原理。

ARM32汇编指令是嵌入式系统开发中必不可少的一部分。

汇编通用指令集(含分析)

汇编通用指令集(含分析)

指令格式(16进制)机器码(2进制)机器码ADD r/m8,r8 00 /r 00 000 0 0 0 oorrrmmm ADD r/m32,r32 01 /r 00 000 0 0 1 oorrrmmm ADD r/m16,r16 01 /r 00 000 0 0 1 oorrrmmm ADD r8,r/m8 02 /r 00 000 0 1 0 oorrrmmm ADD r16,r/m16 03 /r 00 000 0 1 1 oorrrmmm ADD r32,r/m32 03 /r 00 000 0 1 1 oorrrmmm 前6位全为0ADD AL, imm8 04 ib 00 000 1 0 0 ibADD EAX, imm32 05 id 00 000 1 0 1 idADD AX, imm16 05 iw 00 000 1 0 1 iw前5位为0,第6,7位为10???第6位为0有MOD域PUSH ES 06 00 000 1 1 0POP ES 07 00 000 1 1 1前5位为0,第6,7位为11OR r/m8,r8 08 /r 00 001 000 oorrrmmm OR r/m16,r16 09 /r 00 001 001 oorrrmmm OR r/m32,r32 09 /r 00 001 001 oorrrmmm OR r8,r/m8 0A /r 00 001 010 oorrrmmm OR r16,r/m16 0B /r 00 001 011 oorrrmmmOR r32,r/m32 0B /r 00 001 011 oorrrmmm 前4位为0,第5,6位为10OR AL, imm8 0C ib 00 001 1 0 0 ibOR EAX, imm32 0D id 00 001 1 0 1 idOR AX, imm16 0D iw 00 001 1 0 1 iw前4位为0,第5,6位为11PUSH CS 0E 00 001 1 1 0这里没有0F 0F是以后用于扩展00 001 1 1 1ADC r/m8,r8 10 /r 00 010 0 0 0 oorrrmmm ADC r/m32,r32 11 / r 00 010 0 0 1 oorrrmmm ADC r/m16,r16 11 /r 00 010 0 0 1 oorrrmmm ADC r8,r/m8 12 /r 00 010 0 1 0 oorrrmmm ADC r16,r/m16 13 /r 00 010 0 1 1 oorrrmmm ADC r32,r/m32 13 /r 00 010 0 1 1 oorrrmmm 前5位为00010,6、7位为01ADC AL, imm8 14 ib 00 010 100 ibADC EAX, imm32 15 id 00 010 101 idADC AX, imm16 15 iw 00 010 101 iw前5位为00010,6、7位为10PUSH SS 16 00 010 1 1 0POP SS 17 00 010 1 1 1前5位为00010,6、7位为11SBB r/m8,r8 18 /r 00 011 000 oorrrmmm SBB r/m32,r32 19 / r 00 011 001 oorrrmmm SBB r/m16,r16 19 /r 00 011 001 oorrrmmm SBB r8,r/m8 1A /r 00 011 010 oorrrmmm SBB r16,r/m16 1B /r 00 011 011 oorrrmmm SBB r32,r/m32 1B /r 00 011 011 oorrrmmm 前5位为00011,6位为0SBB AL, imm8 1C ib 00 011 100 ibSBB EAX, imm32 1D id 00 011 101 idSBB AX, imm16 1D iw 00 011 101 iw前5位为00011,6位为1PUSH DS 1E 00 011 1 10POP DS 1F 00 011 1 11前5位为00011,6、7位为11AND r/m8,r8 20 /r 00 100 000 oorrrmmm AND r/m16,r16 21 /r 00 100 001 oorrrmmm AND r/m32,r32 21 /r 00 100 001 oorrrmmm AND r8,r/m8 22 /r 00 100 010 oorrrmmmAND r16,r/m16 23 /r 00 100 011 oorrrmmm AND r32,r/m32 23 /r 00 100 011 oorrrmmm 前5位为00100,6位为0AND AL, imm8 24 ib 00 100 100 ibAND EAX, imm32 25 id 00 100 101 idAND AX, imm16 25 iw 00 100 101 iw前5位为00100,6位为1ES前缀26 00 100 11000 100 111 把al调为DAA 27前5位为00100,6位为1,后两位为11SUB r/m8,r8 28 /r 00 101 000 oorrrmmm SUB r/m32,r32 29 / r 00 101 001 oorrrmmm SUB r/m16,r16 29 /r 00 101 001 oorrrmmm SUB r8,r/m8 2A /r 00 101 010 oorrrmmmSUB r16,r/m16 2B /r 00 101 011 oorrrmmm SUB r32,r/m32 2B /r 00 101 011 oorrrmmm 前5位为00101,6位为 0SUB AL, imm8 2C ib 00 101 100 ibSUB EAX, imm32 2D id 00 101 101 idSUB AX, imm16 2D iw 00 101 101 iw前5位为00101,6位为1CS前缀2E 00 101 110DAS 2F 00 101 111前5位为00101,6位为1,后两位为11XOR r/m8,r8 30/r 00 110 000 oorrrmmm XOR r/m16,r16 31/r 00 110 001 oorrrmmm XOR r/m32,r32 31/r 00 110 001 oorrrmmm XOR r8,r/m8 32/r 00 110 010 oorrrmmm XOR r16,r/m16 33/r 00 110 011 oorrrmmm XOR r32,r/m32 33/r 00 110 011 oorrrmmm 前5位为00110,6位为 0XOR AL,imm8 34 ib 00 110 100 ibXOR EAX,imm32 35 id 00 110 101 idXOR AX,imm16 35 iw 00 110 101 iw前5位为00110,6位为 1SS前缀36 00 110 110AAA 37 00 110 111前5位为00110,6位为1,后两位为11CMP r/m8,r8 38 /r 00 111 000 oorrrmmm CMP r/m32,r32 39 /r 00 111 001 oorrrmmm CMP r/m16,r16 39 /r 00 111 001 oorrrmmm CMP r8,r/m8 3A /r 00 111 010 oorrrmmm CMP r16,r/m16 3B /r 00 111 011 oorrrmmm CMP r32,r/m32 3B /r 00 111 011 oorrrmmm 前5位为00111,6位为0CMP AL, imm8 3C ib 00 111 100 ibCMP EAX, imm32 3D id 00 111 101 idCMP AX, imm16 3D iw 00 111 101 iw前5位为00111,6位为1DS前缀3E 00 111 110AAS 3F 00 111 111以上为0-3开头的操作码,按2-3-1-1-1拆分,第六位定有无mod 域,为0有MOD域,3、4、5位决定功能(表1),为1无MOD域,看第7位,为1则看(表2),为0看(表1);(表1)第8位定操作数长度(表2)第8位定操作;经典呀!!INC r32 40+rd 01 0 00 000 +rdINC r16 40+rw 01 0 00 000 +rwDEC r32 48 +rd 01 0 01 000 +rdDEC r16 48 +rw 01 0 01 000 +rw前4位为0100后三位为000,第5位为0位为INC,为1为DEC PUSH r32 50+rd 01 0 10 000+rdPUSH r64 50+rd 01 0 10 000+rdPUSH r16 50+rw 01 0 10 000+rw前4位为0101,第5位为0,后3为000POP r32 58+rd 01 0 11 000+rdPOP r64 58+rd 01 0 11 000+rdPOP r16 58+rw 01 0 11 000+rw由第3位定最后三位是否为寄存器,4、5位定4种操作;按2-1-2-3拆分最规整中间两位定操作,最后3为定寄存器000是eax ……111是ediPUSHA 60 01 1 0 0 0 0 0 PUSHAD 60 01 1 0 0 0 0 0POPA 61 01 1 0 0 0 0 1POPAD 61 01 1 0 0 0 0 1前7位为0110000,最后一位为0为PUSHA,为1为POPABOUND r16,m16/16 62 /r 01 1 0 0 0 1 0 oorrrmmm BOUND r32,m48/48这里改成了4862 /r 01 1 0 0 0 1 0 oorrrmmmARPL r/m16,r16 这里改成16了63 /r01 1 0 0 0 1 1 oorrrmmm64 FS段超越64 01 1 0 0 1 0 065 GS段超越65 01 1 0 0 1 0 166 数据宽度66 01 1 0 0 1 1 067 地址宽度67 01 1 0 0 1 1 1 PUSH imm16 68 01 1 0 1 0 0 0 PUSH imm32 68 01 1 0 1 0 0 0特殊IMULr32,r/m32,imm32 69 /r id01 1 0 1 0 0 1 oorrrmmmidIMULr16,r/m16,imm16 69 /r iw01 1 0 1 0 0 1 oorrrmmmiwPUSH imm8 6A 01 1 0 1 0 1 0 特殊IMULr16,r/m16,imm8 6B /r ib01 1 0 1 0 1 1 oorrrmmmibIMULr32,r/m32,imm8 6B /r ib01 1 0 1 0 1 1 oorrrmmmib前6位为011010,最后一位为1 ,第7位为0时表示同类寄存器之间,为1表示的为不同类寄存器之间,第七位决定立即数宽度最后一位为0,表示push立即数,第七位为0表示8位立即数,第七位为1,表示16/32位立即数。

汇编指令手册(英文缩写原码)

汇编指令手册(英文缩写原码)

汇编指令手册(英文缩写原码)1.通用数据传送指令.MOV----> moveMOVSX---->extended move with sign dataMOVZX---->extended move with zero dataPUSH---->pushPOP---->popPUSHA---->push allPOPA---->pop allPUSHAD---->push all dataPOPAD---->pop all dataBSWAP---->byte swapXCHG---->exchangeCMPXCHG---->compare and changeXADD---->exchange and addXLAT---->translate2.输入输出端口传送指令.IN---->inputOUT---->output3.目的地址传送指令.LEA---->load effective addressLDS---->load DSLES---->load ESLFS---->load FSLGS---->load GSLSS---->load SS4.标志传送指令.LAHF---->load AH from flagSAHF---->save AH to flagPUSHF---->push flagPOPF---->pop flagPUSHD---->push dflagPOPD---->pop dflag二、算术运算指令ADD---->addADC---->add with carryINC---->increase 1AAA---->ascii add with adjustDAA---->decimal add with adjustSUB---->substractSBB---->substract with borrowDEC---->decrease 1NEC---->negativeCMP---->compareAAS---->ascii adjust on substractDAS---->decimal adjust on substractMUL---->multiplicationIMUL---->integer multiplicationAAM---->ascii adjust on multiplicationDIV---->divideIDIV---->integer divideAAD---->ascii adjust on divideCBW---->change byte to wordCWD---->change word to double wordCWDE---->change word to double word with sign to EAXCDQ---->change double word to quadrate word三、逻辑运算指令———————————————————————————————————————AND---->andOR---->orXOR---->xorNOT---->notTEST---->testSHL---->shift leftSAL---->arithmatic shift leftSHR---->shift rightSAR---->arithmatic shift rightROL---->rotate leftROR---->rotate rightRCL---->rotate left with carryRCR---->rotate right with carry四、串指令———————————————————————————————————————MOVS---->move stringCMPS---->compare stringSCAS---->scan stringLODS---->load stringSTOS---->store stringREP---->repeatREPE---->repeat when equalREPZ---->repeat when zero flagREPNE---->repeat when not equalREPNZ---->repeat when zero flagREPC---->repeat when carry flagREPNC---->repeat when not carry flag五、程序转移指令———————————————————————————————————————1>无条件转移指令(长转移)JMP---->jumpCALL---->callRET---->returnRETF---->return far2>条件转移指令(短转移,-128到+127的距离内)JAE---->jump when above or equalJNB---->jump when not belowJB---->jump when belowJNAE---->jump when not above or equalJBE---->jump when below or equalJNA---->jump when not aboveJG---->jump when greaterJNLE---->jump when not less or equalJGE---->jump when greater or equalJNL---->jump when not lessJL---->jump when lessJNGE---->jump when not greater or equalJLE---->jump when less or equalJNG---->jump when not greaterJE---->jump when equalJZ---->jump when has zero flagJNE---->jump when not equalJNZ---->jump when not has zero flagJC---->jump when has carry flagJNC---->jump when not has carry flagJNO---->jump when not has overflow flagJNP---->jump when not has parity flagJPO---->jump when parity flag is oddJNS---->jump when not has sign flagJO---->jump when has overflow flagJP---->jump when has parity flagJPE---->jump when parity flag is evenJS---->jump when has sign flag3>循环控制指令(短转移)LOOP---->loopLOOPE---->loop equalLOOPZ---->loop zeroLOOPNE---->loop not equalLOOPNZ---->loop not zeroJCXZ---->jump when CX is zeroJECXZ---->jump when ECX is zero4>中断指令INT---->interruptINTO---->overflow interruptIRET---->interrupt return5>处理器控制指令HLT---->haltWAIT---->waitESC---->escapeLOCK---->lockNOP---->no operationSTC---->set carryCLC---->clear carryCMC---->carry make changeSTD---->set directionCLD---->clear directionSTI---->set interruptCLI---->clear interrupt六、伪指令—————————————————————————————————————DW---->definw wordPROC---->procedureENDP---->end of procedureSEGMENT---->segmentASSUME---->assumeENDS---->end segmentEND---->end。

mips汇编指令手册

mips汇编指令手册

MIPS汇编指令手册是一本详细介绍MIPS架构下汇编语言的书籍。

它包含了所有MIPS处理器支持的指令,以及这些指令的具体用法和示例。

首先,我们需要了解什么是MIPS架构。

MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集计算机(RISC)架构,由斯坦福大学开发。

它的设计理念是简单、清晰和易于实现,这使得它在嵌入式系统和教育领域得到了广泛的应用。

在MIPS汇编指令手册中,我们可以看到各种类型的指令,包括数据传输指令、算术逻辑指令、控制流指令等。

每种指令都有其特定的格式和操作数,例如,数据传输指令通常包括一个源操作数和一个目标操作数,而算术逻辑指令则可能有一个或多个操作数。

在编写MIPS汇编程序时,我们需要遵循一定的规则。

首先,我们需要使用正确的指令格式。

其次,我们需要确保我们的程序没有语法错误。

最后,我们需要确保我们的程序能够正确地执行我们想要的操作。

在实际操作中,我们可以使用MIPS汇编器来编译我们的程序。

MIPS汇编器会将我们的汇编代码转换为机器代码,然后我们可以将这个机器代码加载到MIPS处理器上运行。

总的来说,MIPS汇编指令手册是学习和使用MIPS汇编语言的重要工具。

通过阅读和理解这本书,我们可以掌握MIPS汇编语言的基本知识和技能,从而能够编写出高效、可靠的MIPS 汇编程序。

汇编语言指令集

汇编语言指令集

mov‎a,b ‎把b的值送‎给a‎ret ‎返回主程序‎n‎o p 无作‎用,英文“‎n o op‎e rati‎o n”的简‎写,意思是‎“do n‎o thin‎g”(机器‎码90)*‎**机器码‎的含义参看‎上面‎(解释:‎u ltra‎e dit打‎开编辑ex‎e文件时你‎看到90,‎等同于汇编‎语句nop‎)‎c all ‎调用子程序‎j‎e或jz‎若相等则‎跳(机器码‎74 或0‎F84) ‎jn‎e或jnz‎若不相等‎则跳(机器‎码75或0‎F85) ‎jm‎p无条件‎跳(机器码‎E B)‎jb ‎若小于则跳‎j‎a若大于‎则跳‎jg 若‎大于则跳‎jg‎e若大于‎等于则跳‎jl‎若小于则‎跳‎j le 若‎小于等于则‎跳‎p op 出‎栈‎p ush ‎压栈三‎.常见修改‎(机器码)‎7‎4=>75‎74=>‎90 74‎=>EB ‎75‎=>74 ‎75=>9‎0 75=‎>EB‎jnz‎->nop‎7‎5->90‎(相应的机‎器码修改)‎j‎n z ->‎jmp ‎75‎-> E‎B(相应的‎机器码修改‎)‎j nz -‎> jz ‎75‎->74 ‎(正常) ‎0F 85‎-> 0‎F 84(‎特殊情况下‎,有时,相‎应的机器码‎修改)‎四.两种不‎同情况的不‎同修改方法‎1‎.修改为j‎m p‎je(j‎n e,jz‎,jnz)‎=>jm‎p相应的机‎器码EB ‎(出错信息‎向上找到的‎第一个跳转‎)jmp 的‎作用是绝对‎跳,无条件‎跳,从而跳‎过下面的出‎错信息‎xxx‎x xxxx‎x xxx ‎出错信息,‎例如:注册‎码不对,s‎o rry,‎未注册版不‎能...,‎"Func‎t ion ‎N ot A‎v aibl‎e in ‎D emo"‎或‎"Com‎m and ‎N ot A‎v aibl‎e" 或‎"Can'‎t sav‎e in ‎S hare‎w are/‎D emo"‎等(我们‎希望把它跳‎过,不让它‎出现)<。

汇编指令大全+很全的汇编指令

汇编指令大全+很全的汇编指令

for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
6 LAHF 标志传送指令 LAHF 格式: LAHF
2. 本指令不影响状态标位,表格 长度不超过256字节.
说明: 该指令不影响FLAG的原来 内容,AH只是复制了原FLAG的低8 位内容.
功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<-
-(FLAG)7~0
7 SAHF 标志传送指令 SAHF
说明:
格式: DEC OPRD 功能: OPRD<--OPRD-1
1. OPRD 为寄存器或存储器操作 数.
2. 这条指令执行结果影响AF、 OF、PF、SF、ZF标志位,但不影 响CF标志位.
页码,4/22
星尘-易尘
302 NEG 303 CMP
304 AAS 305 DAS 306 MUL
取补指令 NEG(NEGate)
未组合的十进制加法调整指令 AAA(ASCII Adgust 说明:
for Addition)
1. 组合的十进制数和未组合的
格式: AAA
十进制数:在计算中,十进制数可
用四位二进制数编码,称为BCD
功能: 对两个组合的十进制数相加运算(存在AL中) 码.
的结果进行调整,产生一个未组合的十进制数放在
AX中.
SUB [BX+25],AX

8086_8088_汇编_指令_手册

8086_8088_汇编_指令_手册

8086 8088 汇编指令手册通用寄存器(1)数据寄存器数据寄存器共有4个寄存器AX、BX、CX、DX,用来保存操作数或运算结果等信息。

AX寄存器称为累加器。

使用频度最高,用于算术、逻辑运算以及与外设传送信息等。

BX寄存器称为基址寄存器。

常用于存放存储器地址。

CX寄存器称为计数器。

一般作为循环或串操作等指令中的隐含计数器。

DX寄存器称为数据寄存器。

常用来存放双字数据的高16位,或存放外设端口地址。

(2)变址和指针寄存器变址和指针寄存器包括SI、DI、SP、BP 4个16位寄存器,主要用于存放某个存储单元的偏移地址。

SI是源变址寄存器。

DI是目的变址寄存器,在字符串操作中,SI和DI都具有自动增量或减量的功能。

SP为堆栈指针寄存器,用于存放当前堆栈段中栈顶的偏移地址。

BP为基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址。

2.段寄存器8086 CPU的4个16位的段寄存器分别称为代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加数据段寄存器ES。

段寄存器用来确定该段在内存中的起始地址。

代码段用来存放程序的指令序列。

CS存放代码段的段首址,指令指针寄存器IP指示代码段中指令的偏移地址。

3.指令指针8086 CPU中的指令指针IP,它总是保存下一次将要从主存中取出指令的偏移地址,偏移地址的值为该指令到所在段段首址的字节距离。

在目标程序运行时,IP的内容由微处理器硬件自动设置,程序不能直接访问IP,但一些指令却可改变IP的值,如转移指令、子程序调用指令等。

3.1 标志寄存器8086 CPU中有一个很重要的16位标志寄存器,它包含9个标志位,主要用于保存一条指令执行后,CPU所处状态信息及运算结果的特征。

条件标志(1)进位标志CF (2)零标志ZF (3)符号标志SF (4)溢出标志 OF(5)奇偶标志 PF (6)辅助进位标志AF状态控制标志(1)方向标志DF (2)中断允许标志IF (3)追踪标志TF运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086/8088指令系统8086/8088的指令系统丰富,而且指令的功能也强。

大多数指令既能处理字数据,又能处理字节数据;算术运算和逻辑运算不局限于累加器,存储器操作数也可直接参加算术逻辑运算。

8086/8088的指令系统可分为如下六个功能组:(1)数据传送(2)算术运算(3)逻辑运算(4)串操作(5)程序控制(6)处理器控制汇编语言语句的一般格式。

指令语句可由四部分组成,一般格式如下:[标号:] 指令助记符[操作数1] [操作数2] [;注释]指令是否带有操作数,完全取决于指令本身标号的使用取决于程序的需要,标号只被汇编程序识别,它与指令本身无关。

(一)数据传送指令数据传送指令组又可分为:传送指令,交换指令,地址传送指令,堆栈操作指令,标志传送指令,查表指令,输入输出指令在有关章节介绍。

除了SAHF和POPF指令外,这组指令对各标志没有影响。

1,传送指令其格式如下:MOV DST,SRC目的,源源操作数可以是累加器,寄存器,存储单元以及立即数,而目的操作数可以是累加器,寄存器和存储单元。

传送不改变源操作数。

传送指令能实现下列传送功能:(1)CPU内部寄存器之间的数据传送。

例如:MOV AH,ALMOV DL,DHMOV BP,SPMOV AX,CS注意:源和目的操作数不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP即不能作为源,也不能作为目的。

注意,这种例外永远存在。

(二)交换指令利用交换指令可方便地实现通用寄存器与通用寄存器或存储单间的数据交换,交换指令的格式如下:XCHG OPRD1,OPRD2此指令把操作数OPRD1R的内容与操作数OPRD2的内容交换。

操作数同时是字节或字。

例如:XCHG AL,AH;XCHG SI,BXOPRD1和OPRD2可是通用寄存器和存储单元。

但不包括段寄存器,也不能同时是存储单元,还不能有立即数,可采用各种存储器寻址方式来指定存储单元。

例如:XCHG BX,[BP+SI] 如指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246)=4154H 物理地址=2F000+0200+0046=2F246H指令执行后:(BX)=4154H (2F246H)=6F36H此指令不影响标志位(三)地址传送指令80686/8088有如下三条地址传送指令。

(1)指令LEA (Load Effective Address)指令LEA称为传送有效地址指令,其格式如下:LEA REG,OPRD该指令把操作数OPRD的有效地址传送到操作数REG操作数OPRD必须是一个存储器操作数,操作数REG必须是一个16位的通用寄存器。

例如:LEA AX,BUFFER ;BUFFER是变量名LEA DS,[BS+S]LEA SL,[BP+DI+4]例如:LEA BX,[BX+SI+0F62H]如指令执行前(BX)=0400H,(SI)=003CH指令执行后(BX)=0040+003C+0F62=139EH(2)指令LDS (Load pointer into DS)段值和段内偏移构成32位的地址指针。

该指令传送32位地址指针,其格式如下:LDS REG,OPRD执行的操作:(REG)←(SRC)(DS)←(SRC+2)该指令把操作数OPRD中所含的一个32位地址指针的段值部分送到数据段寄存器DS,把偏移部分送到指令给出的通用寄存器REG。

操作数OPRD必须是一个32位的存储器操作数,操作数REG可以是一个16的通用寄存器,但实际使用的往往是变址寄存器或指针寄存器。

LDS SL,POINTER ;POINTER是一个双字变量假设双字变量POINTER包含的32位地址指令的段值为5678H,偏移为1234H,那么在执行指令后:(DS)=5678H,(SI)=1234H32位地址指针的偏移部分存储在双字变量的低地址字中,段值部分存储在高地址中。

例如:LDS SI,[10H]如指令执行前:(DS)=C000H,(C0010H)=0180,(C0012H)=2000H指令执行后:(SI)=0180H,(DS)=2000H(3)指令LES(Load pointer into ES)LES 指令也传送32位地址指针,其格式如下:LES REG,OPRD该指令把操作数OPRD中包含的32位地址指针的段值送到附加段寄存器ES,把偏移部分送到指令给出的通用寄存器REG。

执行的操作:(REG)←(SRC)(ES)←(SRC+2)例如: LES DI, [BX]如指令执行前: (DS)=B000H, (BX)=080AH, (0B080AH)=05AEH, (0B080CH)=4000H 执令执行后(DI)=05AEH, (ES)=4000H(四)堆栈操作指令在80686/8088系统中,堆栈是一段RAM区域.称为栈底的一端地址比较大,称为栈顶的一端比较小.(高地址) (低地址)堆栈的段值在堆栈段寄存器SS中,堆栈指针寄存器SP始终指向栈顶.堆栈是以”后进先出”的方式工作的一个存储区.堆栈的存取必须以字为单位.堆栈操作指令分为两种:(1)进栈指令格式如下: PUSH SRC执行的操作: (SP)←(SP)-2该指令把源操作数SRC压入堆栈.它先把堆栈指针寄存器SP的值减2,然后把源操作数SRC送入由SP所指指的栈顶.源操作数SRC可以是通用寄存器和段寄存器,可以是字存储单元.例如: PUSH AX假设AX=2107H(2)出栈指令POP格式如下: POP DST执行的操作: (SP)←(SP)+2POP DST该指令从栈顶弹出一个字数据到目的操作数DST.它先把堆栈指针寄存器SP所指的字数据送至目的操作数DST,然后SP值加2. DST可以是通用寄存器和段寄存器(但CS例外),也可是字存储单元.(五)标志传送指令(1)标志传送指令标志传送指令属于数据传送指令组.1,指令LAHF(Load AH with Flags)指令LAHF采用固定寻址方式,指令格式如下 :LAHF该条指令把标志寄存器的低8位(包括SF,ZF,AF,PF和CF)传送到寄存器AH的指定位,如下图所示:这条指令本身不影响这些标志和其他标志.2,指令SAHF采用回定寻址方式 , 其格式如下:SAHF这条指令与指令LAHF刚好相反,把寄存器AH的指定位送至标志寄存器低8位的SF,ZF,AF,PF和CF标志位.因而这些标志的内容就要受到影响,并取决于AH中相应位的状态.但这条指令不影响溢出标志OF,方向标志DF,中断允许标志IF和追踪标志TF,也即不影响标志寄存器的高位字节.例如:MOV AH ,0C1HSAHF ; CF=1,PF=0,AF=0,ZF=1,SF=13,指令PUSHF指令PUSHF的格式如下:PUSHF该条指令把标志寄存器的内容压入堆栈,即先把堆栈指针寄存器SP的值减2,然后把标志寄存器的内容送入由SP所指的栈顶.4,指令POPF指令POPF的格式如下:POPF该条指令把当前堆栈顶的一个传送到标志寄存器,同时相应地修乞讨堆栈指针,即把堆栈指针寄存器SP的值加2.这条指令和PUSHF指令一起可以保存和恢复标志寄存器的内容,即保存和恢复各标志的值.另外,这两条指令也可以用来改变追踪标志TF.为了改变TF标志,可先用PUSHF指令将标志压入堆栈,然后设法改变栈顶字单元中的第8位(把整个标志寄存器看成是一个字),再用POPF指令把该字弹回到标志寄存器,这样其余的标志不受影响,而只有TF标志按需要改变了.(2)标志位操作指令标志位操作指令公对指令规定的标志产生指令规定的影响,对其他标志没有影响.产生指令规定的影响,对其它标志没有影响.1,清进位标志CLC (Clear Carry flag)清进位标志指令的格式如下:CLC该指令使进位标志为0.2,置进位标志指令STC (SeT Carry Flag)置进位标志指令的格式如下:STC该指令使进位标志为0.3,进位标志取反指令CMC (CoMpleinent carry flag)进位标志取反指令的格式如下:CMC该指令使进位标志取反.如CF为1,则使CF为0; 如CF为0,则CF为1.4,清方向标志CLD (Clear Direction flag)清方向标志指令的格式如下:CLD该条指令使主向标志DF为0.从而在执行串操作指令时,使地址按递增方式变化.5,置方向标志STD (SeT Direction flag)置方向标志指令的格式如下:STD该条指令使方向标志DF为1,从而在执行串操作指令进,使地址按递减方式变化. 6,清中断充许标志CLI (Clera Interrupt enable flag)清中断允许标志指令的格式如下:CLI该条指令使中断允许标志IF为0,于是CPU就不响应来自外部装置的可屏蔽中断.但对不可屏蔽中断和内部中断都没有影响.7,置中断允许标志STI (SeT Interrupt enable flag)置中断允许标志指令的格式如下:STI该条指令使中断允许标志IF为1,则CPU可以响应可响应屏蔽中断.(六)加减运算指令(1)加法指令 ADD格式如下: ADD OPRD1,OPRD2执行的操作:(OPRD1)←(OPRD1)+(OPRD2)例如: MOV AX,7896H ; AX=7890H即AH=78H,AL=96;各标志保持不变ADD AL,AH ; AL=0EH,AH=78H,即AX=780EH;CF=1,ZF=0,SF=0,OF=0,AF=0,PF=0例如: ADD DX,0F0F0H执行前(DX)=4652H执行后(DX)=3742H ZF=0,SF=0,CF=1,OF=0例如: ADD AX,4321执行前(AX)=62A0执行后(AX)=A5C1H SF=1,ZF=0,CF=0,OF=1从上面的例子可看出:加法指令影响标志位OF位则根据操作数的符号及其变化情况来设置:若两个操作的符号相同而结果的符号与相反时OF=1,否则OF=0CF位可以用来表示无符号数的溢出,由于无符号数的最高有效位只有数值意义而无符号意义,所以从该位产生的进位应该是结果的实际进位值,但是有限数的范围内就说明了结果。

(1)带进位加法指令ADD(Add with Carry )带进位加法指令的格式如下:ADC OPRD1,OPRD2OPRD1←OPRD1+OPRD2+CF例如:下列指令序列执行两个双精度的加法.设目的操作数放在DX和AX寄存器,其中DX存放高位字.源操作数存放在BX,CX中,其中BX存放高位字.如指令执行前:(DX)=0002H, (AX)=0F365H(BX)=0005H, (CX)=0E024H指令序列为: ADD AX,CXADC DX,BX执行第一条指令后:(AX)=0D389H, SF=1,ZF=0,ZF=1,OF=0执行第二条指令后:(DX)=0008H, SF=0,ZF=0,CF=0,OF=0则该指令序列执行完后(DX)=0008H, (AX)=D389H(3)加1指令INC (INCrement)加1指令的格式如下:INC OPRD这条指令完成对操作数OPRD加1,然后把结果送回OPRD,即:OPRD←OPRD+1操作数OPRD可以是通用寄存器,也可以是存储单元.这条指令执行的结果影响标志ZF,SF,OF,PF和AF,但它不影响CF.该指令主要用于调整地址指针和计数器.例如:写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令.要求使用以下几种寻址方式:1.寄存器间接寻址 MOV BX,OFFSET BLOCKADD BX,000AH MOV DX,[BX]2,寄存器相对寻址 MOV BX,OFFSET BLOCKMOV DX,[BX+000AH](3)减法指令SUB(SUBtraction)减法指令的格式如下:目的源SUB OPRD1,OPRD2执行的操作:(OPRD1)←(OPRD1)-(OPRD2)例如:SUB [SI+14H],0136指令执行前(DS)=3000H,(SI)=0040H,(30054H)=4336指令执行后(30054H)=4200HSF=0,ZF=0,CF=0,OF=0例如:SUB DH,[BP+4]指令执行前(DH)=40H,(SS)=0000H,(BP)=00E4H,(000E8H)=5AH指令执行后(DH)=0E7H,SF=1,ZF=0,CF=1,OF=0此指令影响标志位CF位说明无符号数想减的溢出,同时它又是被减数的最高有效位向高位的借位,OF位则说明带符号的溢出.减法的OF位的设置方法为:若两个数的符号相反,而结果的符号与减数相同则OF=1,说明结果是错误的.(4)带借位减法指令SBB(SuBtract with Borrow)带借位指令的格式如下:SBB OPRD1,OPRD2执行的操作:(OPRD1)←(OPRD1)-(OPRD2)-CF例如:SBB AL,DLSBB DX,AX该指令主要用于多字节相减的场合(5)减1指令DEC(DECreinent)减1指令的格式如下:DES OPRD执行的操作:(OPRD)←(OPRD)-1例如:DEC VARB ; VARB是字节变量操作数OPRD可以是通用寄存器,也可以是存储单元。

相关文档
最新文档