控制转移指令

合集下载

控制转移类指令.ppt

控制转移类指令.ppt
无条件地转移到其他代码段内标号所指定的目标地址处。 操作: 如果标号为其它代码段内定义的标号,则
(IP)←标号的偏移地址 (CS)←标号的段地址 如果标号为本代码段内定义的标号,则该指令同JMP NEAR PTR lable。 说明: ① 也可直接使用数值表达式来给出目标地址,这时可省略FAR属性说明。 JMP 2000H:0100H ② 机器指令代码直接提供了转向地址的段地址和偏移地址,属于直接转 移方式。 ③ 使用绝对地址来表示转移目标地址,因此属于绝对转移。
(2)条件转移指令分为以下四类。
① 单标志位测试转移指令 通过测试单个标志位的状态来决定是否转移的指令。 例:
ADD AX,BX JC LAB1 ;如果 CF = 1,转至 LAB1
CMP CX,DX JE LAB2 ;如果 ZF = 1,转至 LAB2
② 无符号数比较转移指令
该类指令将参与比较的两个数据看作是无符号数,并根据比较运算后 标志位CF和ZF的状态来判断它们之间的大小关系,从而决定是否转移。 例:
说明:
① 8位位移量是带符号数,因此跳转的范围为( -128 --- +127 )。
② 指令中的转移目标地址用相对于当前IP所指向指令的相对位移量来 表示,因此属于相对转移。
例1:
0000H EB 04 0002H B0 01 0004H B3 02 0006H B1 03

例2:
0000H B0 01 0002H B3 02 0004H B1 03 0006H EB F8 0008H B2 04
JBE/JNA 标 CF=1或ZF=1 号
JG/JNLE 标 SF⊕OF=0且

ZF=0
带符号数 比较转移
JGE/JNL 号

控制转移指令

控制转移指令
下面是一个含有无条件转移指令的简单程序的列表文件,它是由汇编语言源程序翻译后产生的。即:
;行号偏移量机器码程序
1 0000 CODE SEGMENT
2 ASSUME CS:CODE
3 0000 0405 PROG_S:ADD AL, 05H
4 0002 90 NOP
5 0003 EBFB JMP SHORT PROG_S
段内间接转移指令
这类指令转向的16位有效地址存放在一个16位寄存器或字存储单元中
用寄存器间接寻址的段内转移指令,要转向的有效地址存放在寄存器中,执行的操作是寄存器的内容送到IP中

JMP BX
若该指令执行前BX=4500H,则指令执行时,将当前IP修改成4500H,程序转到段内偏移地址为4500H处执行
返回地址的IP入栈
由于存放CALL指令的内存首地址为CS:IP=2000:1050H,该指令占3个字节,所以返回地址为2000:1053H,即IP=1053H.于是1053H被推入堆栈
根据当前IP值和位移量DISP计算出新的IP值,作为子程序的入口地址,即:
IP=IP+DISP=1053H+1234H=2287H
中断:INT—中断、INTO—溢出中断、IRET—中断返回
1、无条件转移和过程调用指令
1)JMP无条件转移指令
指令格式:JMP目的
指令功能:使程序无条件转移到指令中指定的目的地址去执行。
这类指令又分为两种类型:
第一种类型:段内转移或近(NEAR)转移,转移指令目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
JMP DWORD PTR[SI+0125H]
设指令执行前,CS=1200H,IP=05H,DS=2500H,SI=1300H,内存单元(26425H)=4500H,(26427H)=32F0H.而指令中的位移量DISP=0125H,其中高位部分为DISP_H=01H,低位部分DISP_L=25H

微机原理2007年-第三章-指令系统第五节控制转移

微机原理2007年-第三章-指令系统第五节控制转移

