注册 登录
编程论坛 汇编论坛

谁能解释下,我不明白?

longaiting 发布于 2008-10-14 22:49, 1376 次点击
data   segment         ; 定义数据段
       …
data   ends
;----------------------------------------
extra  segment         ; 定义附加段
       …
extra  ends
;----------------------------------------
code   segment         ; 定义代码段
       assume cs:code, ds:data, es:extra
start:
       mov   ax, data
       mov   ds, ax    ; 段地址  段寄存器
       …
code   ends
       end   start

为什么这个end start 要放在code ends 后面呢?
6 回复
#2
ONEPROBLEM2008-10-14 23:06
为什么这个end start 要放在code ends 后面呢?
;=======================
告诉编译器,源程序要一直编译到这里 "end".而且,用"start"标识程序的入口地址,要从这个地方开始执行.
#3
ONEPROBLEM2008-10-14 23:07
我都是这么认为的,不知道对不对.
#4
longaiting2008-10-15 11:57
code ends表明代码段结束了嘛,怎么后面还有end start.呢?按照其他的一些高级语言来讲应该是end start.要放在。code ends 前面、
#5
zklhp2008-10-15 12:45
[bo][un]longaiting[/un] 在 2008-10-15 11:57 的发言:[/bo]

code ends表明代码段结束了嘛,怎么后面还有end start.呢?按照其他的一些高级语言来讲应该是end start.要放在。code ends 前面、


这个问题偶一开始也搞不懂 也整错过 呵呵

这里的start   end start是告诉编译器开始和结束的位置 应该放在最后

不过 要是多个文件就得想想了



伪指令END表示源程序到此为止,汇编程序对该语句之后的任何内容都不作处理,所以,通常情况下,伪指令END是源程序的最后一条语句。

伪指令END后面可附带一个在程序中已定义的标号,由该标号指明程序的启动位置。

如果源程序是一个独立的程序或主模块,那么,伪指令END后面一定要附带一个标号;如果源程序仅是一个普通模块,那么,其END后面就一定不能附带标号。
#6
sainthzh2008-10-21 16:33
最后end start表明该程序入口在start处。当然也可以写成 end a,但相应前面也应写为a:。
总而言之,就是起指明入口的作用,与高级语言中是有区别的。
#7
cnhanxiao2008-10-22 03:54
可执行程序都是由操作系统来加载执行的,操作系统需要从文件头得到程序的入口地址。
    而程序这样写就是告诉编译器:程序的入口在哪里,这个入口在程序连接时候,会被写入文件头中供操作系统加载时移交控制权使用。DOS下“.COM”型文件虽然没有文件头,但是它也是先被编译连接成“.EXE”文件的。
    END之后,你随便写什么都不会影响编译了,因为编译器认为到此程序结束。
    所以任何段都要写在END之前,END就两个作用:告诉编译器程序到此结束,告诉编译器程序入口(代码段)。

[[it] 本帖最后由 cnhanxiao 于 2008-10-22 03:56 编辑 [/it]]
1