条件转移指令

合集下载

条件转移指令实验报告

条件转移指令实验报告

一、实验目的1. 理解条件转移指令的基本概念和作用。

2. 掌握条件转移指令在程序设计中的应用。

3. 通过实验加深对条件转移指令的理解和运用。

二、实验环境1. 硬件环境:计算机一台,编程软件(如Keil uVision、IAR EWARM等)。

2. 软件环境:适合单片机编程的编译器(如8051单片机编译器)。

三、实验内容本次实验主要涉及以下条件转移指令:1. 判A内容是否为0转移指令(JZ)。

2. 判A内容是否不等于0转移指令(JNZ)。

3. 比较转移指令(CJNE)。

四、实验步骤1. 准备工作- 在编程软件中创建一个新的项目,并设置好单片机的型号和编译器。

- 编写程序框架,准备实验代码。

2. 编写程序- 使用JZ指令实现一个简单的判断逻辑,例如:当R0寄存器的值等于0时,转移到标号L1,否则执行后续指令。

- 使用JNZ指令实现相反的逻辑,即当R0寄存器的值不等于0时,转移到标号L1,否则执行后续指令。

- 使用CJNE指令实现两个数的比较,并转移到相应的标号。

例如,将R0寄存器的值与立即数data进行比较,如果相等则执行后续指令,如果不相等则转移到标号L1。

3. 编译程序- 使用编译器对编写的程序进行编译,生成可执行文件。

4. 仿真运行- 在编程软件中加载可执行文件,进行仿真运行。

- 观察程序运行结果,验证条件转移指令是否按照预期工作。

5. 结果分析- 分析实验结果,确保条件转移指令按照预期执行。

- 对比JZ、JNZ和CJNE指令的执行效果,加深对它们之间差异的理解。

五、实验结果与分析1. JZ指令实验结果- 当R0寄存器的值为0时,程序转移到标号L1,执行相应指令。

- 当R0寄存器的值不为0时,程序顺序执行后续指令。

2. JNZ指令实验结果- 当R0寄存器的值不为0时,程序转移到标号L1,执行相应指令。

- 当R0寄存器的值为0时,程序顺序执行后续指令。

3. CJNE指令实验结果- 当R0寄存器的值与立即数data相等时,程序顺序执行后续指令。

微机原理指令汇总

微机原理指令汇总

我现将指令系统中各种助记符得英文全名写出来,各种助记符得记忆就会变得很简单o(∩_∩)o、、、在这之前,先说一下寄存器:数据寄存器分为: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):堆栈段寄存器;ES(Extra Segment):附加段寄存器。

汇编语言条件转移指令

汇编语言条件转移指令

汇编语言条件转移指令汇编语言中的条件转移指令是用于根据特定条件来改变程序的执行流程的指令。

这些指令根据条件的真假来决定是否进行转移,并根据转移的属性(如距离和方向)来选择要执行的下一条指令。

条件转移指令根据不同的条件进行分组,常见的条件转移指令有以下几种:1.无条件转移指令:无条件转移指令是指无论条件如何都会进行转移的指令。

其中,常见的无条件转移指令有“跳转指令”(JMP)和“保存返回地址指令”(CALL)。

-跳转指令(JMP):用于无条件地跳转到程序指定的地址。

-保存返回地址指令(CALL):用于调用子程序,并将返回地址保存在堆栈中,方便进行返回。

2.条件转移指令:条件转移指令是根据一个或多个特定条件的真假来进行跳转的指令。

常见的条件转移指令有以下几种:-等于指令(JE):如果两个操作数相等,则转移。

-不等于指令(JNE):如果两个操作数不相等,则转移。

-大于指令(JG):如果第一个操作数大于第二个操作数,则转移。

-大于等于指令(JGE):如果第一个操作数大于等于第二个操作数,则转移。

-小于指令(JL):如果第一个操作数小于第二个操作数,则转移。

-小于等于指令(JLE):如果第一个操作数小于等于第二个操作数,则转移。

除了上述指令之外,还有其他一些条件转移指令,用于根据不同的条件进行转移。

指令的转移属性根据跳转的相对距离和方向来表示,可以分为短转移和远转移。

-短转移:距离较近,可以直接使用短转移指令实现。

例如,JMP指令可以实现短转移。

-远转移:距离较远,需要使用远转移指令实现。

例如,调用远转移指令(CALL),可以实现近距离和远距离的跳转。

总结起来,汇编语言中的条件转移指令用于根据特定条件来决定是否进行转移,并根据转移的属性来选择要执行的下一条指令。

这些指令可以帮助程序根据条件的不同来实现不同的功能和逻辑。

反汇编语言常用指令

反汇编语言常用指令

内容目录计算机寄存器分类简介计算机寄存器常用指令一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。

对低16位数据的存取,不会影响高16位的数据。

这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

.4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

控制转移类指令ppt课件(全)

控制转移类指令ppt课件(全)

(4)CJNE @Ri,#data,rel 该指令功能:若(( Ri ))≥ data,(CY)=0; 若(( Ri ))<data ,CY=1; 若(( Ri ))≠ data,则PC←(PC)+rel,转移; 若(( Ri ))=data,则程序顺序执行.
例:如果(A) ≠ 00H,转移到CX1;如果(R1) ≠ 10H, 转移到CX2;如果(A) ≠(60H),转移到CX3。程序段 如下:
(2)指令长短不一样。LJMP是3字节指令;AJMP、 SJMP是2字节指令;JMP是1字节指令。
(3)指令机器码构成不同。AJMP、LJMP、JMP后跟 的是绝对地址,而SJMP后跟的是相对地址。
(4)地址特点不同。LJMP、AJMP、SJMP的转移目标 地址是固定的,程序执行过程中不变;JMP的转移目 标地址随程序的执行是动态变化的。
1. 长跳转指令 LJMP (3字节) LJMP addr16 ; PC addr16
•执行该指令时, 将目标语句的16位地址addr16装入 PC, 程序无条件转向指定的目标语句执行。 •由于长跳转指令提供的是16位地址,对应64KB的程 序存储器地址空间,所以可跳转到64KB程序存储器 地址空间的任何地方。 •实际应用中长跳转汇编指令写作“LJMP 目标语句 标号”的形式,如“LJMP LOOP”。
• 指令对A、DPTR和标志位均无影响。
注意:以上四条指令结果均不影响程序状态 字寄存器 PSW 。
5.LJMP、AJMP、SJMP、JMP四条无条件转移指令的 区别:
(1)转移范围不一样。LJMP、JMP转移范围是64KB; AJMP转移范围是与当前PC值同一个2KB区间;SJMP 转移范围是相对当前PC值的-128B~+127B范围内。

汇编条件转移指令

汇编条件转移指令

汇编条件转移指令1. 指令简介在汇编语言中,条件转移指令用于根据某个条件是否满足来决定是否跳转到某个指定的目标地址。

条件转移指令根据条件码寄存器中的标志位来进行判断,根据不同的条件码进行跳转或不跳转。

条件转移指令可以根据标志位的值来实现各种条件的判断,例如比较两个数的大小、判断某位是否为1等。

2. 有符号数的比较和跳转条件转移指令可以用于有符号数的比较和跳转。

在进行有符号数的比较时,需要使用特定的条件码,例如OF、SF、ZF等。

下面是一些常用的有符号数比较和跳转的条件码及其含义:•JO:溢出时跳转•JNO:不溢出时跳转•JS:结果为负时跳转•JNS:结果为非负时跳转•JE/JZ:结果为零时跳转•JNE/JNZ:结果不为零时跳转•JL/JNGE:结果为小于时跳转•JLE/JNG:结果为小于等于时跳转•JG/JNLE:结果为大于时跳转•JGE/JNL:结果为大于等于时跳转例如,我们可以通过如下汇编代码实现有符号数的比较和跳转:MOV AX, 10CMP AX, 20JL Less ; 如果AX小于20,则跳转到Less标签处在上面的例子中,如果AX的值小于20,则跳转到Less标签处继续执行代码。

3. 无符号数的比较和跳转与有符号数类似,条件转移指令也可以用于无符号数的比较和跳转。

在进行无符号数的比较时,需要使用特定的条件码,例如CF、ZF等。