③ 段间直接转移 段间直接转移
指令中给出的16位的段和 位的偏移地址送到CS和IP。 指令中给出的16位的段和16位的偏移地址送到CS和IP。 位的段和16位的偏移地址送到
④ 段间间接转移 段间间接转移
MEM中给出的 位的段和 位的偏移地址送到CS和IP。 MEM中给出的16位的段和16位的偏移地址送到CS和IP。 中给出的16位的段和16位的偏移地址送到
6
例:代码段内有一条无条件转移指令
JMP SHORT NEXT 指令本身占有两个字节 操作码占一个字节; 位位移量占有一个字节 操作码占一个字节;8位位移量占有一个字节
内存
... 源程序 : 条件转移指令: 条件转移指令:JMP SHORT next qqq: ... ... next: MOV AL,03H
5
① 段内直接转移 转移的目标地址由指令直接给出。 段内转移,故转移后CS内容保持不变, 段内转移,故转移后CS内容保持不变,只改 变IP的值。 IP的值。
汇编语言中格式 JMP SHORT OPRD JMP NEAR PTR OPRD 位移量 转移范围 8位 -128~+127 128~ 16位 16位 -32768~+32767 32768~
13
JMP DWORD PTR [SI]的机器码 11111111 11101100 DS:[SI]
4000 DS +) 1212 SI 41212 41212 41213 41214 41215
00 10 00 4A
1000 4A00
IP CS
段间间接转移操作示意图
14
(2)条件转移指令 (2)条件转移指令 - JXX 条件转移指令可实现程序的条件分支。 条件转移指令根据标志位的状态来决定是 否进行分支转移。(判位转移) 格式: JXX label xx为条件名称缩写 ;xx为条件名称缩写 指令的转移范围为-128~+127字节。 指令的转移范围为-128~+127字节。

控制转移类指令

控制转移类指令

控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变说明✧只有中断返回指令(IRET)改变控制标志位✧许多转移指令受状态标志位的影响1.无条件转移指令(JMP 操作数;程序转向label标号指定的地址)◆寻址方式:直接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式◆目标地址范围✓段内(注意转移范围是+ -,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负)✡段内转移——近转移(near)⏹转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围)⏹不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。

✡段内转移——短转移(short)⏹转移范围用一个字节表达,在当前代码段256B范围内转移(-128~+127范围),只改变IP的值,由8位带符号数给出。

✓段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。

段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。

注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、near ptr或far ptr强制.✌思考:如果转移超过16BIT,怎么办?答:变成段间转移。

JMP 1234H 这个指令对否?JMP 12345678H呢?2、条件转移指令(Jcclable;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行)注意:1.Jcc本身不是一条指令,它是条件转移指令的统称。

控制转移类指令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范围内。

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、位控制转移指令 位控制转移指令就是以位的状态作为实现程序转移的 判断条件。

控制转移类指令

控制转移类指令

MOV A,R7
RL A ;键值2倍,AJMP指令为双字节指令
MOV DPTR,#KEYG
JMP @A+DPTR
•••
KEYG: AJMP KEY0
KEYG+2: AJMP KEY1
•••
KEYG+30: AJMP KEY15
2.条件转移指令
条件转移指令是当满足给定条件时,程序转移到 目标地址去执行;条件不满足则顺序执行下一条 指令
用在中断服务程序的末尾 RETI与RET指令区别: RETI在返回的同
时同时释放中断逻辑
CJNE @Ri,#data,rel;
(PC)←(PC)+3 若data<((Ri)),(PC)←(PC)+rel且Cy←0; 若data>((Ri)),(PC)←(PC)+rel且Cy←1; 若data=((Ri)),顺序执行且Cy←0
例: MOV A, #40H
MOV R0,#10H
DJNZ direct,rel ;
(PC)←(PC)+3,(direct)←(direct)-1 当(diect)≠0时,(PC)←(PC)+rel; 当(direct)=0时,程序顺序执行。
注:操作数的内容先减1再判零,不等于0时转移
3.子程序调用
本指令完成两项操作:①把PC当前值压入堆栈;② 把子程序入口地址送PC。
⑴长调用指令 LCALL addr16 ;
(PC)←(PC)+3
(SP)←(SP)+1,((SP))←(PC)7~0;
(SP)←(SP)+1,((SP))←(PC)15~8;Biblioteka PC15~0←addr16

