|
主题 : : 6.2那个示例代码加上start和end start有什么意义? [待解决] |
回复[ 13次 ]
点击[ 740次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-10-26 13:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
书中说,如果不在第一条汇编指令上加入start,程序会从dw这一行开始执行,但这也没什么问题啊,如果一开始就指定了0010H处的mov bx,0做为程序的入口处,那cpu还怎么得到dw后面所定义好的数据呢 | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-10-26 13:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-09 10:59 |
|
|
|
|
|
[第2楼]
[ 回复时间:2007-10-26 13:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
噢 我想 用dw定义了一段数据之后 程序运行后就会自动载入到内存 随时可以使用
既然如此也不必特意给代码弄个入口啊,让它像平时一样运行就是啦 | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-10-26 13:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:2
注册日期:2007-10-18 10:43 |
楼主还不是不明白程序的执行过程
源程序(dw 0123h,0456h... mov 等指令)->编译(此时已经将 dw 定义的数据编译成2进制数据)->机器码
->加载到内存(dw定义的数据一块放入内存,这块内容对cup来言就是指令【也就是为什么通过u命令翻译过来的汇编指令并不是我们期望的】,如果没有end start这些内容也将被cup执行,因为此时cs:ip指向这里)->指令被cpu执行
---------------------------
只是我自己的看法,有不正确请大家指正 | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-10-26 13:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:2
注册日期:2007-10-18 10:43 |
对cpu而言,内存中的内容可以是指令也可以是数据
这就要看我们怎么怎样给cpu指定
指令和数据是我们人类分成的两种概念,cpu它并不知道,如果我们将cs:ip指向一个存储单元,则cpu就将它当作指令来执行了
--------------
我自己是这样理解的,不知道楼主明白吗? | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-10-26 14:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
哦哦 你这么一说我明白了
假如那串自己定义的数据 转换成机器码后 而且他又是在CS:IP处的,如果刚好他凑成一条汇编指令那就惨了 | | |
|
|
|
|
[第6楼]
[ 回复时间:2007-10-26 15:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
回复:[第5楼]
------------------
事实上,你的担心确实发生了!!很惨,就是程序出错,无法正确运行。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2007-10-27 08:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:5
信誉值:2
注册日期:2007-10-18 10:43 |
回复:[第5楼]
------------------
恩,就是那个意思 | | |
|
|
|
|
[第8楼]
[ 回复时间:2007-11-07 09:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-27 23:31 |
|
|
|
|
|
[第9楼]
[ 回复时间:2007-11-07 15:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:22
信誉值:0
注册日期:2007-09-24 10:42 |
|
|
|
|
|
[第10楼]
[ 回复时间:2007-11-08 10:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41 |
学习了,程序出错的可能的原因:把数据当作指令执行了,后果无法预知 `_`" | | |
|
|
|
|
[第11楼]
[ 回复时间:2007-11-08 10:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:19
信誉值:0
注册日期:2007-10-31 16:24 |
end start是确定了程序的入口是从start标号处开始的,我们是想对用dw定义的数据进行操作,并不是想把dw定义的数据当作指令来执行,因此CS:IP开始执行的地方应该在我们所定义的数据之后才行。 | | |
|
|
|
|
[第12楼]
[ 回复时间:2007-11-08 16:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:19
信誉值:0
注册日期:2007-07-05 17:25 |
|
|
|
|
|
[第13楼]
[ 回复时间:2008-08-19 19:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-13 10:30 |
如果不用start来确定入口地址,程序会从dw 0123H,。。。。0987H开始执行,CPU会把他们当作指令来执行,就会出现意想不到的结果。 | | |