[BX]和loop指令

133 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 [bx]与内存单元的描述

image.png 通过debug在代码段看出的指令内容与一开始所期望的不一样

 

ATTENTION

通过debug

-a 13eb:0 写入 mov ax, [0] ,正常将数据段偏移地址0位的内容填入ax中

但通过编辑器写的3.asm中写的 mov ax, [1] 在debug中的代码段只显示出 mov ax,01

 

[bx]是什么

和[0]有些类似,[0]表示内存单元,它的偏移地址是0

image.png  

完整地描述一个内存单元,需要两种信息:

(1)内存单元的地址;

(2)内存单元的长度(类型);

 

我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出,比如前面的AX,AL。

 

如果直接在编辑器编辑的asm文件中写入mov ax, [0],编译器只会认为是把0传给ax寄存器。

若想把偏移地址为0对应的内存单元传过去可通过

编译器:

  1. mov bx, 0
  2. mov ax,[bx]

 

Debug:

mov ax,[0]

 

注意 描述性符号“()”

image.png

(X)

image.png

image.png

image.png

image.png sp中存放偏移地址

 

约定符号idata表示常量

image.png

 

image.png  

 

 

汇编 inc 和 dec 指令

知识点:


inc1指令
dec1指令


一、加一指令inc
inc a 相当于 add a,1 //i++
优点 速度比sub指令快,占用空间小
这条指令执行结果影响AFOFPFSFZF标志位,但不影响CF进位标志位.


二、减一指令dec
dec a 相当于 sub a,1 
004012D7 >     83E8 01        SUB EAX,1
004012DA      836D FC 01     SUB DWORD PTR SS:[EBP-4],1
004012DE      41             INC ECX
004012DE      FF41 FC       INC DWORD PTR DS:[ECX-4]




优点 速度比sub指令快,占用空间小
这条指令执行结果影响AFOFPFSFZF标志位,但不影响CF进位标志位.

 

Loop指令

image.png 指令格式:loop 标号,CPU执行loop指令的时候,要进行两步操作:

  1. (cx)=(cx) -1;
  2. 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

cx中的值影响着loop指令的执行结果

通常用loop指令实现循环功能,cx中存放循环次数。

 

  image.png

loop s(标号)

跳到s的地址

(1)标号

汇编语言中,一个标号代表一个地址,此程序中有一个标号s。它实际上认识了一个地址,这个地址处有一条指令:add ax,ax

(2)loop s

CPU执行loop指令的时候,要进行两步操作:

    1. (cx)=(cx) -1;
    2. 判断cx中的值,不为零则转至标号(s)处执行程序,如果为零则向下执行。

执行loop s时,首先要将(cx)减1

  image.png

image.png

 

CX中的值变为0后,向下执行指令

 

cx和loop指令相配合实现循环功能的三要点:

(1)在cx中存放循环次数

(2)loop指令中的标号所标识地址要在前面

(3)要循环执行的程序段,要写在标号与loop指令的中间