我还是汇编新手,在阅读汇编程序时,看到start和main会觉得疑惑,这篇博文就是围绕此展开。
王爽老师的书中关于start的讲解出现在P126
assume cs:code code segment dw 0123h start: mov bx,0 mov ax,0 code ends end start ;这里的代码都是乱写的,看结构就行在程序的第一条指令的前面加上一个标号start,同时这个标号还在伪指令end的后面出现。 end有两个作用:
通知编译器程序结束通知编译器程序的入口在什么地方 图中end指令指明了程序的入口在start处,也就是说,mov bx,0是程序的第一条指令。总之,我们想要CPU从何处开始执行程序,就只需在源程序中用“end 标号”指明。
所以无论main也好,start也好,只是标号的名字而已,你也可以起一个简单的名字就叫s,都可以的。
掌握了这种方法,我们可以这样来安排程序的框架: assume cs:code code segment …… 数据 …… start: …… 代码 …… code ends end start
far和near是子程序调用时的参数 如果子程序和调用程序在一个段内,子程序参数设置为near 如果子程序和调用程序不在一个段内,子程序参数设置为far 这里主程序定义为far是因为: 系统把主程序当作DOS调用的一个子程序 DOS内核与主程序不是在同一个段地址内 所以主程序参数要用far
这是定义一个子程序的bai第一行。子程序名是main,类型dufar。就是说main这个zhi子程序可以被不跟main在同一个段内的程dao序调用。即主程序和子程序的段基址不同时主程序也可以调用子程序。例如:主程序code的段基址在CS中,子程序main的段基址在ES中,且CS和ES中的内容不同,子程序的类型是far时,code可以调用main。否则,不能调用。
proc是子程序定义伪指令