【汇编语言/底层开发】5、[BX]和loop指令
2014-11-18 16:37
218 查看
1、[bx]
在之前编写的汇编代码中,我们经常使用到[0]、[1]等标志,方括号中的数字表示某个偏移地址,该地址同段地址一起表示某个内存的位置。但是,在实际应用中存在一个问题,masm等编译器实际上不支持
这样的写法,在代码中的[1]、[2]实际上会被处理成1、2等数字型常量,而不是我们希望的偏移地址。
为了解决这个问题,汇编语言中定义了[bx]的写法。bx中存放的数据被当做是一个偏移地址,相应的段地址保存于寄存器DS,二者共同构成一个内存中的实际地址。使用方式如下:
更方便的方法是在显式地给出段地址之后,给出偏移地址:
2、loop指令
loop,即跳转指令,可以在汇编代码中实现跳转和循环操作。loop跳转的判定需取决于寄存器cx中的值,并且在跳转的目标位置需要定义程序的标号。程序的标号实际上标识了程序的地址,地址处为标号指向的汇编指令。
CPU在执行loop指令的时候需要进行两步操作:(1)寄存器cx中的值子减1;(2)判断cx当前的值,如果为0则不执行loop继续向下顺序执行,如果不为0则跳转到指定的标号处执行相应的程序。通过这种方式实现的循环功能,其结构类似于C系语言中的do-while{}循环。
在之前编写的汇编代码中,我们经常使用到[0]、[1]等标志,方括号中的数字表示某个偏移地址,该地址同段地址一起表示某个内存的位置。但是,在实际应用中存在一个问题,masm等编译器实际上不支持
这样的写法,在代码中的[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{}循环。
相关文章推荐
- 【汇编语言/底层开发】2、CPU的寄存器
- 【汇编语言/底层开发】7、更灵活的定位内存地址方法
- 汇编语言04——[BX]和loop指令
- 【汇编语言/底层开发】4、使用masm编译、链接汇编源文件
- 汇编语言入门:[BX]和loop指令
- 【汇编语言/底层开发】9、转移指令的原理
- 汇编语言学习笔记(五)bx和loop指令
- 【汇编语言/底层开发】6、程序中包含多个segment
- 【汇编语言/底层开发】11、标识寄存器
- 汇编语言:第五章 [BX]和loop指令
- 【汇编语言/底层开发】10、CALL和RET指令
- 【汇编语言/底层开发】8、数据处理的两个基本问题
- 【汇编语言/底层开发】3、通过寄存器进行内存访问
- 【汇编语言/底层开发】1、CPU的总线与存储器
- 汇编语言笔记05-[bx]和loop指令
- Linux 汇编语言开发指南
- Windows汇编语言开发环境
- Linux 汇编语言开发指南
- 若用MASM写操作系统的启动部分如何实现? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 算术移位与逻辑移位有什么区别? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net