【汇编语言/底层开发】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{}循环。

目录
相关文章
|
3月前
汇编指令学习(LOOP)
汇编指令学习(LOOP)
14 0
|
3月前
|
存储 程序员
【汇编】Loop指令、段前缀
【汇编】Loop指令、段前缀
【汇编】Loop指令、段前缀
|
6月前
汇编指令学习(LOOP)
汇编指令学习(LOOP)
23 0
汇编指令学习(LOOP)
汇编(八)[bx] 、Loop指令
5.1[bx] [bx]是什么? 实际上debug的语法和masm编译的语法是不一样的 如果直接使用 mov ax, [0] 是不行的,编译器会把它看做 mov ax, 0 需要使用bx, 比如 mov bx, 0, mov ax, [bx]的形式 mov ax, [bx] 功能:将bx.
656 0
汇编(七)[bx]、 loop指令、debug与masm
汇编、[bx]、 loop指令、debug与masm、汇编程序
4295 0
|
11月前
|
存储 Java C++
汇编语言、寄存器分类及程序计数器
汇编语言、寄存器分类及程序计数器
84 0
|
11月前
|
C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
11月前
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
11月前
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
存储 API C语言
从反汇编看恶意程序的C语言结构(二)
从反汇编看恶意程序的C语言结构
93 0