下面是一些常用的无符号数比较和跳转的条件码及其含义:•JC:进位时跳转•JNC:不进位时跳转•JAE/JNB:大于等于时跳转•JB/JNAE:小于时跳转•JBE/JNA:小于等于时跳转•JA/JNBE:大于时跳转例如,在对无符号数进行比较时,可以使用如下汇编代码:MOV AX, 10CMP AX, 20JAE GreaterEqual ; 如果AX大于等于20,则跳转到GreaterEqual标签处在上面的例子中,如果AX的值大于等于20,则跳转到GreaterEqual标签处继续执行代码。

51单片机条件转移指令

51单片机条件转移指令

51单片机条件转移指令51单片机是一种常用的单片机芯片,它的条件转移指令在编程中起着重要的作用。

条件转移指令是根据特定的条件来决定程序的执行路径,使得程序具备一定的智能性和灵活性。

下面我们来详细介绍51单片机的条件转移指令以及它们的使用方法和注意事项。

51单片机的条件转移指令主要有以下几种:条件跳转指令、循环控制指令和中断指令。

这些指令可以根据特定的条件来改变程序执行的顺序和逻辑,实现程序的分支和循环控制。

首先,我们来介绍条件跳转指令。

条件跳转指令一般用于根据某个条件来跳转到不同的程序地址。

其中比较常见的有“跳转指令”、“条件判断指令”和“条件转移指令”等。

跳转指令可以根据某个条件来跳转到指定的程序地址,比如“跳转到某个子程序”或“跳转到某个循环体”。

条件判断指令可以根据特定的条件来执行跳转或继续执行下一条指令,比如“如果某个条件成立,就跳转到某个程序地址;否则继续执行下一条指令”。

条件转移指令一般用于根据某个条件转移到不同的程序地址,比如“如果某个条件成立,就转移到某个程序地址;否则继续执行下一条指令”。

其次,我们介绍循环控制指令。

循环控制指令一般用于实现程序的循环执行,其中比较常见的有“循环指令”和“计数器指令”等。

循环指令可以通过设置循环条件来实现程序的循环执行,比如“当某个条件成立时,就一直循环执行某段程序”。

计数器指令一般通过设置一个计数器来实现程序的循环执行,比如“循环执行某段程序一定的次数”。

最后,我们介绍中断指令。

中断指令主要用于处理外部的中断事件,比如“按键中断”和“定时器中断”等。

中断指令可以在程序执行的过程中,根据外部中断事件的发生来中断当前的执行流程,执行中断服务程序,处理完中断事件后,再返回到原来的程序地址继续执行。

在使用51单片机的条件转移指令时,需要注意以下几点。

首先,要根据具体的需求选择合适的条件转移指令,合理组织程序的逻辑结构。

其次,要注意条件转移指令的执行过程中是否会对程序的性能和时序等方面造成影响。

条件转移指令

条件转移指令

条件转移指令它们都有通用的语句格式和功能。

语句格式:[ 标号:] 操作符短标号功能:如果条件满足,则(IP )+位移量→ IP 。

1 .简单条件转移指令条件转移指令jcc 根据指定的条件确定程序是否发生转移。

如果满足条件则程序转移到目标地址去执行程序;不满足条件,则程序将顺序执行下一条指令。

其通用格式为:jcc label ,条件满足,发生转移:ip ← ip+8 位位移量;否则,顺序执行:ip ← i p+2其中,label 表示目标地址(8 位位移量)。

因为jcc 指令为2 个字节,所以顺序执行就是指令偏移指针ip 加2 。

条件转移指令跳转的目标地址只能用前面介绍的段内短距离跳转(短转移),即目标地址只能是在同一段内,且在当前ip 地址-128~+127 个单元的范围之内。

这种寻址方式由于是相对于当前ip 的,所以被称为相对寻址方式。

条件转移指令不影响标志,但要利用标志。

条件转移指令jcc 中的cc 表示利用标志判断的条件,共16 种。

2 .无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX 寄存器。

CMP AX ,BX ;(AX )-(BX )JNB NEXT ;若AX>=BX ,转移到NEXTXCHG AX ,BX ;若AX<BX ,交换NEXT :…3. 有符号数条件转移指令【例】比较有符号数大小,将较大的数存放在AX 寄存器。

CMP AX ,BX ;(AX )-(BX )JNL NEXT ;若AX>=BX ,转移到NEXTXCHG AX ,BX ;若AX<BX ,交换NEXT :…。

3.5 控制转移和位操作指令(8)

3.5 控制转移和位操作指令(8)

2、条件转移指令 条件转移就是程序转移是有条件的。执行条件转移指 令时,如指令中规定的条件满足,则进行程序转移,否则 程序顺序执行。条件转移有如下指令: (1)累加器判零转移指令:JZ rel和 JNZ rel指令 这两条指令都是二字节指令,是有条件的相对转移指令, 以rel为偏移量。 (2)数值比较条件转移指令 数值比较条件转移指令把两个操作数进行比较,比较 结果作为条件来控制程序转移。共有四条指令: CJNE A,#data,rel;累加器内容与立即数不等转移 CJNE A,direct,rn ,#data,rel ;寄存器内容与立即数不等转移 CJNE @Ri,#data,rel ;内部RAM前128单元内容与立 即数不等转移。
汇编语言程序中,为等待中断或程序结束,常使程 序“原地踏步” ,对此可使用SJMP指令完成:HERE: SJMP HERE 或 HERE:SJMP $指令机器码为 80FEH。在汇编语言中,以“$”代表PC的当前值。 执行指令:L00P:SJMP L00P1,如果L00P的标 号值为0100H(即SJMP这条指令的机器码存于0100H 和0101H两个单元之中),标号L00P1值为0123H,即 跳转的目标地址为0123H,则指令的第二个字节(相对 偏移量)应为:rel=0123H一0102H=21H 。 (4)基址加变址寻址转移(变址转移)指令: JMP @A+DPTR ; (PC)←(A)+(DPTR) 这是一条一字节转移指令,转移的目的地址=(A) +(DPTR)。指令以DPTR内容为基址,而以A的内容 作变址。只要把DPTR的值固定,而给A赋以不同的值, 即可实现程序的多分支转移。键盘译码程序就是本指令 的一个典型应用。 (如P113例3.30)
2、位置位、复位指令 SETB C ; (Cy)←l SETB bit ; (bit)←1 CLR C ; (Cy)←0 CLR bit ; (bit)←0 3、位运算指令 ANL C,bit ; (Cy)←(Cy)∧(bit) ANL C,/ bit ; (Cy)←(Cy)∧/( bit ) ORL C,bit ; (Cy)←(Cy)∨(bit) ORL C,/ bit ; (Cy)←(Cy)∨/( bit ) CPL C ; (Cy)←/(Cy) CPL bit ; (bit)←/(bit)(P120例3.37) 4、位控制转移指令 位控制转移指令就是以位的状态作为实现程序转移的 判断条件。

51单片机汇编指令总结

51单片机汇编指令总结

51单片机汇编指令总结数据传输指令一.片内ram数据传输指令1.以累加器a为目的操作数的指令:mova,rnmova,directmova,@rimova,#data2.以寄存器rn为目的操作数的指令:movrn,amovrn,directmovrn,data3.以轻易地址为目的操作数的指令:movdirect,amovdirect,rnmovdirect1,derect2movdirect,@rimovdirect,#data4.间接地址为目的操作数的指令:mov@ri,amov@ri,directmov@ri,#data5.十六位数据传送指令:movdptr,#data16二.累加器a与片外ram数据传输指令:movxa,@rimovxa,@dptrmovx@ri,amovx@dptr,a三.换算串行:movca,@a+dptr(先pc←(pc)+1,后a←((a)+(dptr)))+movca,@a+pc(先pc←(pc)+1,后a←((a)+(pc)))四.互换指令:1.字节交换指令:xcha,rnxcha,directxcha,@ri2.半字节交换指令:xchda,@ri3.累加器半字节交换指令:swapa五.栈操作指令:1.push(入栈指令)pushdirect2.pop(出栈指令)popdirect算术运算指令:一.乘法加法指令:1.加法指令:adda,rnadda,directadda,@riadda,#data2.拎位次乘法指令:addca,rna←(a)+(rn)+cyaddca,directa←(a)+(direct)+cyaddca,@ria←(a)+((ri))+cyaddca,#dataa←(a)+(data)+cy3.带借位减法指令:subba,rna←(a)-cy-(rn)subba,directa←(a)-cy-(direct)subba,@ria←(a)-cy-((ri))subba,#dataa←(a)-cy-#data二.乘法乘法指令:1.乘法指令:mulabba←(a)×(b)高字节放到b中,低字节放到a中2.乘法指令:divaba←(a)÷(b)的商,(b)←(a)÷(b)的余数三.加1减1指令:1.提1指令:incaa←(a)+1incrnrn←(rn)+1incdirectdirect←(direct)+1inc@ri(ri)←((ri))+1incdptrdptr←(dptr)+12.减至1指令:decadecrndecdirectdec@ri四.十进制调制指令:daa调整累加器a的内容为bcd码逻辑操作方式指令:一.逻辑与、或、异或指令:1.逻辑与指令:anla,rnanla,directanla,@rianla,#data2.逻辑或这而令:orla,rnorla,directorla,@riorla,#dataorldirect,aorldirect,#data3.逻辑异或指令:xrla,rnxrla,directxrla,@rixrla,#dataxrldirect,axrldirect,#data二.清零、row指令:1.累加器a清零指令:crla2.累加器arow指令:cpla三.循环位移指令:1.累加器a循环左移指令:rla2.累加器a循环右移指令:rra3.累加器a连同进位位循环左移指令:rlca4.累加器a连同进位位循环右移指令:rrca控制转移指令:一.无条件迁移指令:1.绝对转移指令:ajmpaddr11(先pc+2,然后将addr11的高十位托付给pc,pc的高六位维持不变)2.长转移指令:ljmpaddr16(用addr16的值替代pc的值)3.相对迁移(长迁移)指令:sjmprel(带符号的偏移字节数)(pc+2,再加rel赋值给pc)4.间接转移指令:jmp@a+dptr(a)+(dptr)→(pc)二.条件转移指令:1.累加器判零迁移指令:jzrel先pc+2;后判断,a为0时转移,pc+rel赋值给pc;否则顺序继续执行jnzrel先pc+2,后判断,a不为0时转移,pc+rel赋值给pc;否则顺序执行2.比较转移指令:cjne目的操作数,源操作数,relcjnea,direct,rel先pc+3传回pc,再比较目的操作数和原操作数cjnea,#data,rel目>源时,程序转移,pc+rel传回pc且cy=0cjnern,#data,rel目=源时,程序顺序执行cjne@ri,#data,rel目djnzrn,rel先pc\\+2,rn-1,当rn为0时程序顺序继续执行,否则pc+rel传到pcdjnzdirect,rel先pc+3,direct-1,direct为0时程序顺序继续执行,否则pc+rel传到pc二.子程序调用、返回指令:1.绝对调用指令acall:acalladdr11先pc+2,sp+1将pc的低八位存入sp;sp+1,将pc的高八位取走sp。

条件转移指令

条件转移指令
(CF)=0且(ZF)=0
无符号数
高于或等于/不低于转移
JAE/JNB turgel
(CF)=0
无符号数
低于/不高于或等于转移
JB/JNAE turgel
(CF)=1
无符号数
低于或等于/不高于转移
JBE/JNA turgel
(CF)=1或(ZF)=1
无符号数
进位转移
JC turgel
(CF)=1
无进位转移
JNC /JZ turgel
(ZF)=0
不等于或非零转移
JNE/JNZ
(ZF)=1
奇偶校验为偶转移
JP/JPE turgel
(PF)=1
奇偶校验为奇转移
JP/JPO turgel
(PF)=0
条件转移指令
带符号数
小于或等于/不大于转移
JLE/JNG turgel
(SF)≠(OF)或(ZF)=1
带符号数
溢出转移
JO turgel
(OF)=1
不溢出转移
JNO turgel
(OF)=0
结果为负转移
JS turgel
(SF)=1
结果为正转移
JNS turgel
(SF)=0
高于/不低于或等于转移
JA/JNBE turgel
指令名称
汇编格式
转移条件
备注
CX内容为0的转移
JCXZ turgel
(CX)=0
大于/不小于或等于转移
JG/JNLE turgel
(SF)=(OF)且(ZF)=0
带符号数
大于或等于/不小于转移
JGE/JNL turgel
(SF)=(OF)
带符号数

