第四章 第一个程序
一、一个源程序从写出到执行的过程
编写汇编源程序——对源程序进行编译连接——执行可执行文件中的程序。
二、源程序
eg:
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
1、伪指令:没有对应的机器码的指令,最终不被CPU所执行。
①segment和ends
格式为:段名 segment
............
段名 ends
段名 segment和段名 ends之间的是这个段内存放的内容,是一个代码段。
②end
是一个汇编程序的结束标记。
注意:区别ends和end:
ends和segment成对使用,标记一个段的结束,可以理解为“end segment”。
end作用在于标记整个程序的结束。
③assume
含义为“假设”。用assume将有特定用途的段和相关寄存器关联起来。
eg:用codesg segment.......codesg ends定义的一个段内存放代码,所以是代码段。在程序的开头,用assume cs:codesg将用作代码段的段codesg和CPU中的段寄存器cs联系起来。
2、源程序中的“程序”(略)
3、标号
如:codesg,一个标号指代了一个地址。作为一个段的名称,最终将被编译、连接程序处理为一个段的段地址。
4、程序的结构
定义一个段——在这个段内写入汇编指令——用end指出程序在哪里结束——用assume将段名和相应的段寄存器连接起来。
5、程序返回
在程序末尾添加返回的程序段:
mov ax,4c00H
int 21H
与结束相关的概念
目的 | 相关指令 | 指令性质 | 指令执行者 |
通知编译器一个段结束 | 段名 ends | 伪指令 | 编译时,由编译器执行 |
通知编译器程序结束 | end | 伪指令 | 编译时,由编译器执行 |
程序返回 |
mov ax,4c00H int 21H |
汇编指令 | 执行时,由CPU执行 |
6、语法错误和逻辑错误
编译时被编译器发现的错误是语法错误。在运行时发生的是逻辑错误。
语法错误易被发现,逻辑错误难被发现。
三、编辑源程序+编译+连接+执行
该过程一般生成3个不同类的文件:
①编译用,eg:随意编写一个程序,保存,注意保存方式为.asm
②编译:在DOS中实现
如果文件在其他目录里,不在当前路径下,则要输入路径。
③连接
④执行
使用debug ××.exe调试时,首次进入调试界面时,寄存器CX中存放的是可执行文件长度。
用p或t指令跟踪执行。p命令执行int 21。q命令退出Debug返回到command中。
以上是我习惯的用法,仅供参考。