(1)JMP无条件转移指令

  • 指令格式:

    JMP 目的
    
  • 指令功能:
    使程序无条件地转移到指令中指定的目的地去执行。
  • 这类指令又分为两种类型:
    • 第一种类型:段内转移或近(NEAR)转移,转移指令的目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。
    • 第二种类型:段间转移,又被称之为远(FAR) 转移,转移指令的目的地址和JMP指令不在同一段中,发生转移时,CS和IP的值都要改变——程序要转移到另一个代码段去执行。

无条件转移指令的类型和方式

类型 方式 寻址目标
段内转移 直接 立即短转移(8位)
段内转移 直接 立即近转移(8位)
段内转移 间接 寄存器(16位)
段内转移 间接 存储器(16位)
段间转移 直接 立即转移(32位)
段间转移 间接 存储器(32位)
  1. 段内直接转移指令
    指令格式:

    JMP SHORT       标号
    JMP NEAR   PTR  标号(或JMP 标号)
    

jmp指令能够修改 IP 或 CS 或者同时修改的指令

  • CS:段地址
  • IP:偏移地址

通过以下指令,修改段地址和偏移地址

jmp 4000:0

jmp 2600:500


错误的修改CS和IP的方式:

mov cs,2000
mov ip,500
mov ip,ax

以上三条修改方式均是错误的修改方式。

注意:用以下方式虽然编译成功,但是也不能对CS进行正确的修改。

mov ax,500
mov cs,ax

但是用以下这种方式对IP进行修改:

mov ax,500
jmp ax

指令执行的过程:

  • 1.CPU从 cs:ip 所组成的地址中读取指令,将这个指令存放到指令缓存器中
  • 2.IP = IP + 所读指令的字节数
  • 3.执行指令缓存器中的内容,回到步骤 1 重复这个过程。

假设cs = 2000, IP = 0000, 写出指令执行的过程

a 2000:0
mov ax,6622   ; cs = 2000, ip = 0 + 3 = 3
jmp 1000:3     ;  cs =2000, ip= 3 + 5  = 8
mov cx,axa 1000:0
mov ax,0123    ; cs = 1000  ip = 0 + 3 = 3
mov ax,0          ; cs = 1000  ip = 3 + 3 = 6
mov bx,ax       ; cs =  1000  ip = 6 + 2 =8
jmp bx              ;cs = 1000  ip = 0


例:

mov ax,bx     ; ax = bx
sub ax,ax      ; ax = ax - ax =0
jmp ax
mov ax,bx     ; => 指令缓存器 => 1   =>  执行
sub ax,ax      ; => 指令缓存器 = > 1  = > 执行
jmp ax           ; => 指令缓存器 = > 1   => 执行 => 1

上面3条指令执行后,cpu 4次修改了IP,最后一次IP的值为0


用3条指令写入从2000:0开始的内存单元,利用3条指令计算 2 的 8 次方

mov ax,1
add ax,ax
jmp 2000:3





(2)过程调用和返回指令
在编写程序时,往往把某些能完成特定功能而又经常要用到的程序段,编写成独立的模块,并把它成为过程,习惯上也称为主程序,然后在程序中用CALL语句调用这些过程,调用过程的程序称为主程序。若在过程运行中又去调用另一个过程,称为过程嵌套。它使程序结构清晰,可读性强,同时也能节省内存。

过程调用和返回指令的格式如下:

CALL 过程名
RET

过程调用有近调用和远调用两种类型 。
例如:

上面程序代码执行的顺序:

             call cpy_Boot                 ; 执行该代码后,会跳转到 cpy_Boot ,执行到ret 后跳转到 call cpy_Boot下面的代码继续执行。(类似 C语言的goto)
=============================================================
cpy_Boot:mov bx,1000Hmov bx,1001Hmov bx,1002Hmov bx,1003Hmov bx,1004Hretmov ax,1000Hmov ax,1001Hmov ax,1002Hmov ax,1003Hmov ax,1004Hmov ax 4c00Hint 21H

