第五章 [bx]和loop指令
1、用debug写命令和编译器写命令是不一样的。
2、完整的描述一个内存单元需要两种信息:1.内存单元的地址;2.内存单元的长度(类型)。我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出,如前边的AX,AL。
3、[bx]同样也表示一个内存单元,它的偏移地址在bx。
4、描述性符号“()”表示取内容。约定符号idata表示常量。
5、loop指令使用:1.在cx中存放循环次数;2.loop指令中的标号所标识地址要在签名;3.要执行的程序段要写在标号和loop指令中间。
6、考虑计算会不会溢出。
7、把内存单元xxxx:xxxx向ax赋值,令(ah)=0,(al)=(xxxxx)
8、分号“;”注释代码。
9、汇编的源程序中,数据不能以字母开头,所以要在以字母开头的数据前加0。
10、G命令跟踪loop(g+偏移地址),也可以是p命令!!(在将要执行loop的时候)。
11、在汇编源程序中取内存数据可以:ds:[0]。
12、loop和[bx]的联合应用:求连续内存的值相加
13、段前缀:出现在访问内存单元的指令中,用于显示地指明内存单元的段地址的ds、cs、ss、es,在汇编语言中称为段前缀。
14、学习汇编获得底层的编程体验,理解计算机底层的基本工作原理,所以我们尽量直接对硬件编程,而不去理会操作系统。
15、一段安全的空间:在一般的PC机中,DOS方式下,DOS和其他合法的程序一般都不会使用0:200~0:2ff(0:200h~~0:2ffh)的256个字节的空间。所以,我们使用这段空间是安全的。这是为什呢?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 assume cs:code
2
3 code segment
4 start : mov ax, 0ffffh
5 mov ds, ax
6 mov bx, 0
7 mov dx, 0
8 mov cx, 12
9 s : mov al, [bx]
10 mov ah, 0
11 add dx, ax ;dx = dx + ax
12 inc bx ;bx = bx + 1
13 loop s
14
15 mov ax, 4c00H
16 int 21H
17
18 code ends
19 end start