本人初学汇编,见到如下两种结构代码,不理解其它结构,求详解.谢谢.
- Assembly code
.code main proc ;...... main endp end main ;上面已经有了"main endp",为什么还有一个end main? begin end不匹配了啊.
- Assembly code
CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: ;...... CODE ENDS END START ;这一句也不好理解.code与上面的code segment, end start 与上面的start,是交错的,如何理解??
另外,为什么会有两种不同的结构?
------解决方案--------------------
两种不同的定义段的方法,第一种是段的简化定义方式,第二种是段的完整定义。都是属于模块化程序设计范畴吧,第一种定义方法是程序员比较方便的定义段,而第一种方法相对第一种较为复杂了些。新版的masm都支持这两种方式。
------解决方案--------------------
.code是一种简化定义,与
CODE SEGMENT
ASSUME CS:CODE
类似;
END START表示标号start是入口地址,此时程序结束;
main proc
;......
main endp
是主程序,end main表示结束开始地址为main的程序;
------解决方案--------------------
.code
main proc
;......
main endp
end main ;上面已经有了"main endp",为什么还有一个end main? begin end不匹配了啊.
你是从c转过来的,我开始也不明白。
end main不需要匹配,end表示程序结束,后面跟的main指定程序的入口。
两种不同的定义段的方法,第一种是段的简化定义方式,第二种是段的完整定义。
1楼说得对。
简化定义方式比较方便,但只能一个程序段,不能定义多个程序段,功能有限。
看Brey的<intel 微处理器>
------解决方案--------------------
masm的较高版本比如6,才会支持第一种写法
end main 指定的程序代码执行时的入口地址是main标志的位置
比如代码为
.code
sub1 proc ;子程序
;......
sub1 endp
main proc ;主程序
;......
main endp
如果不用end main 指定的程序代码执行时的入口地址是main标志的位置,而从代码段的首地址,也就是sub1 proc ,来开始执行,那就乱套了