控制转移类指令和位操作指令

控制转移类指令和位操作指令

控制转移类指令和位操作指令(一).控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。

控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。

控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。

下面我们将分类介绍。

1.无条件转移指令(4条)LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内转移,称为长转移指令AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号数,范围-128~127,即可向后跳转128,向前可跳转127JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容相加后形成的新地址例执行指令LJMP 9100H不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。

例程序2000H MOV R0 , #10H ;10H→PC2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC┇┇2006H ┇2007H ┇从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。

2.条件转移指令(8条)条件转移指令是根据某种特定条件转移的指令。

条件满足时转移,条件不满足时则顺序执行下面的指令。

JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行CJNE A, direct, rel ;A≠ (direct)转向PC+3+rel→PC且当A>(direct),Cy=0;当A<(direct),Cy=1;否则A=(direct),PC+3→PC即顺序执行CJNE A, #data, rel ;A data P转向PC+3+rel→PC且当A >data,Cy=0;当A <data,Cy=1,;A=data,PC+3→PC顺序执行CJNZ Rn, #data, rel ;Rn≠data转向PC+3+rel→PC;且当Rn>data,Cy=0,当Rn<data,Cy=1;Rn=data,PC+3→PC顺序执行CJNE @Ri,#data, rel ;(Ri) ≠data ,PC+3+rel→PC;且当(Ri)>data ,Cy=0,当(Ri)<data,Cy=1;(Ri)=data, PC+3→PC顺序执行DJNZ Rn, rel ;Rn-1→Rn ,Rn ≠0转向PC+2+rel→PC;Rn=0,PC+2→PC顺序执行DJNZ direct, rel ;(direct)-1→(direct),(direct) ≠0转向 PC+2+rel→PC;(direct)=0 ,PC+2→PC顺序执行注意:1)CJNE类指令借用进位标志Cy作为比较结果的标志位。

2.3.5控制转移指令

2.3.5控制转移指令

例:某温度控制系 统,采集的温度值 (Ta)放在累加器A 中,在内部RAM54H单 元存放温度下限值 (T54),在55H单元 存放温度上限值 (T55)。若Ta>T55, 程序转向JW(降温 处理程序);若 Ta<T54,则程序转向 SW(升温处理程序); 若T55≥Ta≥T54,则 程序转向FH(返回 主程序)。
在指令中提供了子程序入口地址的低11位,这 11位地址的a7~a0在指令的第二字节中,a10~a8 则占据第一字节的高3位。 为了实现子程序调用,该指令共完成两项操作: 断点保护 断点保护是通过自动方式的堆栈操作来实现的, 即把PC值自动送堆栈保存起来,待子程序返回时再送 回该PC值。 构造目的地址 目的地址的构造是在PC当前值的基础上以指令提 供的11位地址取代PC的低11位,而PC的高5位不变。
二、条件转移指令
条件所谓条件转移就是指程序转移是有条件的。 执行条件转移指令时,如指令中规定的条件满足, 则进行程序转移,否则程序顺序执行。 1、累加器判零转移指令
JZ rel ; 若(A)=0,则PC←(PC)+2+rel
若(A)≠0,则PC←(PC) +2 JNZ rel ; 若(A)≠0,则PC←(PC)+2+rel 若(A)=0,则PC←(PC)+2 这两条指令都是二字节指令,是有条件的相对转
(2) 长调用指令
LCALL addr16
给 出。指令执行后,断点进栈保存,调用addr16地址 的子程序。因此本指令的操作内容可表出为: PC←(PC)+3 SP←(SP)+1,(SP)←(PC)7-0 SP←(SP)+1,(SP)←(PC)15-8 PC15~0←addr16 本指令是三字节指令,调用地址在指令中直接

汇编指令大全

汇编指令大全

汇编指令大全汇编语言是一种低级语言,它直接面向计算机硬件,使用符号指令来代替机器语言指令,能够直接控制计算机硬件。

汇编指令是汇编语言中最基本的部分,它直接对应着计算机的机器指令,是程序员编写程序时直接使用的指令集合。

在汇编指令大全中,我们将详细介绍常见的汇编指令及其功能,帮助读者更好地理解和掌握汇编语言。

1. 数据传送指令。

数据传送指令是汇编语言中最基本的指令之一,用于在寄存器和内存之间传送数据。

常见的数据传送指令包括MOV、XCHG等,它们可以将数据从一个位置传送到另一个位置,是程序中最常用的指令之一。

2. 算术运算指令。

算术运算指令用于对数据进行算术运算,包括加法、减法、乘法、除法等。

常见的算术运算指令有ADD、SUB、MUL、DIV等,它们可以对寄存器或内存中的数据进行相应的算术运算,并将结果存储到指定的位置。

3. 逻辑运算指令。

逻辑运算指令用于对数据进行逻辑运算,包括与、或、非、异或等。

常见的逻辑运算指令有AND、OR、NOT、XOR等,它们可以对数据进行相应的逻辑运算,并将结果存储到指定的位置。

4. 控制转移指令。

控制转移指令用于改变程序的执行顺序,包括无条件转移和条件转移两种。

常见的控制转移指令有JMP、JZ、JG等,它们可以根据指定的条件改变程序的执行流程,实现程序的控制流转移。

5. 程序中断指令。

程序中断指令用于在程序执行过程中产生中断,包括内部中断和外部中断两种。

常见的程序中断指令有INT、IRET等,它们可以在特定的条件下中断程序的执行,并在中断处理程序执行完毕后恢复程序的执行。

6. 栈操作指令。

栈操作指令用于对栈进行操作,包括入栈和出栈两种操作。

常见的栈操作指令有PUSH、POP等,它们可以将数据压入栈中或从栈中弹出数据,实现程序中的数据传递和保存。

以上就是汇编指令大全的简要介绍,通过学习和掌握这些指令,读者可以更好地理解汇编语言的基本原理和运行机制,从而能够编写出高效、精确的汇编程序。

控制转移指令

控制转移指令

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 结果 目标地址

汇编(十五)控制转移类指令一

汇编(十五)控制转移类指令一

汇编(十五)——控制转移类指令一Intel 8086中,程序的执行序列是由代码段寄存器CS 和指令指针IP确定的。

CS包含当前指令所在代码段的段地址,IP则是要执行的下一条指令的偏移地址。

程序的执行一般是依指令序列顺序执行,但有时候需要改变程序的流程,实现分支程序。

控制转移类指令通过修改CS和IP的值改变程序的执行顺序,实现分支。

分支程序有时根据某个条件转移执行,有时无条件条转到某条指令执行,转移指令的目标地址是代码段中某个指令的位移量,这个位移量是用标号来指出的。

一、标号标号(过程名亦视为标号)用来说明可执行指令在汇编语言程序中的位置(从这个角度来说,变量应用于说明伪指令的位置)。

标号可以作为转移指令(或调用指令CALL)的操作数。

和变量类似,标号有三种属性:段(SEGMENT)、位移量(OFFSET)和距离(DISTANCE)。

段和位移量属性就是在哪个段、什么位置上定义的标号。

标号只要有了定义,这两个属性就自然的产生。

如果标号只能在本段中(即标号所定义的段中)用JMP或条件转移指令(或CALL)进行访问,那么必须将这个标号的距离属性定义为NEAR;如果标号能为其他段中的JNMP(或CALL)指令访问,则需将标号的距离属性定义为FAR。

标号的距离属性需要再定义标号时指出。

1、标号的定义(1)定义距离属性为NEAR的标号1)距离属性为NEAR的标号可以用隐含的说明,即在标号名后面加上冒号,放在指令前面。

如:L1: MOV AX,BX@: ADD AX,1002)距离属性为NEAR的标号也可以用现实说明,即用LABEL 位指令明显说明,或在EQU位指令中用THIS操作符明显的指出。

如:L2 LABEL NEARMOV CX,5L3 EQU THIS NEARAND AX,0FFH(2)定义距离属性为FAR的标号距离属性为FAR的标号只能显示说明L4 LABEL FARMOV AX,DXL5 EQU THIS FAROR AL,30H(3)同一条指令处可以定义两个距离属性不同的标号,以提高访问标号的灵活性。

单片机常用指令

单片机常用指令

单片机常用指令单片机是一种集成在一个芯片上的微型计算机,广泛应用于各种电子设备中。

要让单片机按照我们的意愿工作,就需要给它下达各种指令。

下面就来介绍一些单片机常用的指令。

一、数据传送指令这一类指令用于在单片机内部的寄存器、存储器之间进行数据的传输。

比如“MOV”指令,它可以将一个数据从源操作数传送到目的操作数。

例如“MOV A, 50H”,就是把十六进制数 50H 传送到累加器 A 中。

“MOVX”指令则用于在单片机与外部数据存储器之间进行数据传送。

比如“MOVX A, @DPTR”,可以从外部数据存储器中读取数据到累加器 A 。

二、算术运算指令用于执行加、减、乘、除等算术运算。

“ADD”指令用于加法运算,“SUBB”指令用于带借位的减法运算。

例如“ADD A, R0”,将累加器 A 的值和寄存器 R0 的值相加,结果存放在累加器 A 中。

“MUL”指令用于乘法运算,它将累加器 A 和寄存器 B 中的两个 8 位无符号数相乘,结果的低 8 位存放在累加器 A 中,高 8 位存放在寄存器 B 中。

三、逻辑运算指令进行与、或、异或等逻辑操作。

“ANL”指令执行逻辑与操作,“ORL”指令执行逻辑或操作,“XRL”指令执行逻辑异或操作。

例如“ANL A, 0FH”,将累加器 A 的值和十六进制数 0FH 进行逻辑与运算,结果存放在累加器 A 中。

四、控制转移指令这类指令用于改变程序的执行流程。

“JMP”指令用于无条件跳转,直接跳转到指定的地址去执行程序。

例如“JMP 1000H”,程序将跳转到地址为 1000H 的地方继续执行。

“CJNE”指令用于比较两个操作数,如果不相等则跳转。

比如“CJNE A, 50H, LOOP”,如果累加器 A 的值不等于 50H ,就跳转到标号 LOOP 处执行。

“LCALL”和“ACALL”指令用于调用子程序。

“LCALL”可以调用64KB 范围内的子程序,而“ACALL”只能调用 2KB 范围内的子程序。

控制转移指令

控制转移指令

试着汇编下列源程序,如某条通过或无法通过汇编, ① 试着汇编下列源程序,如某条通过或无法通过汇编,根 据汇编信息窗口的提示,请逐条说明具体理由: 据汇编信息窗口的提示,请逐条说明具体理由: 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

35控制转移指令