微机原理常用命令

微机原理常用命令

一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。

1. 通用数据传送指令MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CLC(进位位置0指令)CMC(进位位求反指令)STC(进位位置为1指令)CLD(方向标志置1指令)STD(方向标志位置1指令)CLI(中断标志置0指令)STI(中断标志置1指令)NOP(无操作)HLT(停机)WAIT(等待)ESC(换码)LOCK(封锁)文案编辑词条B 添加义项?文案,原指放书的桌子,后来指在桌子上写字的人。

控制转移指令

控制转移指令

2.条件转移指令 条件转移指令 A判零转移指令(2字节) 判零转移指令( 字节 字节) 判零转移指令 • JZ rel (A)=0,转移;(PC)+2+rel PC ) ,转移; ) (A)≠0,则顺序执行 ) ,则顺序执行;(PC)+2 PC 。 • JNZ rel (A)≠0,转移;(PC)+2+rel PC ) ,转移; ) (A)=0,则顺序执行 ) ,则顺序执行;(PC)+2 PC
变址寻址转移指令: 字节) 变址寻址转移指令: (1字节) 字节 JMP @A+DPTR 根据A中数值的不同 中数值的不同,转向不同的子 根据 中数值的不同 转向不同的子 程序入口. 程序入口
(A)+(DPTR) PC
的值( ),转向相应的处理 例:根据A的值(0~3),转向相应的处理 根据 的值 ), 程序。( 。(LJMP指令 字节) 指令3字节 程序。( 指令 字节) MOV R1,A , RL A ;(A) ;( )*2 ADD A,R1 ;(A) , ;( )*3 MOV DPTR,#TABLE , JMP @A+DPTR TABLE: LJMP LOOP0;转0处理程序 : ; 处理程序 LJMP LOOP1 ; 转1处理程序 处理程序 LJMP LOOP2 ;转2处理程序 处理程序 LJMP LOOP3 ;转3处理程序 处理程序
短转移指令: 字节) 短转移指令: (2字节) 字节 SJMP rel (PC)+2+rel (PC) rel: 8位带符号数补码 位带符号数补码 转移范围: 转移范围 -128(-80H)~+127(7FH)(256B) ( ) ( ) 当前地址(PC)=2000H 例:当前地址 当前地址 执行 SJMP 56H 结果:目标地址 目标地址(PC)=2058H 结果 目标地址

微机原理与接口技术3-9控制转移指令

微机原理与接口技术3-9控制转移指令

例: JMP 0120H JMP SHORT LPI ;直接转向0120H ;转向LPI
JMP NEAR PTR BBB ;转向BBB 由于是段内转移,故转移后CS内容保持不变
②段内间接转移 转移的目标地址(偏移量)由寄存器或存储单元的内 容给出。 例:JMP SI 若指令执行前(SI)=1200H,则指令执行后, (IP)=1200H,于是转向代码段的偏移地址1200H处执行。
(2)条件转移指令Jcc
格式为:
Jcc Label
; Label是转移的目标地址
Jcc指令包括下列3类: (1)测试单个标志位。
(2)用于带符号数比较。
(3)用于无符号数比较。
条件转移指令只能是段内直接转移,且指令的 转移范围为指令所在位置的-128~+127字节。
i 根据单个标志位设置的条件转移指令
出的位移量加到IP上。
②段内间接调用
子程序的偏移地址在寄存器或存储器中。
格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄 存器/存储器的内容送入IP。
例: CALL AX ;调用地址由AX给出 CALL WORD PTR[SI] ;调用地址由存储器给出.
在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI] 表示所取得的目标地址是一个字(16位偏移地址)。
③段间直接转移 在指令中直接给出要转移到的目的段地址和 偏移地址。
例:JMP 2000:1000H
执行时,(IP)←1000H,(CS)←2000H 注:直接地址为符号地址时,段间直接转移指令中 的符号地址前应加操作符FAR PTR。
•JL/JNGE •JLE/JNG

03.10 第三章 - 单片机指令系统(条件转移类指令LJMP、AJMP、SJMP、JMP、JZ、DJNZ、CJNE、RET、RETI)

