诶、猪 发表于 2012-2-6 10:08:34

汇编学习的一个疑问

先贴上代码
assume cs:codesg
codesg segment
   
start: mov ax,2
         add ax,ax
         add ax,ax

         mov ax,4c00H
         int 21H
codesg ends
end start

请看我标示红色的代码,在源程序中有这个start和没有这个start有什么区别呢?我感觉没什么区别,请热心的朋友简单的说两句,谢谢!

小马过河 发表于 2012-2-6 11:00:45

end start
告诉编译器 代码从start这里开始执行    (代码段中有时有数据)

Seely 发表于 2012-2-6 11:16:23

重点不在start上,而是end。你可以写成end xiaoming,当然,end后面的标号要和前面的标号保持一致。也就是xiaoming:
end xiaomingend是伪指令描述了程序的结束和程序的入口。“end 标号”表明程序的入口,编译的时候会先找“end XXX”找到后将它转换成入口地址。其实你可以想下C里面的main函数,不管你代码怎么写,把main函数放在开关还是中间还是结尾,它都是从main开始执行,这个“end XXX”的XXX就相当于被转换成main函数的地址。

诶、猪 发表于 2012-2-6 14:29:39

Seely 发表于 2012-2-6 11:16 static/image/common/back.gif
重点不在start上,而是end。你可以写成end xiaoming,当然,end后面的标号要和前面的标号保持一致。也就是e ...

谢谢鱼友的热心回答,但是入口地址有和没有为什么都一样呢?也不报错误,程序还是可以正常的运行,在C中如果没有main函数 cpu就不知道从哪里开始,汇编语言在这里为什么没有写入口也会知道呢?

Seely 发表于 2012-2-6 15:02:11

诶、猪 发表于 2012-2-6 14:29 static/image/common/back.gif
谢谢鱼友的热心回答,但是入口地址有和没有为什么都一样呢?也不报错误,程序还是可以正常的运行,在C中如 ...

我是说有入口地址的时候像,不是说一样。如果没有标号的话从code段第一条指令开始。
你可以试下,把“start:”放到后面,比如:         mov ax,2
         add ax,ax
start:add ax,ax你编译调试下就知道了。多调试只看代码是看不出来的。

诶、猪 发表于 2012-2-7 23:33:58

Seely 发表于 2012-2-6 15:02 static/image/common/back.gif
我是说有入口地址的时候像,不是说一样。如果没有标号的话从code段第一条指令开始。
你可以试下,把“st ...

呵呵,我是初学者,能得到像你这样的朋友帮助感到很高兴,我会多调试的,非常的感谢你!!!

山人 发表于 2012-2-8 09:40:11

要是你的程序前面还有data段,stack段,然后你的代码段在后面,没有start就会从数据段开始执行......你这段代码前面没有data段和stack段,所以有没有start都行......
页: [1]
查看完整版本: 汇编学习的一个疑问