当前位置:文档之家› 汇编指令手册

汇编指令手册

汇编指令手册
汇编指令手册

8086/8088指令系统

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

大多数指令既能处理字数据,又能处理字节数据;

算术运算和逻辑运算不局限于累加器,

存储器操作数也可直接参加算术逻辑运算。

8086/8088的指令系统可分为如下六个功能组:

(1)数据传送

(2)算术运算

(3)逻辑运算

(4)串操作

(5)程序控制

(6)处理器控制

汇编语言语句的一般格式。指令语句可由四部分组成,一般格式如下:[标号:] 指令助记符[操作数1] [操作数2] [;注释]

指令是否带有操作数,完全取决于指令本身标号的使用取决于程序的需要,

标号只被汇编程序识别,它与指令本身无关。

(一)数据传送指令

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

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

1,传送指令

其格式如下:MOV DST,SRC

目的,源

源操作数可以是累加器,寄存器,存储单元以及立即数,

而目的操作数可以是累加器,寄存器和存储单元。传送不改变源操作数。

传送指令能实现下列传送功能:

(1)CPU内部寄存器之间的数据传送。例如:

MOV AH,AL

MOV DL,DH

MOV BP,SP

MOV AX,CS

注意:源和目的操作数不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP即不能作为源,也不能作为目的。注意,这种例外永远存在。

(二)交换指令

利用交换指令可方便地实现通用寄存器与通用寄存器或存储单间的数据交换,交换指令的格式如下:

XCHG OPRD1,OPRD2

此指令把操作数OPRD1R的内容与操作数OPRD2的内容交换。操作数同时是字节或字。

例如:

XCHG AL,AH;XCHG SI,BX

OPRD1和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)=1234H

32位地址指针的偏移部分存储在双字变量的低地址字中,段值部分存储在高地址中。

例如: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)+2

POP 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 ,0C1H

SAHF ; CF=1,PF=0,AF=0,ZF=1,SF=1

3,指令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=0

CF位可以用来表示无符号数的溢出,由于无符号数的最高有效位只有数值意义而无符号意义,所以从该位产生的进位应该是结果的实际进位值,但是有限数的范围内就说明了结果。

(1)带进位加法指令ADD(Add with Carry )

带进位加法指令的格式如下:

ADC OPRD1,OPRD2

OPRD1←OPRD1+OPRD2+CF

例如:下列指令序列执行两个双精度的加法.

设目的操作数放在DX和AX寄存器,

其中DX存放高位字.源操作数存放在BX,CX中,其中BX存放高位字.

如指令执行前:

(DX)=0002H, (AX)=0F365H

(BX)=0005H, (CX)=0E024H

指令序列为: ADD AX,CX

ADC 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 BLOCK

ADD BX,000AH MOV DX,[BX]

2,寄存器相对寻址 MOV BX,OFFSET BLOCK

MOV DX,[BX+000AH]

(3)减法指令SUB(SUBtraction)

减法指令的格式如下:

目的源

SUB OPRD1,OPRD2

执行的操作:(OPRD1)←(OPRD1)-(OPRD2)

例如:SUB [SI+14H],0136

指令执行前(DS)=3000H,(SI)=0040H,(30054H)=4336

指令执行后(30054H)=4200H

SF=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,DL

SBB DX,AX

该指令主要用于多字节相减的场合

(5)减1指令DEC(DECreinent)

减1指令的格式如下:

DES OPRD

执行的操作:(OPRD)←(OPRD)-1

例如:

DEC VARB ; VARB是字节变量

操作数OPRD可以是通用寄存器,也可以是存储单元。在相减时,把操作数作为一个无符号数对待。

这条指令执行的结果影响标志ZF,SF,OF,PF和AF,但不影响CF。

该指令主要用于调整地址指针和计数器。

(6)取补指令NEG(NEGate)

取补指令的格式如下:

NEG OPRD

这条指令对操作数取补,就是用零减少操作数OPRD,再把结果送回OPRD。

执行的操作:(OPRD)←0-(OPRD)

例如:

NEG AL

NEG VARW[SI];有效地址就是VARW的位移加SI的值。

如在字节操作时对取补,或在字操作时对-32768取补,则操作数不变,

但OF被置为1。其它均为何0。

操作数可以是通用寄存器,也可以是存储单元。

此指令的执行结果影响CF,ZF,SF,OF,AF和PF,操作数为0时,求补运算的结果使CF=0,其它情况则均为1。

(7)比较指令CMP (CoMPare)

比较指令的格式如下:

CMP OPRD1,OPRD2

这条指令完成操作数OPRD1减去操作数OPRD2,运算结果不回送到OPRD1。

但影响标志CF,ZF,SF,OF,AF和PF。

例如: CMP SL,DI

CMP CL,5

CMP DX,[BP-4]

比较指令主要用于比较两个数的关系,是否相等,谁大谁小。

执行了比较指令后,可根据ZF是否置位,判断两者是否相等。

如果两者是无符号数,则可根据CF判断大小;

如果两者是有符号数,则要根据SF和OF判断大小。