03.10 第三章 - 单片机指令系统(条件转移类指令LJMP、AJMP、SJMP、JMP、JZ、DJNZ、CJNE、RET、RETI)

09:42
单片机技术
12
第三章:MSC-51 单片机指令系统
3.10.2 - 条件转移类指令
❖ 理解条件的概念 ❖ 掌握JZ、JNZ的特点和用法 ❖ 掌握DJNZ的特点和用法 ❖ 掌握CJNE的特点和用法
09:42
单片机技术
13
3.10.2 条件转移指令(JZ、DJNZ、CJNE)
❖ 1.判A转移指令(JZ、JNZ)
09:42
单片机技术
4
3.10 控制转移类指令 ❖ 控制转移类指令分类
▪ 无条件转移指令: 指执行此类指令,程序将无条件转移到目的地址
包括:LJMP 、AJMP 、SJMP 、JMP
Long(长-64KB)Absolutely(绝对-2KB)Short(短-256B)Jump(跳)
▪ 条件转移指令:
指程序需满足某种条件时,才转移到目的地址,否则顺 序执行下一条指令。
包括:JC、JB、JBC、JZ、DJNZ、CJNE
09:42
单片机技术
5
3.10.1 无条件转移指令(LJMP、AJMP、SJMP、JMP)
❖ 1.长转移指令(LJMP)
▪ 格式:LJMP addr16 ;PC =(PC)+ 3
;PC ← addr15~0 ▪ 范围:216B = 64KB,(0000H~FFFFH)
▪ 格式:JZ rel ;当A = 00H时转向rel,PC' =(PC)+ 2+rel ;否则顺序执行,PC' =(PC)+ 2
▪ 格式:JNZ rel ;当A ≠ 00H时转向rel,PC' =(PC)+2+rel ;否则顺序执行,PC' =(PC)+ 2

51单片机汇编语言教程:14课单片机条件转移指令

51单片机汇编语言教程:14课单片机条件转移指令

51单片机汇编语言教程:第14课-单片机条件转移指令(基于HL-1、HJ-C52、HJ-3G实验板)(图片HL-1开发板)条件转移指令是指在满足一定条件时进行相对转移。

判A内容是否为0转移指令JZ relJNZ rel第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)。

转移到什么地方去呢?如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了。

因此这第指令我们能这样理解:JZ标号。

即转移到标号处。

下面举一例说明:MOV A,R0JZ L1MOV R1,#00HAJMP L2L1:MOV R1,#0FFHL2:SJMP L2END在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。

而如果R0中的值不等于0,则次序执行,也就是执行MOV R1,#00H指令。

最终的执行结果是R1中的值等于0。

第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。

把上面的那个例程中的JZ改成JNZ试试吧,看看程序执行的结果是什么?比较转移指令CJNE A,#data,relCJNE A,direct,relCJNE Rn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNE A,#data,标号。

这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。

但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。

如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。

例:MOV A,R0CJNE A,#10H,L1MOV R1,#0FFHAJMP L3L1:JC L2MOV R1,#0AAHAJMP L3L2:MOV R1,#0FFHL3:SJMP L3上面的程序中有一条单片机指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。

控制转移指令

控制转移指令

试着汇编下列源程序,如某条通过或无法通过汇编, ① 试着汇编下列源程序,如某条通过或无法通过汇编,根 据汇编信息窗口的提示,请逐条说明具体理由: 据汇编信息窗口的提示,请逐条说明具体理由: ORG 1000H LJMP 1900H AJMP 1900H AJMP 1100H SJMP 1100H SJMP $ END 实训要点: 实训要点: 1、观察每条指令在ROM中的存放地址。 、观察每条指令在 中的存放地址。 中的存放地址 2、计算目的地址和当前PC指针之间的距离。 、计算目的地址和当前 指针之间的距离。 指针之间的距离 3、比较三种指令之间的差异。 、比较三种指令之间的差异。
MOV DPTR,#TAB MOV A,COUT RL A JMP @A+DPTR ORG 1000H
TAB:
AJMP ZERO AJMP ONE
2、条件转移 、
反复单步执行下列程序段,结合A的内容 观察JNZ L1的 的内容, ①反复单步执行下列程序段,结合 的内容,观察 的 执行情况,并看该指令的下一条指令执行后, 窗口 窗口P1值的变 执行情况,并看该指令的下一条指令执行后,I/O窗口 值的变 化情况,说明该程序的功能。 化情况,说明该程序的功能。 START: L0: MOV A,#0 , CPL A JNZ L1 MOV P1,#00h SJMP L2 L1: L2: MOV P1,#0FFh SJMP L0 End
ROM地址 ROM地址 目的地址 是否出范围
例如:ORG 1000H AJMP 1900H 当前地址=1000H 当前PC=1002H(AJMP是2字节指令) 目的地址=1900H 1、高5位地址比较法 当前PC高5位=00010B 目的地址高5位=00011B
结论:不一致,因此跳转出范围。 2、范围比较法 当前PC的跳转的2K范围为 PC高5位+地址低11位(0~7FFH) 最小地址=00010 00000000000B=1000H 最大地址=00010 11111111111B=17FFH
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

条件转移指令
条件转移指令是指在满足一定条件时进行相对转移。

1.判A内容是否为0转移指令
JZ rel
JNZ rel
第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。

转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。

因此这第指令我们可以这样理解:JZ 标号。

即转移到标号处。

下面举一例说明:
MOV A,R0
JZ L1
MOV R1,#00H
AJMP L2
L1: MOV R1,#0FFH
L2: SJMP L2
END
在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。

而如果R0中的值不等于0,则顺序执行,也就是执行 MOV R1,#00H指令。

最终的执行结果是R1中的值等于0。

第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。

把上面的那个例子中的JZ改成JNZ试试吧,看看程序执行的结果是什么?
2.比较转移指令
CJNE A,#data,rel
CJNE A,direct,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就顺序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们可以将rel理解成标号,即:CJNE A,#data,标号。

这样利用这条指令,我们就可以判断两数是否相等,这在很多场合是非常有用的。

但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。

如果前面的数(A中的)大,则CY=0,否则CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。

例:
MOV A,R0
CJNE A,#10H,L1
MOV R1,#0FFH
AJMP L3
L1: JC L2
MOV R1,#0AAH
AJMP L3
L2: MOV R1,#0FFH
L3: SJMP L3
上面的程序中有一条指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则顺序执行(执行它的下面一条指令)。

分析一下上面的程序,如果(A)=10H,则顺序执行,即R1=0。

如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将顺序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。

因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。

弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将
间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个相应的例子。

CJNE A,10H ;把A中的值和10H中的值比较(注意和上题的区别)
CJNE 10H,#35H ;把10H中的值和35H中的值比较
CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较
3.循环转移指令
DJNZ Rn,rel
DJNZ direct,rel
第一条指令在前面的例子中有详细的分析,这里就不多谈了。

第二条指令,只是将Rn改成直接地址,其它一样,也不多说了,给一个例子。

DJNZ 10H,LOOP
3.调用与返回指令
(1)主程序与子程序在前面的灯的实验中,我们已用到过了子程序,只是我们并没有明确地介绍。

子程序是干什么用的,为什么要用子程序技术呢?举个例子,我们数据老师布置了10道算术题,经过观察,每一道题中都包含一个(3*5+2)*3的运算,我们可以有两种选择,第一种,每做一道题,都把这个算式算一遍,第二种选择,我们可以先把这个结果算出来,也就是51,放在一边,然后要用到这个算式时就将51代进去。

这两种方法哪种更好呢?不必多言。

设计程序时也是这样,有时一个功能会在程序的不同地方反复使用,我们就可以把这个功能做成一段程序,每次需要用到这个功能时就“调用”一下。

(2)调用及回过程:主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么回到什么地方呢?是回到调用子程序的下面一条指令继续执行(当然啦,要是还回到这条指令,不又要再调用子程序了吗?那可就没完没了了……)。

参考图1
图1
4.调用指令
LCALL addr16 ;长调用指令
ACALL addr11 ;短调用指令
上面两条指令都是在主程序中调用子程序,两者有一定的区别,但在初学时,可以不加以区分,而且可以用LCALL 标号,ACALL 标号,来理解,即调用子程序。

(5)返回指令则说了,子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了,即执行
ret
指令
4.空操作指令
nop
空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。

相关文档
最新文档