汇编语言学习笔记 下载本文

第四章 第一个程序

汇编指令:在汇编语言源程序中,有对应的机器码,可以被编译为机器指令,最终为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空间中没有系统或其他程序上的数据或代码.