您的位置:首页 > 运维架构

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

2014-11-18 16:37 218 查看
1、[bx]

在之前编写的汇编代码中,我们经常使用到[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{}循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: