请问第四章的入口地址start有什么用
本人是新手,目前学习到第四章,发现小甲鱼讲的start:入口地址不知道有什么用,用编译器编译连接后,在用debug调试感觉没有什么区别,寄存器的值有start和没有start怎么都一样 能不能贴一下具体代码start是一个标号,在编译阶段,被编译器翻译为地址(也就是16位的内存地址),一般程序最后会有一个"end start",程序运行前,会先找end,找到后面的标号(也就是地址),从地址后开始执行,而你写出来的语句,都是按照顺序存储在内存中的,所以一步一步执行,如果标号处正好是程序开始的位置,那写和没写一样,当你看到第六章时,在code segment里面使用数据时,就能看出来不一样了,程序从start开始以后,后面定义ds为code segment开始,那时,调用数据时就是从code segment开始搜索数据地址,而程序真正开始执行的语句是从start(也就是end 后面的标号)开始的。 无念道长 发表于 2014-2-12 16:40 static/image/common/back.gif
能不能贴一下具体代码
start是一个标号,在编译阶段,被编译器翻译为地址(也就是16位的内存地址),一般程 ...
我的代码是
assume cs:code
code segment
start:mov ax,2
mov bx,ax
add bx,bx
code ends
end start
本帖最后由 无念道长 于 2014-2-12 16:58 编辑
君未知 发表于 2014-2-12 16:52 static/image/common/back.gif
我的代码是
assume cs:code
code segment
好吧,接上面我的回答,assume是伪指令,在编译的时候不形成机器码,所以程序从code segment开始执行,下一句就直接是start标号开始的语句,所以效果上,跟没有start一样,没区别,如果代码改成这样:assume cs:code,ds:data
data segment
dw 0,0,0,0,0,0,0,0
data ends
code segment
mov ax,2
mov bx,ax
add bx,bx
code ends
end
你可以用debug试试,用-u查看一下代码,看看代码和以前还一样么。 无念道长 发表于 2014-2-12 16:56 static/image/common/back.gif
好吧,接上面我的回答,assume是伪指令,在编译的时候不形成机器码,所以程序从code segment开始执行,下 ...
哦,明白了,谢谢你 是啊!在代码段前定义一个数据段或者堆栈段就一清二楚了!!!
无念道长解释的很详细!!!
页:
[1]