一个汇编语言程序
codesg segment
st: mov ax,0123h mov bx,0456h add ax,bx add ax,ax
mov ax,4c00int 21h
codesg ends
end st
; end命令除了通知编译器程序结束外,还可以通知编译器程序入口在什么地方。 ; 如上述的 end st,st就是一个入口说明符
涉及到的一些知识:- segment
xxx segment ;code … xxx ends
- segment和ends是一对伪指令关键字,用来定义一个段。- 一个汇编程序是由多个段组成的,这些段被用来存放代码、数据、或者当作栈空间来使用。一个有意义的汇编程序至少要有一个段,用来存放代码。- end- end汇编语言的结束标记。在编译过程中,如果遇到end指令,就结束编译- assume- assume 假设,假设某一个段寄存器和程序中的一个段关联。- 可以理解为用来将特定用途的段和相关寄存器关联起来- 标号(codesg)- 一个标号代表一个地址- 程序返回mov ax,4c00 int 21- 暂时记住这两条指令代表程序返回注:在Debug中,最后的int 21指令要使用P命令执行。<a name="sPo66"></a>## 编译和连接方法<br />注:编译器只能发现语法错误而无法发现逻辑错误。CPU执行一个程序,需要有另一个程序将它加载进内存(即将CS:IP指向它),一般情况下我们通过DOS执行这个.exe,所以是DOS程序将它加载进入内存。当这个程序运行结束,再返回DOS程序继续执行。如果是DOS调用Debug调用.exe,那么先返回Debug再返回DOS。DOS加载一个.exe时,先在内存中找到一段内存,起始段地址SA,然后分配256字节的PSP区域,用来和被加载程序通信。在之后的段地址SA+10就是程序开始的段地址。CS:IP指向它,DS=SA。<a name="wRvcG"></a>## 程序结构汇编程序的几个基本要素和简单框架如下:1. 首先是要定义一个段,如abc。并在段中写入指令和数据
abc segment ; code … abc ends ```
- 用end关键词来指定结束位置
- 将段和指定的段寄存器绑定起来
