5.1 ~ 5.4

2020-03-12
2020-03-12
2 min read
Hits

  《汇编语言(第3版)》5.1 ~ 5.4、《零基础入门学习汇编语言》P23 ~ 26

第五章 [BX]和loop指令

5.1 [bx]

  mov ax,[bx]:bx 中存放的数据作为一个偏移地址 EA,段地址 SA 默认在 ds 中,将 SA:EA 处的数据送入 ax 中。即:(ax)=((ds)×16+(bx));

  反之 mov [bx],ax 即为将 ax 中的数据送入内存 SA:EA 处。即:((ds)×16+(bx))=(ax)

问题 5.1

汇编指令 | 含义

  • | - mov ax,2000H | (ax)=2000H(为确认数据段地址) mov ds,ax | (ds)=2000H mov bx,1000H | (bx)=1000H mov ax,[bx] | (ax)=(2000:1000) inc bx | (bx)=(bx)+1 inc bx | (bx)=(bx)+1 mov [bx],ax | (2000:1002)=(ax) inc bx | (bx)=(bx)+1 inc bx | (bx)=(bx)+1 mov [bx],ax | (2000:1004)=(ax) inc bx | (bx)=(bx)+1 mov [bx],al | (2000:1005)=(al) inc bx | (bx)=(bx)+1 mov [bx],al | (2000:1006)=(al)

5.2 Loop 指令

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

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

  标号决定了循环开始的位置

  在 cx 中存放循环次数(bx 存放内存偏移地址);

  loop 指令中的标号所标识地址要在前面;

  要循环执行的程序段,要写在标号和 loop 指令的中间。

  用 cs 和 loop 指令相配合实现循环功能的程序框架如下

mov cx,循环次数
s:
循环执行的程序段
loop s

5.3 在 Debug 中跟踪用 loop 指令实现的循环程序

在汇编源程序中,数据不能以字母开头!需要在前面加 0

  用 G 命令或 P 命令直接执行完循环。

5.4 Debug 和汇编编译器 Masm 对指令的不同处理

  将 ds:0 处的数据送入 al 中

指令位置指令执行效果
Debugmov al,[0]mov al,[0]
汇编源程序mov al,[0]mov al,0

  由上表可知,在汇编源程序中,指令“mov ax,[0]”被编译器当作指令“mov ax,0”处理。如果要实现“mov ax,[0]”,需要通过 bx 来代替

mov bx,2
mov ax,[bx]

  或也可以加上段地址

mov ax,ds:[0]
汇编源程序指令MASM编译结果
mov al,[0](al)=0
mov al,ds:[0](al)=(ds:0)
mov al,[bx]同上
mov al,ds:[bx]同上
Avatar

Hui.Ke

❤ Cyber Security | Safety is a priority.
Previous 6.1 ~ 6.3