汇编 无条件转移和过程调用指令相关推荐

  1. 【汇编语言与计算机系统结构笔记09】程序栈,(x86-32)过程调用,栈帧,寄存器使用惯例

    本次笔记内容: 10.栈与过程调用的机器表示-1 11.栈与过程调用的机器表示-2 12.实验 文章目录 前言 x86-32的程序栈 压栈操作 出栈操作 过程调用 基于栈的编程语言 栈帧 x86-32 ...

  2. 阴间指令集MIPS简介:汇编,IO,过程调用与冒泡排序

    目录 前言 MIPS指令集简介 MIPS资源 寄存器资源 内存资源 MIPS指令 算数指令 数据传输指令 逻辑指令 分支跳转指令 MIPS模拟器 编译并且运行简单求和程序 MIPS模拟器中的汇编 MI ...

  3. 关于IA-32过程调用和其中的push、leave、ret指令

    最近在复(yu)习(xi)<计算机系统基础>这门课程,发现了寄叽还是有很多问题.当时在学的时候没注意到的小细节,现在在这里展开说说,就当是一个记录寄叽学习的过程.我这个人理解能力不太行,我 ...

  4. 【编译原理笔记14】中间代码生成:布尔表达式的回填,控制流语句的回填,switch语句的翻译,过程调用语句的翻译

    本次笔记内容: 6-8 布尔表达式的回填 6-9 控制流语句的回填 6-10 SWITCH语句的翻译 6-11 过程调用语句的翻译 本节课幻灯片,见于我的 GitHub 仓库:第14讲 中间代码生成_ ...

  5. 操作系统【用户接口】命令解释程序的主要功能、系统调用与一般过程调用的不同之处、系统调用的参数传递方式、系统调用的处理步骤

    操作系统 第九章 接口--用户接口   系统安全 命令解释程序:命令解释程序的主要功能: 系统调用:①系统调用与一般过程调用的不同之处②系统调用的参数传递方式③系统调用的处理步骤 命令解释程序的主要功 ...

  6. 编译原理——语法制导翻译并产生中间代码(while,复合语句和过程调用语句的翻译)

    while,复合语句和过程调用语句的翻译 while: S的chain可以理解为回填while语句之后的第一个四元式,对于之前的if--else也可以这样理解 W的语义子程序需要保留四元式号,Wd需要 ...

  7. Aarch64过程调用标准

    前言 Aarch64过程调用标准(AAPCS64)描述了在ARM 64位体系结构下应用程序二进制接口(ABI)在过程调用中应遵循的调用约束,涉及寄存器使用规则.堆栈布局.函数参数传递以及返回值保存等内 ...

  8. 远程过程调用RPC简介

    RPC(Remote Procedure Call, 远程过程调用):是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. RPC是一种技术思想而非一种规范或协议,常见RPC技术 ...

  9. C++对象模型3——vptr的位置、手动调用虚函数、从汇编代码看普通调用和多态调用

    一.vptr的位置 class test { public:int i; virtual void testfunc() {} };int main() {test a;char* p1 = rein ...

最新文章

  1. cout 数组_C语言学习笔记(十)二维数组内存预设
  2. 用Spring Boot复刻一款天猫商城,你可以做到!
  3. 160 - 13 badboy
  4. nginx解析漏洞 只要可以上传文件就会被黑
  5. 支付宝老年大学招95后青年讲师:不要大厂经验高学历,只要会跳广场舞会钓鱼?...
  6. Python判断字符类型
  7. 深度学习14-实战三-Google涂鸦识别挑战项目(上)
  8. Matlab2012b安装步骤(附带Matlab2012b破解码及序列号)
  9. EDA技术及应用实验2 f_adder程序
  10. 白杨SEO:今日头条、腾讯广点通、百度等信息流广告如何投放和优化?
  11. 原来把300页Word转成PPT,只需要一个键!别再复制粘贴了
  12. 正睿17+2天集训总结TOT
  13. 猎头职场:为什么你职场总碌碌无为
  14. centos设置东八区
  15. 测量耐力也有算法了!仅需锻炼20分钟,就能知晓自己能跑多久
  16. python3 笔记6 字符串
  17. 数字电路基础知识——组合逻辑电路(奇偶校验电路、数据比较器的设计)
  18. flutter tabBar 选项卡自定义指示器
  19. 多宽带联网(三) OpenWrt中使用cURL方法编写Shell脚本自动完成网页宽带认证登录(校园网认证登录解决方案) 使用awk命令
  20. D-bus学习笔记一 基础知识篇

热门文章

  1. Swift 3 新特性
  2. Windows Phone 7 自定义控件库
  3. 输入检测的诡异问题--firefox和ie的兼容性
  4. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
  5. jQuery中slice()方法用法实例
  6. 三层之抽象工厂加反射实例
  7. linux经典书籍--linux系统编程手册
  8. Channel的几种状态
  9. 十六进制转换为十进制的效率问题
  10. STM8控制4位LED数码管显示数字