(七)乘除运算指令

乘除运算指令分为无符号运算和有符号数运算指令,这点与加减运算指令不同。乘除运算指指令对标志位的影响有些特别。

(1)乘法指令

在乘法指令中,一个操作数总是隐含在寄存器AL(8位数相乘)或者AX(16位数相乘)中,另一个操作数可以采用除立即数方式以外的任一种寻址方式。

1,无符号乘法指令MUL(MULLtiply)

无符号指令的格式如下:MUL OPRD

在乘法指令里,目的操作数必须是累加器。

两个8位数相乘得到的是16位乘积存放在AX中,两个16位数相乘得到的是32位乘积存放在DX,AX中,DX存放放高位字,AX存放低位字。

如果乘积结果的高半部分(字节相乘时为AH,在字相乘时为DX)不等于零,则标志CF=1,OF=1,否则CF=0,OF=0。所以如果CF=1和OF=1表示在AH或DX中含有结果的有效数,

该指令对其它标志位无定义。

2,有符号数乘法指令IMUL(sIgned MULtiply)

有符号数乘法指令的格式如下:

IMUL OPRD

这条指令把被乘数和乘数均作为有符号数,此外与指令MUL完全类似。

如果乘积结果的高半部分(字节相乘时为AH,在字相乘时为DX)不是低半部分的符号扩展,则标志CF=1,OF=1;

否则CF=0,OF=0。

所以如果CF=1和OF=1表示在AH或DX中含有结果的有效数。该指令对其字标志位无定义。

例如:如(AL)=0B4H,(BL)=11H赤执行指令

IMUL BL 和 MUL BL后的乘积值

(AL)=0B4H 为无符号的180D,带符号数的-76D

(BL)=11H 为无符号数的17D,带符号数的17D

执行IMUL BL的结果为(AX)=0FAF4H=-1292D

执行MUL BL的结果为(AX)=0BF4H=3606D

(2)除法指令

在除法指令中,被除数总是在隐含在寄存器AX(除数是8位)或者DX和AX(除数是16位)中,另一个操作数可以采用除立即数方式外的任一种寻址方式。1,无符号数除法指令DIV (DIVision)

无符号数除法指令的格式如下:

DIV OPRD 16位 8位

字节操作表示为:(AL)←(AX)/(OPRD)的商;(AH)←(AX)/(OPRD)的余数字操作表示为:(AX)←(DX,AX)/(OPRD)的商;(DX)←(DX,AX)/(OPRD)的余数。

2,有符号数除法指令IDIV(Signed DIVision)

有符号数除法指令的格式如下:

IDIV OPRD

这条指令把被除数和除数均作为有符号数,此外与指令DIV完全类似。

当除数为0,或者商太大

(字节除时超过127,字除时超过32767)

(字节除时小于-127,字除时小于-32767)

则引起0号中断。

例如:设(AX)=0400H,(BL)=0B4H,即(AX)为无符号数的1024D,带符号数的1024D,(BL)为无符号的180D,带符号数的-76D

执行 DIV BL的结果是:

(AH)=7CH=124D 余数

(AL)=05H=5D 商

执行IDIV BL 的结果是:

(AH)=24H=36D 余数

(AL)=0F3H=-13 商

(八)逻辑运算和移位指令

(1)逻辑运算指令

1,否操作指令NOT

否操作指令的格式如下:

NOT OPRD

这条指令把操作数OPRD取反,然后送回OPRD。

操作数OPRD可以是通用寄存器,也可以是存储器操作数。此指令对标志没有影响。

2,与操作指令AND

与操作指令的格式如下:

AND OPRD1,OPRD2

运算方法:“与”操作中有一位是1,其结果为0,有两位是1,其结果为1。

这条指令对两个操作数进行按位的逻辑“与”运算,结果送到目的操作数OPRD1。该指令执行以后,标志CF=0,标志OF=0,标志PF,ZF,SF 反映运算结果,标

志AF未定义。

某个操作数自己与自己相“与”,则值不变,但可使进位标志CF清0。

与操作指令主要用于在使一个操作数中的若干位维持不变,而另外若干位清为0的场合。

把要维持不变的这些与“1”相与,而把要清为0的这些位与“0”相“与”就能达到这样的目的。

3,或操作指令OR

或操作指令的格式如下:

OR OPRD1,OPRD2

此指令相当于OPRD1+OPRD2。

运算方法:或操作时有一位是1的其结果为1(和与操作相反)

这格指令执行后,标志CF=0,标志OF=0,标志PF,ZF,SF反映运算结果,标志AF未定义。

某个操作数自已与自己相“或”,则值不变,但可使进位标志清0。

或操作指令主要用在使一个操作数中的若干位维持不变。

而另外若干位位置为1的场全。

把要维持不变的这些位与“0”相“或”,而把要置为1的这些位与“1”相“或”就能达到这样的目的(正好和与操作相反)。

4,异或操作指令XOR

异或指令的格式如下:

XOR OPRD1,OPRD2

运算方法:两位数相同时为0,有一位为0,一位为1时其结果为1

这条指令对两个操作数进行近位的逻辑“异或”运算,结果送到目的操作数OPRD1,该指令执行以后,标志CF=0,标志OF=0,标志PF,ZF,SF反映运算结果,标志AF未定义。

某个操作数自己与自己相“异或”,则结果为0,并可使进位标志CF清0。

异或操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位置取反的场合。

把要维持不变的这些与“0”相“异或”,而把要取反的这些位与“1”相“异或”就能达到这样的目的。

5,测试指令TEST

测试指令的格式如下:

TEST OPRD1,OPRD2

这条指令和指令AND类似,也把两个操作数进行按位“与”,但结果不回送操作数OPRD1。

该指仅执行以后,标志ZF,PF和SF反映运算结果。

标志CF和OF被清0。

该指令通常用于检测某些位是否为1,但又不希望改变原操作数的场合。

例如:要检AL中的位6或位2是否有一位为1,可以使用如下的指令:

TEST AL,01000100B ;符号B表示二进制

(44H)

如果位6和位2全为0,那么执行上面的指令后,ZF被置1,否则ZF被清0。

(2)一般移位指令

1,算术左移或逻辑左移指令SAL/SHL

(Shift Arithmetic Letf/Shift logic Left)

只移位1的话可以直接写,移位多次的话要把移位数放入CL中。

算术左移和逻辑左移进行相同的动作,尽管为了方便提供两个助记符,但只有一条机器指令,具体格式如下:

SAL OPRD,M 或者

SHL OPRD,M

算术左移SAL/逻辑左移SHI指令把操作数OPRD左移m,每移动一位,左边用0补足,移出的最高位进入标志CF。

例如:MOV AL,8CH

SHL AL,1 ;AL=18H,CF=1,PF=1,ZF=0,SF=0,OF=1

MOV CL,6

SHL AL,CL ;AL=0,CF-0,PF=1,ZF=1,SF=0,OF=0

移位时要把数值先转换成二进制

只要左移以后的结果未超过一个字节或一个字的表达范围,那么每左移一次,原操作数每一位的权增加了一倍,也即相当于原数乘2。

例如:实现把寄在器AL中的内容(设为无符号数)乘以10,结果存放在AXKH 。XOR AH,AH ;(AH)=0

SHL AL,1 ;2X

MOV BX,AX ;暂存2X

SHL AX,1 ;4X

SHL,AX,1 ;8X

ADD AX,BX ;8X+2X

2,算术右移指令SAR(Shift Arithmetic Right)

算术右移指令的格式如下:

SAR OPRD,m

该指令使操作数右移m位,同进每移一位,左边的符号位保持不变,移出的最代位进标位CF。

(无符号数用0补足,有符号数用1补足)

例如: MOV CL,5

SAR [DI],CL

如指令执行前:(DS)=0F800H,(DI)=180AH,(0F980A)=0064H

如指令执行后:(0F980A)=0003H,CF=0

对于有符号和无符号数而言,算术右移花接一位相当于除以2。

3,逻辑右移指令SHR(Shift logic Right)

逻辑右移指令的格式如下:

SHR OPRD,m

该指令使操作数右移m位,同时每移一位,左边用0补足,移出的最低位进入标志位CF.对于无符号数而言,逻辑右移一位相当于除以2,在汇编语言程序设计中,经常需要对以位单位的数据合并和分解处理.

如下图试例:

4,循环移位指令

8086/8088有四条循环移位指令

这些指令可以一次只移一位,也可以一次移多位.

如移多位,那么移位的次数存放在CL寄存器中.

这些指令的格式如下:

ROL OPRD,m ; 左移指令

ROR OPRD,m ; 右移指令

RCL OPRD,m ; 带进位左移

RCR OPRD,m ; 带进位右移

其中,m是移位次数,或为1或为CL,操作数OPRD可以是通用寄存器,可以是存储器操作数.

前两条循环指令没有把进位标志CF包含在循环中;后两条循环指令把进位标志包含在循环的环中,即作为整个循环的一部分.

这些指令只影响标志CF和OF.

对于不带进位的循环移位指令而言,如果操作数是8位后,操作数就能复原;如果操作是16位后,操作数就能复原,对于带进位的循环移位指公而言,如果操作数是8位,那么在移位9次后,操作就能复原;如果操作是16位,那么在移位7次后,操作就能复原.

例如:

MOV CL,9

RCR AL,CL

通过带进位循环移位指令和其他移位指令的结全,可以实再现两个或更多个操作数的重新结全.

例如:实现把AL的高4位与低4位交换

ROL AL,1

ROL AL,1

ROL AL,1

ROL AL,1

例: 把AL的最低位送入BL的最低位,保持AL不变;

ROR BL,1

ROR AL,1

RCL BL,1

ROL AL,1

例如(AX)=0012,(BX)=0034H,要求把它们装配在一起形成(AX)=1234H

MOV CL,8

ROL AX,CL

ADD AX,BX

(九)转移指令

(1)无条件转移指令

1,无条件段内直接转移指令

无条件段内直接转移指令的使用格式如下:

JMP 标号

这条指令使控制无条件转移到标号地址处。

例如:NEXT: MOV AX,CX

........

JMP NEXT; 转NEXT处

........

JMP OVER; 转OVER处

........

OVER: MOV AX,1

无条件段内直接转移指令格式如下:

(标号所指定指令的开始地址)的差值

因此,在执行无条件段内转移指令时,实际的动作是把指令中的地址差加到指令指针IP上,使IP之内容为目标地址,从而达到转移的目的.

如下图所示:

2,无条件段内间接转移指令

指令的格式如下:

JMP OPRD

这条指令使控制无条件地转移到由操作数OPRD的内容给定的目标地址处.

操作数OPRD可以是通用寄存器,也可以是字存储单元.

如下图所示:

3,无条件段间直接转移指令

无条件段间直接转移指令的使用格式如下:

JMP FAR PTR 标号

这条指令使控制无条件地转移到标与所对应的地址处,标号前的符号”FAR PTR”向汇编程序说明这是段间转移.

例如: JMP FAR PAT EXIT;

EXIT是定义在另一个代码段中的标号

无条件段间直接转移指令的具体动作是把指令中包含的目标地址的段值和偏移

分别置入CS和IP.

这种在指令中直接包含转移目标的转移方式称为绝对转移.

4,无条件段间间接转移指令.

无条件段间音接转移指令的格式如下: JMP OPRD

这条指令使控无条件地转移到由操作数OPRD的内容给定的目标处,操作数必须

是双字存储单元.

例如: JMP DWORD PTR [1234H]; 双字存储单元的低字内容送给IP

;双字存单元的高字内容送给CS.

(2)条件转移指令

8086/8088提供了大量的条件转移指令,它们根据某标志位或某些标志位的逻辑运算来判别条件是否成立.如果条件成立,则转移,否则继续执行.

所有条件转移都中介段内转移.条件转移不影响标志.

有些条件转移指令有两个助记符,还有些条件转移指令有三个助记符.

使用多个助记符的目的是便于记忆和使用.

条件转移指令是用得最多的转移指令.通常,在条件转移指令前.总有用于有关判别的指令.

下面的程序测试AX的低四位是否全是0,如果均是0,那么使CX=0,否则CF=-1. MOV CX,-1 ;先使CX=-1

TEST AX,0FH ;测试AX的低四位

JNZ NZERO ;不全为0则转移

MOV CX,0 ;全为0进使CX=0

NZERO:………

从表中可以看出有符号数间的次序关系称为:大于(G),等于(E)和小于(L)来表示.

无符号数间的次序关系称为:高于(A),等于(E)和低于(B).

所以,在使用时要注意区分它们.

下面程序实现两个无符号数(设在AX和BX中)的比较,把较大的数存放到AX中,把较小的数存放在BX中.

CMP AX,BX ;比较两个数的大小,结果不回送AX

JAE OK ;无符号数比较大小转移

XCHG AX,BX

OK:………

如果要比较的两个数是有效号数,则可用下面的程序片段:

CMP AX,BX

JGE OK ;有符号数比较大小转移

XCHG AX,BX

OK:………

无符号数之间大小比较后的条件转移指令和有符号之间的大小比较后的条件转移指令测试的标志完全不同.

无符号数和有符号数,两数是否相等可由ZF标志的反映.

进位标志CF反映两个无符号比较后的大小关系.

两个有符号数比较后的大小关系由符号标志SF和溢出标志OF一起来反映.

设要比较的两个不相等的有符号数A和B分别存放在寄存器AX和BX中.

执行指令”CMP AX,BX”后,

标志SF及OF的设置情况和两数的大小情况如下:

当没有溢出(OF=0)时,若SF=0,则A>B;若SF=1,则A

当产生溢出(OF=1)时,若SF=0,则AB

(3)循环指令

利用条件转移指令和无条件转移指令可以实现循环,但为更加方便于循环的实现,8086/8088还提供了四条用于实现循环的循环指令.

循环指令类似于条件转移指令,不公属于段内转移,而且也采用相对转移方式. 即通过在IP上加一个地址差的方式实现转移.

循环指令中也只用一个字节表示地址差.

所以,如果以循环指令本身作为基准,那么循环转移的范围在-126至+129之间. 循环指令不影响各标志.

1,计数循环指令LOOP

计数循环指令的格式如下: LOOP 标号

这条指令使寄存器CX的值减1,如果结果不等于0,则转移到标号,否则顺序执行. 该指令类似于如下两条指令: DEC CX

JNZ 标号

通常在利用LOOP指令构成循环是时,先要设置好计数器CX的初值,即循环次数.由于首先进行CX寄存器减1操作,再判结果是否为0,所以最多可循环65536次如下程序片段实现把从偏移1000H开始的512个字节的数据复制到从偏移3000H 开始的缓冲区中(假设在当前数据段中进行移动)

MOV SI,1000H ;置源指针

MOV DI,3000H ;置目标指针

MOV CX,512 ;置计数初值

NEXT: MOV AL,[SI] ;将SI的内容送到AL中

