【汇编语言/底层开发】5、[BX]和loop指令
开发 指令 底层 汇编语言 loop
2023-09-27 14:29:20 时间
1、[bx]
在之前编写的汇编代码中,我们经常使用到[0]、[1]等标志,方括号中的数字表示某个偏移地址,该地址同段地址一起表示某个内存的位置。但是,在实际应用中存在一个问题,masm等编译器实际上不支持[n]这样的写法,在代码中的[1]、[2]实际上会被处理成1、2等数字型常量,而不是我们希望的偏移地址。
更方便的方法是在显式地给出段地址之后,给出偏移地址:
实际上debug的语法和masm编译的语法是不一样的 如果直接使用 mov ax, [0] 是不行的,编译器会把它看做 mov ax, 0 需要使用bx, 比如 mov bx, 0, mov ax, [bx]的形式 mov ax, [bx] 功能:将bx.
jerry.yin 毕业于上海大学通信与信息工程学院,从事流媒体和视频编解码的研究与开发工作; 研究领域包括视频编解码标准、视频处理和流媒体技术、移动互联网技术等。
1、[bx]
在之前编写的汇编代码中,我们经常使用到[0]、[1]等标志,方括号中的数字表示某个偏移地址,该地址同段地址一起表示某个内存的位置。但是,在实际应用中存在一个问题,masm等编译器实际上不支持[n]这样的写法,在代码中的[1]、[2]实际上会被处理成1、2等数字型常量,而不是我们希望的偏移地址。
为了解决这个问题,汇编语言中定义了[bx]的写法。bx中存放的数据被当做是一个偏移地址,相应的段地址保存于寄存器DS,二者共同构成一个内存中的实际地址。使用方式如下:
mov ax, [bx] mov [bx], as上面两条语句分别表示从(ds)*16 + (bx)的地址空间中取出数据保存于寄存器ax,以及从ax中取出数据写到内存地址为(ds)*16 + (bx)的地址中去。
更方便的方法是在显式地给出段地址之后,给出偏移地址:
mov ax, ds:[0]
2、loop指令
loop,即跳转指令,可以在汇编代码中实现跳转和循环操作。loop跳转的判定需取决于寄存器cx中的值,并且在跳转的目标位置需要定义程序的标号。程序的标号实际上标识了程序的地址,地址处为标号指向的汇编指令。
CPU在执行loop指令的时候需要进行两步操作:(1)寄存器cx中的值子减1;(2)判断cx当前的值,如果为0则不执行loop继续向下顺序执行,如果不为0则跳转到指定的标号处执行相应的程序。通过这种方式实现的循环功能,其结构类似于C系语言中的do-while{}循环。
实际上debug的语法和masm编译的语法是不一样的 如果直接使用 mov ax, [0] 是不行的,编译器会把它看做 mov ax, 0 需要使用bx, 比如 mov bx, 0, mov ax, [bx]的形式 mov ax, [bx] 功能:将bx.
jerry.yin 毕业于上海大学通信与信息工程学院,从事流媒体和视频编解码的研究与开发工作; 研究领域包括视频编解码标准、视频处理和流媒体技术、移动互联网技术等。
相关文章
- 基于FPGA的DES加解密系统开发(5000字详细介绍欢迎订阅)
- Java 开发必备:腾讯架构师解析 Java 并发编程从入门到精通
- 全网最详细的Android(进阶)开发教程,100G+资源无偿分享
- 第一节:ASP.NET开发环境配置
- 颠覆式前端UI开发框架:React
- 《用于物联网的Arduino项目开发:实用案例解析》—— 1.5 小结
- iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用
- 木马感染千万安卓设备 其开发团队或与北京公司相关联
- Qt音视频开发2-vlc回调处理
- 《Arduino开发实战指南:LabVIEW卷》——第2章 Arduino软件
- 一个人软件独立开发。
- android-使用环信SDK开发即时通信功能及源代码下载