无条件转移指令
转移指令JMP

转移指令: JMP 地址
功能:使程序无条件地转移到指令中指定的且标地址去执行(即地址指向的内容)

;具体例子
assume cs:code
code segmentmov ax,0jmp s           ;跳过add ax,1  执行inc axadd ax,1s:inc ax
code endsend
段内转移和段间转移(近转移和远转移)

段内转移(近转移near)
特点:目标地址和JMP指令在同一个代码段
不需要更改CS段地址,只要改变IP偏移地址
短转移short是近转移的一个特例( 16位到8位)(为段内转移的特例)
短转移short转移范围在段内-128~+127范围的转移

1、段内直接转移指令
格式:JMP label(符号地址)

;例子
again:  dec cx  ;标号again的指令……jmp again   ;转移到again处继续执行……jmp output   ;转向output……
output: mov result,al   ;标号output的指令

2、段内间接转移指令
格式:JMP r16/word ptr m16 ;IP←r16/m16
将一个16位寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容

jmp ax       ;IP←AX
jmp word ptr [2000h]    ;IP←[2000h]

段间转移(远转移far)
特点:目标地址和JMP指令在不同代码段
需要更改CS段地址和IP偏移地址
目标地址必须用一个32位数表达(32位远指针)

1、段间直接(远)转移指令
格式:JMP far ptr label;IP←label的偏移地址 CS←label的段地址

将标号所在段的段地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行

2、段间间接转移指令
格式:JMP far ptr mem
;IP←[mem],CS←[mem+2]
用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器

mov word ptr [bx],0
mov word ptr [bx+2],1500h
JMP far ptr [bx]    ;转移到1500h:0
条件转移指令
JCC指令

指令格式:Jcc label;条件满足,发生转移:IP←IP+8位位移量;条件不满足,顺序执行
如果条件cc成立,程序转移到由标号label指定的目标地址去执行指令;
如果条件cc不成立,则程序将顺序执行下一条指令
条件转移指令都是段内短转移
转移范围与JMP SHORT 指令相同
-128~+127个单元的范围之内

标志位知识回顾

6个状态标志位:

CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;
AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;
OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;
ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;
SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;
PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。

直接标志转移指令

基于1个状态标志位状态(同一组指令跳转条件均为前面的对应状态为1,后面那个对应状态为0)

  1. JC,JNC
    判断CF的状态,常用于两个无符号数比较大小
  2. JZ/JE,JNZ/JNE
    判断ZF的状态,常用于循环体的结束判断
  3. JS, JNS
    判断SF的状态,常用于判断数的性质
  4. JO, JNO
    判断OF的状态,常用于有符号数溢出的判断
  5. JP/JPE, JNP/JPO
    判断PF的状态,常用于判断结果低8位1的个数是否为偶数
    各种例子
;JC/JNC:记录BX中1的个数xor al,al ;AL=0,CF=0
again:  test bx,0ffffh ;等价于 cmp bx,0je next        ;bx=0跳到nextshl bx,1jnc again      ;cf=0跳到againinc aljmp again
next:   ... ;AL保存1的个数
;JS/JNS 指令   计算|X-Y|(绝对值)
;X和Y为存放于X单元和Y单元的16位操作数;结果存入resultmov ax,Xsub ax,Yjns nonneg   ;结果非负,为正neg ax    ;neg是求补指令
nonneg: mov result,ax
;JO/JNO指令:计算X-Y;
;X和Y为存放于X单元和Y单元的16位操作数;若溢出,则转移到overflow处理mov ax,Xsub ax,Yjo overflow...    ;无溢出,结果正确
overflow:   ... ;有溢出处理
间接标志跳转指令(无符号数)

无符号数高低有4种关系:

  1. JA (JNBE) --CF V ZF=0(大于)
  2. JAE (JNB)-----CF=0 (大于等于)
  3. JB (JNAE) -----CF=1 (小于)
  4. JBE (JNA)-----CF V ZF=1 (小于等于)
    注()内为指令的等价指令,CF=1 小于,ZF=1 等于
    例子
    编写一程序段,实现比较两个无符号数的大小,将较大者存放在AX寄存器中
cmp ax,bx    ;比较ax和bx,(AX)-(BX)
jae next        ;若ax>bx,转移
xchg ax,bx  ;若ax<bx,交换
next:
间接标志跳转指令(比较有符号数)

1)JG (JNLE) ----(SF 异或 OF) V ZF=0 (大于)
2)JGE (JNL)-----SF 异或 OF=0 (大于等于)
3)JL (JNGE)------SF 异或 OF=1 (小于)
4)JLE (JNG)-----(SF 异或 OF) V ZF=1 (小于等于)