INC SI ;SI加1

MOV [DI],AL ;将AL送入DI的内容中

INC DI ;DI加1

LOOP NEXT ;控制循环

2,等于/全零循环指令LOOPE/LOOPZ

等于/全零循环指令有两个助记符,格式如下:

LOOPE 标号

或者 LOOPN 标号

这条指令使寄存器CX的值减1,当为0或相等时,(且零标志ZF等于1),那么则转移到标号,否则顺序执行.

注意指令本身寮施的寄存器CX减1操作不影响标志.

如下:在字符串中查找第一个非”A”字符,设字符串长度已保存CX中,并且DS:DI指向字符串.如果找到,那么使BX指向该非”A”字符,如果找不到,那么使BX=0FFFFH.

MOV AL,”A”

DEC DI

NEXT: INC DI

CMP AL,[DI]

LOOPE NEXT

MOV BX,DI

JNE OK

MOV BX,-1

OK:………

3,不等于/非零循环指令LOOPNZ

不等于/非零循环有两个助记符符,格式如下:

LOOPNE 标号

或者 LOOPNZ 标号

这条指令使寄存器CX的值减1,如果结果不为0不相等时,并且零标志ZF等于0,那么则转移到标号.否则顺序执行.(CX减1操作不影响标志)

4,跳转指令JCXZ

跳转指令也可认为是条件转移指令.跳转指令的格式如下:

JCXZ 标号

该指令实现当寄器CX的值等于0时转移到标号,否则顺序执行.

通常该指令用在循环开始前,以便在循环次数为0时,跳过循环体.

例如: …………

JCXZ OK ;如果循环计数为0,就跳过循环

NEXT: …………

…………

LOOP NEXT ;根据计数控制循环

OK: …………

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

天正建筑命令大全整理篇详解

天正建筑命令快捷键大全一 1 轴网菜单 2 重排轴号CPZH 改变图中一组轴线编号,该组编号自动进行重新排序 3 4 倒排轴号DPZH 倒排轴线编号,适用于特定方向的立剖面轴线绘制 5 单轴变号DZBH 只改变图中单根轴线的编号 6 绘制轴网HZZW 包括旧版本的直线轴网和弧线轴网 7 两点轴标LDZB 选择起始轴与结束轴标注其中各轴号与尺寸 8 墙生轴网QSZW 在已有墙中按墙基线生成定位轴线 9 删除轴号SQZH 在已有轴网上删除轴号, 其余轴号自动重排 10 添补轴号TBZH 在已有轴号基础上,关联增加新轴号 添加径轴TJJZ 在已有圆弧轴网上添加新的径向轴线,并插入轴号 11 12 添加轴线TJZX 在已有轴网基础上增加轴线,并插入轴号 13 绘制轴网HZZW 包括旧版本的直线轴网和弧线轴网 逐点轴标ZDZB 逐个选择轴线,标注不相关的多个轴号 14 15 轴线裁剪ZXCJ 用矩形或多边形裁剪轴网的一部分 轴改线型ZGXX 切换轴线的线型 16 墙体菜单 17 边线对齐BXDQ 墙基线不变, 墙线偏移到过给定点 18 19 单线变墙DXBQ 将已绘制好的单线或者轴网转换为双线表示的墙对象 20 倒墙角DQJ 将转角墙按给定半径倒圆角生成弧墙或将墙角交接好 21 等分加墙DFJQ 将一段墙按轴线间距等分, 垂直方向加墙延伸到给定边界 22 改墙厚GQH 批量改墙厚: 墙基线不变,墙线一律改为居中 23 改外墙高GWQG 修改已定义的外墙高度与底标高, 自动将内墙忽略 24 改外墙厚GWQH 注意修改外墙墙厚前, 应先进行外墙识别,否则命令不会执行 25 绘制墙体HZQT 连续绘制双线直墙、弧墙,包括幕墙、弧墙、矮墙、虚墙等墙类型 26 墙保温层JBWC 在墙线一侧添加保温层或撤销保温层 27 加亮外墙JLWQ 亮显已经识别过的外墙 28 矩形立面JXLM 在立面显示状态, 将非矩形的立面部分删除, 墙面恢复矩形 29 净距偏移JJPY 按墙体净距离偏移平行生成新墙体 30 平行生线PXSX 在墙任意一侧, 按指定偏移距离生成平行的线或弧 31 墙面UCS QMUCS 临时定义一个基于所选墙面(分侧)的UCS, 在指定视口转为立面显示32 墙端封口QDFK 打开和闭合墙端出头的封口线 33 墙体造型QTZX 构造平面形状局部凸出的墙体,附加在墙上形成一体 34 识别内外SBNW 自动识别内外墙, 适用于一般情况 35 修墙角XQJ 清理互相交叠的两道墙或者更新融合同材质的墙与墙体造型 36 异型立面YXLM 在立面显示状态, 将墙按给定的轮廓线切割生成非矩形的立面 37 指定内墙ZDNQ 人工识别内墙, 用于内天井、局部平面等无法自动识别的情况 38 指定外墙ZDWQ 人工识别外墙, 用于内天井、局部平面等无法自动识别的情况门窗菜单 39 40 编号复位BHFW 把用户移动过的门窗编号恢复到默认位置

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

