第四章 第一个程序
汇编指令:在汇编语言源程序中,有对应的机器码,可以被编译为机器指令,最终为CPU所执行的指令;
伪指令:没有对应的机器指令,最终不被CPU执行的指令; 伪指令是由编译器来执行的
伪指令可以完成如数据定义、分配存储器、指示程序结束等功能
段定义伪操作: 格式:段名 segment … 段名 ends
segment表示定义一个段的开始 ends表示一个段的结束 中间的部分是对应段的内容
assume伪操作:
功能:将某个段寄存器和程序中某个用段定义伪操作所定义的段相关联 格式:assumecs:codesg,ds:datasg
cs:codesg 告诉编译器把代码段的名字和cs寄存器相联系
程序结束伪操作 格式:end
功能:结束整个程序,出现在程序最后的语句中
在汇编语言中,以“;”开始此后该行的所有字符均为注释; 注释可以自占一行,也可以和指令同占一行;
注释只出现在汇编源程序中,经编译不会产生机器码; 注释可以用来说明程序或者语句功能,使程序更为清晰
一个程序结束后,将cpu的控制权交还给使它得以运行的程序的过程称为程序返回
程序返回的方式: 在程序末尾添加返回指令: mov ax,4c00h int 21h
第五章 [BX]和loop指令
Loop指令
1) 在cx中存放循环次数
2) loop指令中的标号所标识地址要在前面
3) 要循环执行的程序段,写在标号和loop指令的中间 即:
mov cx,循环次数 s: 循环执行的程序段 loop s
在Debug中跟踪用loop指令实现的循环程序
在汇编源程序中,数据不能以字母开头
Debug和汇编编译器masm对指令的不同处理
(1) 在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用“[…]”来表示内存单元,如果在“[ ]”利用一个常量idata直接给出内存单元的偏移地址,就要在“[ ]”的前面显式地给出段地址说在的段寄存器. 比如
mov al, ds:[0]
如果没有在“[ ]”前面显式地给出段地址所在段寄存器,比如 mov al,[0]
那么编译器masm将把指令中的“[idata]”解释为“idata”.
(2) 如果在“[ ]”里用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址默认在ds中.当然,也可以显式地给出段地址所在的段寄存器. 段前缀
用于显式地指明内存单元的段地址的“ds:”“cs:”“ss:”“es:”,在汇编语言中称为段前缀.
一段安全的空间
DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序上的数据或代码.