控制转移类指令
控制转移类指令.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
第3章.指令系统控制程序转移类指令new下
;3字节指令
同样地,使用时,可以将rel理解成标号,即: CJNE A,#data, 标号 CJNE A,direct,标号 CJNE Rn,#data,标号 CJNE @Ri,#data,标号
⑵比较(不相等)转移指令
① CJNE A,#data,rel
;先(PC)+3→PC
若(A)>#data,则(PC)+rel→PC,且0→CY; 若(A)<#data,则(PC)+rel→PC,且1→CY; 若(A)=#data,则顺序执行,且0→CY。
② rel为负数时,范围为:-128~-1 (80H~FFH)。
③相对转移指令“SJMP rel”
★正向跳转时: rel=目的地址-源地址-2
=地址差-2。
例如:
0157H
0100H:SJMP rel
设转移的地址为0157H,则: rel=0157H-0100H-2=55H。故该指令可写成:
0100H:SJMP 55H 其机器码为: 80H 55H
⑵位置1指令
SETB C SETB bit
; 1→ CY。 1字节指令 ;1→bit 。 2字节指令
2. 位修正指令
⑶位取反指令
CPL C
;(C)→C, 1字节指令
CPL bit ;(bit) → bit。 2字节指令
3. 位逻辑运算指令 ⑴位逻辑“与”指令 ANL C, bit ;(C) ∧ (bit)→C。 2字节指令 ANL C, /bit ;(C) ∧ (bit) →C。 2字节指令
; 否则顺序执行。
JNZ rel ;(PC)+2→PC。若A≠0,则转移到(PC)=(PC)+rel ;
;否则顺序执行。
控制转移类指令
控制转移类指令✧用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.✧控制转移类指令通过改变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课件(全)
(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范围内。
微机原理6_控制转移类指令
还可用SAR、ROR和RCR指令
;将AX的最低位D0移进CF
jnc even
;标志CF=0,即D0=0:AX内是偶数,程序转移
add ax,1
;标志CF=1,即D0=1:AX内的奇数,加1
even: shr ax,1
;AX←AX÷2
第2章:例题2.22解答3 用JNS指令实现
mov bx,ax
ror bx,1
done: ……
第2章:例2.24 偶校验
;对DL寄存器中8位数据进行偶校验 ;校验位存入CF标志
2:将最低位用移位指令移至进位标志,判断进位标志是0, AX就是偶数;否则,为奇数
3:将最低位用移位指令移至最高位(符号位),判断符号 标志是0,AX就是偶数;否则,为奇数
第2章:例题2.22解答1 用JZ指令实现
test ax,01h
;测试AX的最低位D0(不用AND指令,以免改变AX)
jz even
第2章:无条件转移指令JMP(jump)
JMP label
;段内转移、相对寻址
;IP←IP+位移量
演示
JMP r16/m16
;段内转移、间接寻址
;IP←r16/m16
演示 演示
JMP far ptr label ;段间转移、直接寻址
;IP←偏移地址,CS←段地址
演示
JMP far ptr mem ;段间转移,间接寻址
第2章:例题2.22
题目:将AX中存放的无符号数除以2,如果是奇 数则加1后除以2 问题:如何判断AX中的数据是奇数还是偶数? 解答:判断AX最低位是“0”(偶数),还是“1” (奇数)。可以用位操作类指令
1:用逻辑与指令将除最低位外的其他位变成0,保留最低位 不变。判断这个数据是0,AX就是偶数;否则,为奇数
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控制转移指令
例:某温度控制系 统,采集的温度值 (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 本指令是三字节指令,调用地址在指令中直接
微机原理与应用:第十四讲 控制转移指令
JMP @A+DPTR的跳转范围是以DPTR内容为起始点,向 下跳转255个单元。
2K页内跳转指令AJMP addr11,跳转范围是存储器 某一页面内。
13
转移指令的比较续
FFFFH FFFEH
┆
a7…a0 a15…a8
解: 由于指令执行前(TI)=1,则该指令条件满足, 转移地址=8053H+3+93H=8056H+FF93H=7FE9H, 指令执行后(PC)=7FE9H,
根据该指令的功能,当该指令发生转移时,TI清零,即TI=0。
22
二、比较不相等转移指令
(1)CJNE
A,
direct, rel
指令功能:如果(A)≠(direct),条件满足转移。
rel 是带符号补码的偏移量,它的值可正可负。
5
相对转移指令续
❖ 从以上转移地址形成的公式可知,转移地址是相对于当 前PC值作相对偏移。
❖ 如果偏移量为正,程序就往下跳;如果偏移量为负,程 序就往上跳
6
例3-45
若执行的相对转移指令的地址为8123H,其偏移量 为04H,请问该指令执行的结果,即转移地址为多少?
这组转移指令有一个共性,就是其转移地址的形成 都是按相对寻址的方式来形成的。
本组指令有测试条件符合转移指令、比较不相等转 移指令和减1不为零转移指令。
17
一、测试条件符合转移指令
(1)累加器ACC内容是否为零条件转移指令
JZ 转移地址; 01100000
rel
JNZ 转移地址; 01110000
rel
解: LOOP: NEXT: STOP:
控制转移指令
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 结果 目标地址
C51控制转移类指令及位操作指令
采用助记符有:AJMP、LJMP、SJMP、JZ、 JNZ、CJNE、DJNZ、ACALL、LCALL、RET、 RETI、NOP等13种。
2
整理课件
条件转移指令
条件转移指令仅仅在满足指令中规定的条件(如累 加器内容是否为零,两个操作数是否相等) 时才执行无 条件转移,否则程序顺序执行。
•所调用的子程序的首地址必须与ACALL后面指令的 第一个字节在同一个2 KB区域内。
19
整理课件
例 : 设 ( SP ) = 60H , ( PC ) = 0123H , 子 程 序 SUBRTN的首地址为0456H。 执行指令为ACALL SUBRTN 执行结果为(PC)+2=0123H+2=0125H→(PC), 将(PC)=0125H压入堆栈:25H压入(SP)+1=61H, 01H压入(SP)十l=62H,此时(SP)=62H。 addr11 PC10–0 , PC=0456H
若(操作数1) >(操作数2),清进位标志(CY)。 若(操作数1) <(操作数2),则置位进位标志(CY)。 • 值相等,程序继续执行。 程序转移的范围是从(PC)+3为起始的+127~一128B 的单元地址。
6
整理课件
例:温度控制程序
某温度控制系统,A中存温度采样值Ta,(20H)=温度下限 值T20,(30H)=温度上限值T30。若Ta>T30,程序转降温JW, 若Ta<T20,程序转升温SW,若T30≥Ta≥T20程序转FH返回主程 序。
;5个方波,10个状态
LOP:
CPL P1.7
;P1.7状态变反
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
35控制转移指令
保存其它指令移入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个单元的范围之内,属于段内短距离转 移
控制转移指令
试着汇编下列源程序,如某条通过或无法通过汇编, ① 试着汇编下列源程序,如某条通过或无法通过汇编,根 据汇编信息窗口的提示,请逐条说明具体理由: 据汇编信息窗口的提示,请逐条说明具体理由: 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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
赋初值 循环体
【例】另一种做法
AGAIN:
MOV SI , 0 MOV DI , 0 MOV CX , 100 MOV AL , AREA1[SI] MOV AREA2[DI] , AL INC SI INC DI DEC CX JNZ AGAIN
赋初值 循环
3. 循环指令 LOOP
格式:LOOP label 操作:(CX)-1→CX;
Jcc M,N
M N 无符号数(A,B)
有符号数(G,L)
< (¬ >=)JB(JNAE)
JL(JNGE)
<= (¬>) JBE(JNA)
JLE(JNG)
> (¬<=) JA(JNBE)
JG(JNLE)
>= (¬<) JNB(JAE)
JNG(JLE)
=
JE/JZ
≠
JNE/JNZ
功能号:AH=01H 出口参数:AL=字符的ASCII码 功能:获得按键的ASCII代码值 调用此功能时,若无键按下,则会一直等待, 直到按键后才读取该键值
例:判断按键
getkey: mov ah,01h ;功能号:ah←01h
int 21h ;功能调用
cmp al,’Y’ je yeskey
2. 字符串输出的功能调用
DOS功能调用 INT 21H 功能号:AH=09H 入口参数: DS:DX=欲显示字符串在主存中的首地址 字符串应以$(24H)结束 功能:在显示器输出指定的字符串
可以输出回车(0DH)和换行(0AH)字符产生回 车和换行的作用
例:显示字符串
string DB
例:JZ/JNZ指令
next1: done:
next2: done:
test al,80h ;测试AL的最高位 jz next1 ;D7=0(ZF=1),转移 mov ah,0ffh ;D7=1,顺序执行 jmp done ;无条件转向 mov ah,0 ... test al,80h ;测试最高位
3.2.5 系统功能调用
21H号中断是DOS提供给用户的用于调用系 统功能的中断,它有近百个功能供用户选择 使用,主要包括设备管理、目录管理和文件 管理三个方面的功能
ROM-BIOS也以中断服务程序的形式,向程序员提供系统 的基本输入输出程序
汇编程序设计需要采用系统的各种功能程序
充分利用操作系统提供的资源是程序设计的一个重 要方面
... ;无溢出,结果正确 overflow: ... ;有溢出,出错处理
例:JP/JNP指令
;设字符的ASCII码在AL寄存器中
;将字符加上奇校验位
数
next:
and al,7fh ;最高位先置“0”,并判断“1”的个
jnp next ;个数已为奇数,则转向next
or al,80h ;否则,最高位置“1” ...
HLT
例:若X>50,转到TOO_HIGH,否则 计算X-Y: 溢出转到OVERFLOW, 否则 |X-Y|→RESULT
MOV AX, X CMP AX, 50 JG TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, AX TOO_HIGH: … OVERFLOW: …
例:比较无符号数
next:
cmp ax , bx ;比较ax和bx jnb next ;若ax≥bx,转移 xchg ax , bx ;若ax<bx,交换
...
结果:AX保存较大的无符号数
例:比较有符号数
举例:比较AL、BL、CL中带符号数的大 小,将最小数放在AL中。
BBB: CCC:
CMP AL,BL ;AL和BL比较 JNG BBB ;若AL≤BL,则转 XCHG AL,BL ;若AL>BL,则交换 CMP AL,CL ;AL和CL比较 JNG CCC ;若AL≤CL,则转 XCHG AL,CL ;若AL>CL,则交换
(3) DF设置指令
CLD STD
0→DF (串操作的指针移动方向从低到高) 1→DF (串操作的指针移动方向从高到低)
2.外部同步指令
(1)暂停指令 HLT
HLT ;进入暂停状态 暂停指令使CPU进入暂停状态,这时CPU不进行任何 操作。当CPU发生复位或来自外部的中断时,CPU脱 离暂停状态 HLT指令可用于程序中等待中断。当程序中必须等待 中断时,可用HLT,而不必用软件死循环。然后,中断 使CPU脱离暂停状态,返回执行HLT的下一条指令 HLT不影响标志位。
若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
LOOP指令与下面的指令段等价: DEC CX JNZ label
例:记录字符串中空格的个数
;String是附加段中的一个字符串
mov cx,count ;设置循环次数
lea si , string
xor bx,bx ;bx=0,记录空格数
'Hello,Everybody !',0dh,0ah,'$' ;在数据段定义要显示的字符串
... mov ah,09h ;设置功能号:ah←09h mov dx,offset string
;提供入口参数:dx←字符串的 偏移地址
int 21h ;DOS功能调用:显示
3. 字符输入的功能调用
DOS功能调用 INT 21H
next:
mov ax , X sub ax , Y jns next neg ax ;neg是求补指令:0-ax mov result , ax
例:JO/JNO指令
;计算X-Y; ;X和Y为存放于X单元和Y单元的字操作数 ;若溢出,则转移到overflow处理
mov ax , X sub ax , Y jo overflow
指令
MOV DI,1000H MOV CX,64H MOV AL,2AH MOV [DI],AL
109E : 010A INC DI
109E : 010B DEC CX
109E : 010C JNZ 0108
109E : 010E HLT
109E : 0110
写入2AH(*)后,数据段中相应存储单元的内容改 变如下:
mov al,20h ;空格的ASCII码为20H
again: cmp al,es:[si]
jnz next ;ZF=0非空格,转移
inc bx
;ZF=1是空格,个数加1
next: inc si
dec cx
loop again
jnz again
;字符个数减1,不为0继续循环
应用举例:将数据段1000H开始的100个存储 单元全部填充为ASCII码2AH(*)。
(2)空操作指令NOP
不执行任何操作,但占用一个字节存储 单元,空耗一个指令执行周期,然后执行 下一条指令。 NOP常用于程序调试
在需要预留指令空间时用NOP填充 (占位子)
代码空间多余时也可以用NOP填充 还可以用NOP实现软件延时
AREA2 AREA2+1 AREA2+99
...
SI
SI=2000H [SI] ~ AREA1[0] INC SI SI=2001H [SI] ~ AREA1[1]
DI
【例】等价程序
AGAIN:
LEA SI , AREA1 LEA DI , AREA2 MOV CX , 100 MOV AL , [ SI ] MOV [ DI ] , AL INC SI INC DI DEC CX JNE AGAIN
jnz next2 ;D7=1(ZF=0),转移
mov ah,0 ;D7=0,顺序执行
jmp done ;无条件转向
mov ah,0ffh
...
பைடு நூலகம்
例:JC/JNC
CMP AX, BX JC NEXT MOV AX , BX NEXT:MOV MIN ,AX
例:JS/JNS指令
;计算|X-Y|(绝对值) ;X和Y为存放于X单元和Y单元的16位操作数 ;结果存入result单元
功能调用的步骤
通常按照如下4个步骤进行: ⑴ 在AH寄存器中设置系统功能调用号 ⑵ 在指定寄存器中设置入口参数 ⑶ 执行指令INT 21H(或ROM-BIOS的中断向
量号)实现中断服务程序的功能调用 ⑷ 根据出口参数分析功能调用执行情况
1. 字符输出的功能调用
DOS功能调用 INT 21H 功能号:AH=02H 入口参数:DL=字符的ASCII码
Jcc指令的分类
Jcc指令不影响标志,但要利用标志 位。根据利用的标志位不同,16条指 令分成3种情况:
(1)判断单个标志位状态 (2)比较无符号数高低 (3)比较有符号数大小
(1)判断单个标志位状态
这组指令单独判断5个状态标志之一
⑴JZ和JNZ:判断结果是否为零(或相等) ⑵JS和JNS:判断结果是正是负 ⑶JO和JNO:判断结果是否产生溢出 ⑷JP和JNP:判断结果中“1”的个数是偶是奇 ⑸JC和JNC:判断结果是否进位或借位
MOV DI,1000H MOV CX,64H MOV AL, 2AH AGAIN: MOV [DI],AL INC DI DEC CX JNZ AGAIN HLT
;循环计数器
上程序段存放在代码段中,設(CS)=109EH, 则各条指令存放地址如下:
CS : IP 109E : 0100 109E : 0103 109E : 0106 109E : 0108
【例】复制数据块
AREA1 AREA1+1 AREA1+99
AREA2 AREA2+1 AREA2+99