35控制转移指令
将操作数乘以2的CL次。 将补码数除以2的CL次。 将操作数的高低4位或8位 (字节)数据相交换。
保存其它指令移入CF的值
2
例题
1、以下指令序列,请问实现了什么功能?
MOV AL,08H ;08H → AL
SAL AL,1
;AL算术左移一位,AL=10H,
;相当于AL×2
MOV BL,AL MOV CL,2 SAL AL,CL
3.6 控制转移类指令
1、无条件转移指令 2、条件转移指令 3、循环控制指令 4、调用和返回指令
5
用于实现分支转移、循环控制、过程调用等
常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET 一般了解: INT n/IRET INTO LOOPZ / LOOPNZ
控制转移类指令通过改变IP(和CS) 值,实现程序执行顺序的改变
next:
lea si , X
lea di , Y mov ax , [si] sub ax , [di] jns next neg ax ;neg是求补指令:0-ax mov result , ax
BCD码:二进制编码的十进制数
BCD码是十进制数,而运算器对数据做加减运 算时,都是按二进制运算规则进行处理的(四位 二进制相加逢十六进一),而实际上是两个十进 制数相加,应该逢十进一.因此采用BCD码后,在 两数相加的和小于或等于9时,十进制运算的结 果是正确的;当大于9时,结果不正确,必须加6修 正后才能得出正确的结果.
12
相对寻址方式
Jcc指令的操作数label是一个标号
条件转移指令的目的地址必须在现行的代码段内 一个8位位移量,表示Jcc指令后的那条指令的偏移 地址,到目标指令的偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地址- 128~+127个单元的范围之内,属于段内短距离转 移
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
33
例、编写指令序列,确定AL中“1”的个数。
解: XOR AH,AH ;累加器清零
MOV CX,08H
Start:ROL AL,1
;设置循环次数
;AL循环左移1位
;AL的最高位送CF
JNC Lp ;CF=0,转移到Lp
INC AH
Lp: LOOP Start
;CF=1,AH+1→AH
;CX-1→CX,CX≠0 ;循环到Start执行
复习
1、逻辑运算指令: AND OR XOR NOT TEST 2、移位指令:
移位指令小结
指 令 逻辑左移指令SHL 逻辑右移指令SHR 算术左移指令SAL 算术右移指令SAR 循环左移指令ROL 循环右移指令ROR 带进位位循环左移指令RCL 带进位位循环右移指令RCR 主要作用 将操作数乘以2的CL次。 将操作数除以2的CL次。
⑴ ⑶
① JMP SHORT HELLO
;转移到目标地址是HELLO ,
;IP被修改了
② JMP [NEAR PTR] ABC ;转移到目标地址ABC, ;IP被修改了
6
段内转移、直接寻址
实际为相对寻址
JMP label ;IP←IP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地址到 目标指令的偏移地址的地址位移(即相距多少字节单元)
mov ah,0
jmp done next2: done:... mov ah,0ffh
;D7=0,顺序执行
;无条件转向
例:JS/JNS指令
;X和Y为存放于X单元和Y单元的16位操作数
;计算|X-Y|(绝对值) ;结果存入result单元
lea si , X lea di , Y mov ax , [si] cmp ax , [di] jns next neg ax ;neg是求补指令:0-ax mov result , ax
例:JP/JNP指令
设字符的ASCII码在AL寄存器中 若该字符ASCII码中为“1”的个数已为奇数时 则令其最高位为“0”;否则令最高位为“1” 将字符加上奇校验位
and al,7fh ;最高位先置“0”,并判断“1”的个

jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: ...
⑴ 小于(不大于等于):JL(JNGE) ⑵ 不小于(大于等于):JNL(JGE)
⑶ 小于等于(不大于):JLE(JNG)
⑷ 不小于等于(大于):JNLE(JG )
22
例:比较无符号数
cmp ax , bx ;比较ax和bx jnb next ;若ax≥bx,转移 xchg ax , bx ;若ax<bx,交换 ...
记录BX中“1”的个数——方法2
xor al , al
;al=0,cf=0
;等价于 cmp bx , 0 ;若bx=0,转到next
again:
test bx , 0ffffh
jz next
shl bx , 1
jnc again inc al jmp again next: ...
;否则,bx逻辑左移1位
14
例:JZ/JNZ指令
test al,80h jz next1 mov ah,0ffh jmp done mov ah,0 ... jnz next2 ;测试AL的最高位 ;D7=0(ZF=1),转移 ;D7=1,顺序执行 ;无条件转向
next1: done:
test al,80h
;测试最高位 ;D7=1(ZF=0),转移
next:
例:JO/JNO指令
;X和Y为存放于X单元和Y单元的字操作数 ;计算X-Y ;若溢出,则转移到overflow处理 lea si , X lea di , Y mov ax , [si] cmp ax , [di] jo overflow ... ;无溢出,结果正确 overflow: ... ;有溢出,出错处理
将操作数乘以2的CL次。 将补码数除以2的CL次。 将操作数的高低4位或8位 (字节)数据相交换。
保存其它指令移入CF的值
2
3.6 控制转移类指令
1、无条件转移指令
2、条件转移指令
3、循环控制指令
4、调用和返回指令
4