;JG:AL, BL, CL中有3个符号数,将最大数存于AL中CMP  AL, BL ;比较AL,BL的大小JG   LL           ;AL>BL时程序转到LLXCHG  AL, BL
LL:      CMP  AL, CL                JG  EXIT        ;AL>CL时转到EXITXCHG      AL, CL      ;AL≤BL
EXIT:
;JGE:计算X-Y的绝对值,X,Y为字类型有符号数,结果存入RESULTMOV    AX, X    SUB    AX, YJGE    M               ;NEG     AXM :       MOV     RESULT, AX
循环指令

循环范围:以当前IP为中心的-128~127范围内循环
循环次数:默认CX寄存器指定
无条件循环指令
LOOP label ;CX←CX- 1,
; CX≠0,循环到标号label,无条件循环指令
;相当于DEC CX
JNZ label

     mov ax,2           ;ax=2mov cx,3           ;cx=3s:add ax,ax           ;ax=2+2=4loop s
当执行到loop时①cx=cx-1, cx=2②如果cx≠0,转到s
mov cx,循环次数
s: 循环执行的程序段loop s

LOOPZ label ;CX←CX-1,
;CX≠0且ZF=1,循环到标号label
注,两个字符比较
LOOPNZ label ;CX←CX-1,
;CX≠0且ZF=0,循环到标号label
注:一般用于字符串中是否有某个字母

;编写一段程序,实现1+2+。。。。+100,把结果放入AX中。XOR AX,AX;清空AXMOV CX,100MOV BX,1
S:  ADD AX,BXINC BXLOOP S
;方法二XOR AX,AXMOV CX,100
S:  ADD AX,CXLOOP S;
子程序调用及返回指令

*子程序是完成特定功能的一段程序
*当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行
*当运行完子程序功能后,采用RET返回指令回到主程序继续执行
*CALL指令和RET指令都丕影响状态标志位

子程序的调用

调用指令的执行过程
1.保护断点
将调用指令的下一条指令的地址(断点)压入堆栈
2.获取子程序的入口地址
子程序第一条指令的地址
3.执行子程序(程序员完成)
功能实现,参数的保存及恢复
4.恢复断点
将断点的偏移地址弹出

子程序调用指令
子程序调用指令与JMP类似

CALL指令分成4种类型

  1. CALL子程序名 ;段内直接调用
  2. CALL r16
    CALL WORD PTR m16;段内间接调用
  3. CALL far ptr子程序名 ;段间直接调用
  4. CALL DWORD ptr mem ;段间间接调用

CALL指令需要保存返回地址:
段内调用一在 同一代码段内进行,也称近调用
偏移地址IP入栈
SP←-SP- 2, SS:[SP]← IP
段间调用一在不同代码段之间进行,也称远调用
段地址CS和偏移地址IP和入栈
SP←-SP- 2, SS:[SP]← CS
SP←SP- 2,SS:[SP]← IP

子程序返回指令

功能:弹出堆栈中由CALL指令压入的返回地址值,迫使CPU返回到主程序中CALL指令的下一条指令去继续执行,该指令常放在子程序的最后
说明:根据段内和段间、有无参数,具体分成4种情况
(1) RET ;无参数返回
(2) RET n ;有参数返回
n:多弹出几个字。
需要弹出CALL指令压入堆栈的返回地址
(3)段内返回——偏移地址IP出栈
IP←-SS:[SP], SP← -SP+2
(4)段间返回——偏移地址IP和段地址CS出栈
IP←SS:[SP], SP←-SP+2
CS←SS:[SP], SP←SP+2

中断指令

中断指令
1、中断指令INT
格式: INT n
多种中断
功能:产生一个中断类型号为n的内部中断,其n值是一一个0~FFH范围内的整数
2、溢出中断指令INTO
格式: INTO
功能:产生一个溢出中断
3、中断返回指令IRET
功能:退出中断过程,返回到中断时的断点处继续执行。所有的中断程序,不管是由软件引起还是由硬件引起,其最后一条指令必须是IRET

汇编语言指令系统——控制转移类指令相关推荐

  1. 8086CPU指令系统——控制转移类指令

    控制转移(Control Jump)类指令用于改变程序的执行顺序. 8086提供了以下控制转移指令: 调用与返回指令.无条件转移指令.条件转移指令.循环控制指令.中断指令. 一.调用与返回指令 调用指 ...

  2. java 控制转移指令_控制转移类指令

    条件转移指令Jcc根据指定的条件确定程序是否发生转移.如果满足条件则程序转移到目标地址去执行程序:不满足条件,则程序将顺序执行下一条指令. 其通用格式为: Jcc LABEL         ;条件满 ...

  3. 微机原理控制转移类指令

    1.无条件跳转指令 指令格式;JMP 目标地址 功能:JMP可以使程序无条件地跳转到程序存储器中某目标地址 注意点: 1)指令目标地址若在JMP指令所在的代码段内,属段内跳转,指令只修改IP内容.指令 ...

  4. 【单片机仿真】(十七)控制转移类指令 — 调用及返回指令

    目录 1.绝对调用指令 2.长调用指令 3.子程序返回指令 4.中断返回指令 1.

  5. 8086CPU指令系统——数据传送类指令

    数据传送(Data Transfer)类指令是指令系统中用的最多的一类指令,也是条数最多的一类指令,常用于将原始数据.中间运算结果.最终结果及其它信息在CPU(中央处理器)的寄存器和存储器之间进行传送 ...

  6. 8086指令系统 操作数地址,双操作数,单操作数,无操作数指令。一,传送类指令;二,二、算数运算类指令

    双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR 按指令功能划分为六大类: 1传送类指令 2算术运算类指令 3位操作类指令 4串操作类指令 5程序转移类指令 ...

  7. c语言rsi2010中制运行,汇编语言初探(控制类指令)-来自第三章3.6的笔记-P135-P163

    1.正溢出与负溢出: 首先,一个正数与一个负数相加,不可能溢出,因为结果的绝对值一定小于两个加数的绝对值,既然两个加数能合理表示出来,结果一定也能合理表示出来. 其次,正溢出是由于两个很大的正数相加, ...

  8. PLC流程控制类指令(JMP)编程应用

    跳转类指令都属于程序流程控制类指令,可以控制程序的执行流.跳转指令和跳转标签必须要在同一个块内(FB/FC),块内跳转标签必须要唯一.本文同时给出博途PLC梯形图模式下如何实现FOR循环功能FC的2种 ...

  9. 汇编语言JMP和LOOP(转移)指令

    默认情况下,CPU 是顺序加载并执行程序.但是,当前指令有可能是有条件的,也就是说,它按照 CPU 状态标志(零标志.符号标志.进位标志等)的值,把控制转向程序中的新位置. 汇编语言程序使用条件指令来 ...

  10. 微机原理——指令系统——传送类指令(MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF、POPF)

    博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问. [没事儿可以到我主页看看 ...

最新文章

  1. 【胡策08】解题报告
  2. [译]LINT TO SQL 介绍(数据库查询) - Part.3
  3. HanLP极致简繁转换详细讲解
  4. head.s 分析——Linux-0.11 学习笔记(三)
  5. cors跨域_Spring Boot 中通过 CORS 解决跨域问题
  6. hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理
  7. vns可变领域_技师可变工程师!
  8. 首个面向手绘草图的深度自监督表示学习
  9. jpa怎么传参到in中_Java中如何处理开关状态的属性字段?
  10. Linux 根文件系统目录结构与功能,4.Linux根文件系统和目录结构及bash特性
  11. Intel Edison学习笔记(二)—— 入门环境配置
  12. 多面集的表示定理 (Representation / Resolution / Caratheodory theorem of polyhedral Sets)
  13. [插件使用] 介绍与使用番茄助手
  14. 计算机专业毕业设计资料免费下载
  15. java 怎么使用 设计模式对业务进行解耦(一)
  16. cad字体安装_CAD字体如何划分?资源去哪下载?上千种字体资源,免费分享赠送...
  17. 折下我的翅膀,送你飞翔
  18. 【一文学会】vue.js入门到放弃
  19. access中的Format用法详解
  20. 编程5分钟,命名2小时!聊聊命名规则!

热门文章

  1. ps保存psd后图层全没了_ps保存成psd格式后,再打开就是一张图片而不显图层,怎么办啊??急!!...
  2. Yandex安装插件实现百度网盘不需要会员就能倍速播放
  3. 微信小程序列表切换样式简单案例
  4. 微信小程序 列表展示+详情
  5. IDEA打包失败解决方案
  6. 如何升级linux内核
  7. FileNet入门学习
  8. c语言二元一次方程代码,二元一次方程(示例代码)
  9. gRPC Mock Server
  10. 傅里叶变换到拉普拉斯变换及收敛域分析