鱼C论坛

 找回密码
 立即注册
查看: 2407|回复: 6

汇编学习的一个疑问

[复制链接]
发表于 2012-2-6 10:08:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先贴上代码
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有什么区别呢?我感觉没什么区别,请热心的朋友简单的说两句,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-6 11:00:45 | 显示全部楼层
end start
告诉编译器 代码从start这里开始执行    (代码段中有时有数据)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-6 11:16:23 | 显示全部楼层
重点不在start上,而是end。你可以写成end xiaoming,当然,end后面的标号要和前面的标号保持一致。也就是
  1. xiaoming:
  2. end xiaoming
复制代码
end是伪指令描述了程序的结束和程序的入口。“end 标号”表明程序的入口,编译的时候会先找“end XXX”找到后将它转换成入口地址。其实你可以想下C里面的main函数,不管你代码怎么写,把main函数放在开关还是中间还是结尾,它都是从main开始执行,这个“end XXX”的XXX就相当于被转换成main函数的地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-6 14:29:39 | 显示全部楼层

谢谢鱼友的热心回答,但是入口地址有和没有为什么都一样呢?也不报错误,程序还是可以正常的运行,在C中如果没有main函数 cpu就不知道从哪里开始,汇编语言在这里为什么没有写入口也会知道呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-6 15:02:11 | 显示全部楼层
诶、猪 发表于 2012-2-6 14:29
谢谢鱼友的热心回答,但是入口地址有和没有为什么都一样呢?也不报错误,程序还是可以正常的运行,在C中如 ...

我是说有入口地址的时候像,不是说一样。如果没有标号的话从code段第一条指令开始。
你可以试下,把“start:”放到后面,比如:
  1.          mov ax,2
  2.          add ax,ax
  3. start:  add ax,ax
复制代码
你编译调试下就知道了。多调试只看代码是看不出来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-7 23:33:58 | 显示全部楼层
Seely 发表于 2012-2-6 15:02
我是说有入口地址的时候像,不是说一样。如果没有标号的话从code段第一条指令开始。
你可以试下,把“st ...

呵呵,我是初学者,能得到像你这样的朋友帮助感到很高兴,我会多调试的,非常的感谢你!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-8 09:40:11 | 显示全部楼层
要是你的程序前面还有data段,stack段,然后你的代码段在后面,没有start就会从数据段开始执行......你这段代码前面没有data段和stack段,所以有没有start都行......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 22:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表