章起始
- 完整地描述一个内存单元,需要两种信息:a. 内存单元的地址;b. 内存单元的长度;
- 单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出。
- 我们定义的描述性的符号“()”,表示一个寄存器或一个内存单元中的内容。
5.1 [bx]
- inc bx;表示bx=bx+1
5.2 Loop 指令
- 格式:
loop 标号
- cpu进行的操作:
- (cx)=(cx)- 1;
- 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。
assume cs:code
abc segment
mov ax,2h
mov cx,11 ;iteration_num :cx
s: add ax,ax
loop s
mov ax,4c00H
int 21h
abc ends
end
- 使用loop指令进行幂操作
5.3 masm与debug的不同
- Debug将"[idata]“解释为一个内存单元, “idata” 是内存单元的偏移地址;而编译器将”[idata]” 就解释为“idata"
- 在源程序中实现将内存2000:0单元中的数据送入al中的方法
- [bx]方式
- ds:[0]的方式
5.5 loop 和[bx] 的联合应用
- 处理地址连续的内存单元中的数据问题:
段前缀
- 实例
- 注:
这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的“ds: "、“cs:“ 、
“ss:” 或“es:"
5.7 一段安全的空间
- 我们在不能确定一段内存空间中是否存放着重要的数据或代码的时候, 不能随意向其中写入数据
- DOS 和其他合法的程序一般都不会使用0:200-0:300 这段空间内存
- 就往0:200~0:300这段空间写入
5.8 段前缀的使用
- 1KB=1024字节