【汇编语言/底层开发】5、[BX]和loop指令

简介: 1、[bx] 在之前编写的汇编代码中,我们经常使用到[0]、[1]等标志,方括号中的数字表示某个偏移地址,该地址同段地址一起表示某个内存的位置。但是,在实际应用中存在一个问题,masm等编译器实际上不支持[n]这样的写法,在代码中的[1]、[2]实际上会被处理成1、2等数字型常量,而不是我们希望的偏移地址。

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{}循环。

目录
相关文章
|
5月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
115 0
|
5月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
474 0
几组汇编指令的比较
几组汇编指令的比较
|
8月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
8月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
8月前
|
编译器
8086 汇编笔记(八):转移指令的原理
8086 汇编笔记(八):转移指令的原理
|
10月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
386 2
|
10月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
1611 0
|
9月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
134 1