1.1 [bx]和内存单元的描述
mov ax , [0] //将段地址为ds, 偏移地址为0 的内存单元内容放入ax中。
mov ax , [bx] //将段地址为ds, 偏移地址为0 的内存单元内容放入ax中。
为什么要用这个[bx]的方式?这样可以直接对bx进行偏移 Inc bx 从而操作连续内存空间。
1.2 描述性符号()
使用描述性符号“()” 来表示一个寄存器或者内存单元的 内容 。
“()”中的元素可以有3种类型:
- 寄存器名
- 段寄存器名
- 内存单元的物理地址
以下是正确用法:
(ax), (ds) , (al) , (cx) , (20000H) , ((ds)*16+(bx))
以下是不正确用法:
(2000:0) , ((ds) : 1000H)
1.3 loop指令
loop指令格式: loop 标号
CPU在执行loop指令的时候,要进行两步操作:
- 自动执行 (cx) = (cx) -1;
- 判断cx中的值,不为0则转至标号处执行程序,若为0则向下执行。
- cx影响着loop指令的执行结果,cx中存放循环次数。(Count)
1.4 cx 和 loop 配合
cx和loop相互】配合实现循环功能的框架:
mov cx , 循环次数
s:
循环执行的程序段
loop s
3个要点:
- 在cx中存放循环次数
- loop指令中标号所标识地址要在前面
- 要循环执行的程序段,要写在标号和loop指令中间
1.5 debug 和 汇编编译器masm对指令的不同处理
- 在debug中:
mov ax , [0] 标识将ds:0处的数据送入ax中。
- 在masm汇编编译器中:
mov al , [0] 表示将常量0送入寄存器al中。
mov al , ds:[0] 表示将(ds)*16 + 0送入寄存器al中。
mov al , [bx] 表示将ds)*16 + (bx) 送入寄存器al中。
mov al , ds : [bx] 表示将ds)*16 + (bx) 送入寄存器al中。
1.6 段前缀
mov ax , [bx] 表示使用默认的段地址ds,将(ds)*16 + (bx).
mov ax , cs:[bx] 表示使用显式的内存单元段地址(cs)*16 + (bx). 这个显式的指示段地址cs表示 段前缀。