用于实现分支、循环、过程等程序结构 常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET 一般了解: INT n/IRET INTO LOOPZ / LOOPNZ
结果:AX保存较大的无符号数
next:
24
例:比较有符号数
cmp ax,bx ;比较ax和bx jnl next ;若ax≥bx,转移 xchg ax,bx;若ax<bx,交换 ...
next:
结果:AX保存较大的有符号数
25
例:X>50,转到TOO_HIGH; 计算X-Y: 溢出转到OVERFLOW, 否则 |X-Y|→RESULT MOV AX, X CMP AX, 50 JG TOO_HIGH CMP AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, AX TOO_HIGH: … OVERFLOW: …

控制某程序段反复执行的次数。循环指令默认利用CX计数 器,方便实现计数循环的程序结构 label操作数采用相对寻址方式
32

LOOP
格式:LOOP label
操作:(CX)-1→CX;
若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 不影响标志位。
实际上,该指令可以等价两条指令: DEC CX JNZ dst ;CX-1→CX ;ZF=0,转向dst执行
34
jmp again …… dec cx …… jmp output …… mov bl,al jmp 0120H ;转向again处继续执行 ;标号again的指令 ;转向output ;标号output的指令 ;直接转向CS:0120H单元
8
again:
output:
2. 条件转移指令
格式: Jcc label 功能:条件满足,转移到目的地址label 去执行;条件不满足,顺序执行下一条指令,
3) 低于等于(不高于):JBE(JNA)
4) 不低于等于(高于):JNBE(JA ) 5) 相等(等于零):JE/JZ 6) 不相等(不等于零):JNE/JNZ
21
(3)比较有符号数大小

有符号数的大小用 大(Greater)小(Less)表示 利用ZF标志确定相等(Equal)


两数的大小分成4种关系:
不影响标志位。
11
Jcc指令的分类

Jcc指令不影响标志,但要利用标志位。根据利
用的标志位不同,16条指令分成3种情况:
(1)判断单个标志位状态
(2)比较无符号数高低
(3)比较有符号数大小
13
(1)判断单个标志位状态
条件转移指令 功 能 JS dst 结果为负数转移 JNS dst 结果为正数转移 JZ dst JNZ dst JP dst JNP dst JC dst JNC dst JO dst JNO dst 结果为零转移 结果不为零转移 奇偶校验结果为偶转移 奇偶校验结果为奇转移 结果有进位(借位)转移 结果无进位(借位)转移 结果溢出转移 结果不溢出转移 转移条件 SF=1 SF=0 ZF=1 ZF=0 PF=1 PF=0 CF=1 CF=0 OF=1 OF=0
;cf=0,转到again
;cf=1,al加1
;无条件转到again ;al保存1的个数
20
(2)比较无符号数高低

无符号数的大小用 利用CF确定高低
高(Above)、低(Below)表示,

利用ZF标志确定相等(Equal )
两数的高低分成:
1) 低于(不高于等于):JB(JNAE/JC) 2) 不低于(高于等于):JNB(JAE/JNC)
3. 循环指令(loop)
JCXZ label ;CX=0,转移到标号label LOOP label ;CX←CX-1, ;CX≠0,循环到标号label
LOOPZ label ;CX←CX-1, ;CX≠0且ZF=1,循环到标号label
LOOPNZ label ;CX←CX-1, ;CX≠0且ZS)值, 实现程序执行顺序的改变
5
1 无条件转移指令

指令格式:
JMP label ;程序转向label标号指定的地址
指令功能:使程序转到指定的目标地址处,并从该处开始继 续执行,操作数label是要转移到的目标地址(目的地址、 转移地址) 段内转移、直接寻址;⑵ 段间转移、直接寻址;⑷ 段内转移、间接寻址 段间转移、间接寻址
例:JC/JNC指令
;记录BX中1的个数——方法1
xor al , al again: cmp bx , 0 jz next shl bx , 1 adc al , 0 jmp again next: ...
;al=0,cf=0
;也可使用 shr bx , 1 ;al=al+(cf) ;al保存1的个数
相关文档
最新文档