5.1 ~ 5.4
《汇编语言(第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 指令的时候,要进行两步操作
- (cx)=(cx)-1
- 判断 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 中
指令位置 | 指令 | 执行效果 |
---|---|---|
Debug | mov 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] | 同上 |