C语言指令汇总

●一、数据传送类指令 指令格式功能简述字节数周期 MOV A,Rn 寄存器送累加器1 1 MOV Rn,A 累加器送寄存器1 1 MOV A ,@Ri 内部RAM单元送累加器1 1 MOV @Ri ,A 累加器送内部RAM单元1 1 MOV A ,#data 立即数送累加器2 1 MOV A ,direct 直接寻址单元送累加器2 1 MOV direct ,A 累加器送直接寻址单元2 1 MOV Rn,#data 立即数送寄存器2 1 MOV direct ,#data 立即数送直接寻址单元3 2 MOV @Ri ,#data 立即数送内部RAM单元2 1 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换1 1 XCH A ,@Ri 累加器与内部RAM单元交换1 1 XCHD A ,direct 累加器与直接寻址单元交换2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换1 1 SWAP A 累加器高4位与低4位交换1 1 POP direct 栈顶弹出指令直接寻址单元2 2 PUSH direct 直接寻址单元压入栈顶2 2 ●算术运算类指令 ADD A,Rn 累加器加寄存器1 1 ADD A,@Ri 累加器加内部RAM单元1 1 ADD A,direct 累加器加直接寻址单元2 1 ADD A,#data 累加器加立即数2 1 ADDC A,Rn 累加器加寄存器和进位标志1 1 ADDC A,@Ri 累加器加内部RAM单元和进位标志1 1 ADDC A,#data 累加器加立即数和进位标志2 1 ADDC A,direct 累加器加直接寻址单元和进位标志2 1 INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接寻址单元加1 2 1 INC @Ri 内部RAM单元加1 1 1 INC DPTR 数据指针加1 1 2 DA A 十进制调整1 1 SUBB A,Rn 累加器减寄存器和进位标志1 1 SUBB A,@Ri 累加器减内部RAM单元和进位标志1 1 SUBB A,#data 累加器减立即数和进位标志2 1

photoshop快捷键命令大全汇总

photoshop快捷键命令大全汇总一、文件: 新建【CTRL】+【N】 打开【CTRL】+【O】 打开为【ALT】+【CTRL】+【O】 关闭【CTRL】+【W】 保存【CTRL】+【S】 另存为【CTRL】+【SHIFT】+【S】 另存为网页格式【CTRL】+【ALT】+【S】 打印设置【CTRL】+【ALT】+【P】 页面设置【CTRL】+【SHIFT】+【P】 打印【CTRL】+【P】 退出【CTRL】+【Q】 二、编辑: 撤消【CTRL】+【Z】

向前一步【CTRL】+【SHIFT】+【Z】 向后一步【CTRL】+【ALT】+【Z】 退取【CTRL】+【SHIFT】+【F】 剪切【CTRL】+【X】 复制【CTRL】+【C】 合并复制【CTRL】+【SHIFT】+【C】 粘贴【CTRL】+【V】 原位粘贴【CTRL】+【SHIFT】+【V】 自由变换【CTRL】+【T】 再次变换【CTRL】+【SHIFT】+【T】 色彩设置【CTRL】+【SHIFT】+【K】 三、图象 调整→色阶【CTRL】+【L】 调整→自动色阶【CTRL】+【SHIFT】+【L】 调整→自动对比度【CTRL】+【SHIFT】+【ALT】+【L】

调整→曲线【CTRL】+【M】 调整→色彩平衡【CTRL】+【B】 调整→色相/饱和度【CTRL】+【U】 调整→去色【CTRL】+【SHIFT】+【U】调整→反向【CTRL】+【I】 提取【CTRL】+【ALT】+【X】 液化【CTRL】+【SHIFT】+【X】 四、图层 新建图层【CTRL】+【SHIFT】+【N】 新建通过复制的图层【CTRL】+【J】 与前一图层编组【CTRL】+【G】 取消编组【CTRL】+【SHIFT】+【G】 合并图层【CTRL】+【E】 合并可见图层【CTRL】+【SHIFT】+【E】

STM 常用汇编指令

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。 ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉} opcode操作码;指令助记符,如LDR、STR等。 cond可选的条件码;执行条件,如EQ、NE等。 S可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。 Rd目标寄存器。 Rn存放第1操作数的寄存器。 operand2第2个操作数 arm的寻址方式如下: 立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址 这里不作详细描述,可以查阅相关文档。 数据处理指令 Load/Store指令 程序状态寄存器与通用寄存器之间的传送指令 转移指令 异常中断指令 协处理器指令 在S3C2410、S3C2440的数据手册中对各种汇编指令有详细的描述;这里只对较常见的作写介绍。 1、相对跳转指令:b、bl 这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。 这两条指令的可跳转范围是当前指令前后32M。 b funa .... funa: b funb ....

funb: .... 2、数据传送指令mov,地址读取伪指令ldr mov指令可以把一个寄存器的值赋给另外一个寄存器,或者把一个常数赋给寄存器。 mov r1,r2 mov r1,#1024 mov传送的常数必须能用立即数来表示。当不能用立即数表示时,可以用ldr命令来赋值。ldr是伪命令,不是真实存在的指令,编译器会把它扩展成真正的指令;如果该常数能用“立即数”来表示,则使用mov指令,否则编译时将该常数保存在某个位置,使用内存读取指令把它读出来。 ldr r1,=1024 3、内存访问指令ldr、str、ldm、stm ldr既可以指低至读取伪指令,也可以是内存访问指令。当他的第二个参数前面有'='时标伪指令,否则表内存访问指令。 ldr指令从内存中读取数据到寄存器,str指令把寄存器的指存储到内存中,他们的操作数都是32位的。 ldr r1,[r2,#4] ldr r1,[r2] ldr r1,[r2],#4 str r1,[r2,#4] str r1,[r2] str r1,[r2],#4 寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。多寄存器存取指令的汇编格式如下: LDM/STM{}Rn{!}, 4、加减指令add、sub add r1,r2,#1 sub r1,r2,#1 5、程序状态寄存器的访问指令msr,mrs ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操作来实现的。这两条指令分别是: 状态寄存器到通用寄存器的传送指令(MRS) 通用寄存器到状态寄存器的传送指令(MSR) 其汇编格式如下: MRS{}Rd,CPSR|SPSR 其汇编格式如下:

CMD常用命令大全(最新整理)

说起cmd大家都很熟悉吧很有用哦这里我为大家接扫常见的命令 dos命令[只列出我们工作中可能要用到的] cd\ '返回到根目录 cd.. '返回到上一级目录 1、cd 显示当前目录名或改变当前目录。 2、dir 显示目录中的文件和子目录列表。 3、md 创建目录。 4、del 删除一或数个文件。 5、chkdsk 检查磁盘并显示状态报告。 6、cacls 显示或者修改文件的访问控制表(ACL) 7、copy 将一份或多份文件复制到另一个位置。 8、date 修改日期 9、format 格式化磁盘 10、type 显示文本文件的内容。 11、move 移动文件并重命名文件和目录。 12、expand 展开一个或多个压缩文件。 13、ren 重命名文件。 14、attrib 显示或更改文件属性。 15、time 显示或设置系统时间。 16、at at命令安排在特定日期和时间运行命令和程序。要使用AT 命令,计划服务必须已在运行中。 17、net [user],[time],[use] 多,自己去查 18、netstat 显示协议统计和当前tcp/ip连接 19、nbtstat 基于NBT(net bios over tcp/ip)的协议统计和当前tcp/ip连接 20、route 操作和查看网络路由表 21、ping 就不说了,大家都熟悉吧 22、nslookup 域名查找 23、edit 命令行下的文本编辑器 24、netsh强大的命令行下修改tcp/ip配置的工具 25、fdisk 相信现在用的人比较少了,不过在没有其他工具的情况,他还是有用的 更多: attrib 设置文件属性 ctty 改变控制设备 defrag 磁盘碎片整理 doskey 调用和建立DOS宏命令 debug 程序调试命令

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机汇编指令集(附记忆方法)

51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q Move Code )读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部 RAM 勺数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令( 8 种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加 1; DEC(Decrement) 减 1; MUL(Multiplication 、Multiply) 乘法; DIV(Division 、Divide) 除法; 三、逻辑运算类指令( 10 种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) SWAP (Swap) 低 4 位与高 4 位交换; 四、控制转移类指令( 17 种助记符) ACALL ( Absolute subroutine Call )子程序绝对调用; LCALL ( Long subroutine Call )子程序长调用; RET ( Return from subroutine )子程序返回; RETI ( Return from Interruption )中断返回; SJMP ( Short Jump )短转移; AJMP ( Absolute Jump )绝对转移; LJMP( Long Jump )长转移; CJNE (Compare Jump if Not Equal) 比较不相等则转移; DJNZ (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; 带进位循环左移; 带进位循环右移;

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

(整理)广州数控指令代码大全

广州数控指令代码大全 2011-01-31 02:13 GSK980TA/D编程教材 《一》编程的基本概念 《二》常用G代码介绍 《三》单一固定循环 《四》复合型固定循环 《五》用户宏程序 《六》螺纹加工 《七》T代码及刀补 《八》F代码及G98、G99 《九》S代码及G96、G97 (注意:本教材仅供学习参考,实际操作编程时应以广数 GSK980T车床数控系统使用手册为准)2007年9月 《一》编程的基本概念: 一个完整的车床加工程序一般用于在一次装夹中按工艺要求完成对工件的加工,数控程序包括程序号、程序段。 (一)程序号:相当于程序名称,系统通过程序号可从存储器中多个程序中识别所要处理的程序,程序号由字母O及4位数字组成。

(二)程序段:相当于一句程序语句,由若干个字段组成,最后是一个分号(;)录入时在键入EOB键后自动加上。整个程序由若干个程序段构成,一个程序段用来完成刀具的一个或一组动作,或实现机床的一些功能。 (三)字段(或称为字):由称为“地址”的单个英语字母加若干位数字组成。根据其功能可分成以下几种类型的字段: ▲程序段号:由字母N及数字组成,位于程序段最前面,主要作用是使程序便于阅读,可以省略,但某些特殊程序段(如表示跳转指令的目标程序段)必须标明程序段号。 为了便于修改程序时插入新程序段,各句程序段号一般可间隔一些数字(如N0010、N0020、N0030)。 ▲准备功能:即G代码,由字母G及二位数字组成,大多数G 代码用以指示刀具的运动。(如G00、G01、G02) ▲表示尺寸(坐标值)的字段:一般用在G代码字段的后面,为表示运动的G代码提供坐标数据,由一个字母与坐标值(整数或小数)组成。字母包括: 表示绝对坐标:X、Y、Z 表示相对坐标:U、V、W 表示园心坐标:I、 J、 K (车床实际使用的坐标只有X、Z,所以Y、V、J都用不着) ▼表示进给量的字段:用字母F加进给量值组成,一般用在插补指令的程序段中,规定了插补运动的速度。

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

PIC16系列_单片机常用伪指令(汇编)

PIC 单片机端口电平变化中断使用必须注意的问题 PICC18使用说明 PIC 单片机常用伪指令 PIC单片机2009-02-19 11:16:40 阅读8 评论0 字号:大中小订阅 3.2.3 MPASM 的伪指令 我们在第一章中已经详细介绍了中档PIC 单片机的35 条指令,源程序的编写主要就是用这些基本的指令实现你的控制任务。但为了增加源程序的可读性和可维护性,我们引入了伪指令的概念。伪指令本身不会产生可执行的汇编指令,但它们可以帮组“管理”你编写的程序,其实用性和必要性绝不亚于35 条正真的汇编指令。我们在此着重介绍最常用的几种 伪指令。 #include 或include #include 伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置。 被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM 能够识别的。最经常被“include”的是针对PIC 单片机内部特殊功能寄存器定义的包含头文件,在MPLAB 安装后它们全部放在路径“ C:\Program Files\MPLAB IDE\MCHIP_Tools”下,每一个型号的PIC 单片机都有一个对应的预定义包含头文件,扩展名是“.inc”。除了一些符号预定义文件,你也可以把现有的其它程序文件作为一个代码模块直接“包含”进来作为自己程序的一部分。见例3-01。 #include ;把预定义的PIC16F877A 寄存器符号包含到此处 #include ”math.asm” ;把现有的程序文件包含进来作为自己代码的一部分 例3-01 请注意被包含文件的引用方式。一种是<>尖括号引用,这种引用意味着让编译器去默认的路径下寻找该文件,MPASM 默认的寄存器预定义文件存放路径即为上面提及的MPLAB 安装后的目录;另一种是””双引号引用,这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件。例3-01 中”math.asm”没有指定路径,即意味着在当前项目路径下寻找math.asm 文件。如果编译器找不到被包含的文件,将会有错误信息告 知。 请在你的源程序中尽量用MPLAB 标准头文件定义的寄存器符号。一来这些被定义的寄存器符号和芯片数据手册上的描述一一对应,理解起来即直观又容易;二来如果用你自己定义符号就缺乏一个大家能一起交流的标准平台,其他人要解读你的代码时将费时费力。故例3-01 中的首行#include 包含引用伪指令可以说是PIC 单片机程序编写时的标准必备。

51单片机汇编指令及伪指令小结

51单片机汇编指令小结

二、算术运算类指令

四、控制转移类指令类

五、位操作类指令 逻辑操作与字节中的一致

51汇编常用伪指令 https://www.doczj.com/doc/5314070107.html, 16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址; 2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB 88H,100,``7" , ``C"; 3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW 1234H, 7BH 名字EQU 表达式或名字=表达式:用于给一个表达式赋值或给字符串起名字。之后名字可用作程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数据串。例如:COUNT=10或SPACE EQU 10H 5.名字DATA 直接字节地址:给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串。同一单元可起多个名字。例如:ERROR DATA 80H 6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。例如:IO_POTR XDATA OCF04H 7.名字Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H 8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 注:DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中。

51单片机汇编指令集

1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

AT89S51单片机实例35例汇编+C语言对照带电路图及说明-闪烁灯

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011.txt大人物的悲哀在于他们需要不停地做出选择;而小人物的悲哀在于他们从来没有选择的机会。男人因沧桑而成熟,女人因成熟而沧桑。男人有了烟,有了酒,也就有了故事;女人有了钱,有了资色,也就有了悲剧。 当D不写时默认是放到F中吗?好像是. 更新:1,PIC16没有同或指令; 面向字节 ADDWF F,D ;寄存器加法指令,F+W→D 影响C,DC,Z 进位C为1表示有进位 INCF F,D ;寄存器加1指令F+1→D SUBWF F,D ;减法指令F-W→D 影响C,DC,Z 进位C为0表示有借位.则F

相关主题
文本预览
相关文档 最新文档