. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->附注
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  附注4  有错误啊!!!  [待解决] 回复[ 4次 ]   点击[ 1082次 ]  
zhenglxd
[帖 主]   [ 发表时间:2009-05-21 13:25 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
辅助4 要实现的 是 a,b,c赋值后 c=a+b,c++
但是 在汇编中 分开看 似乎都实现了
可是关键是 它不是连续的
比如a=1,b=2,c=0
最终结果应该是 1+2+1=4 c=4
但是他的汇编中 c=1+2存放在栈中 可是最后 返回的结果却是吧 原始数据 c=0 作c++结果等于1
不知道是故意这样 还是有误
我不理解
我认为 c=0是一个变量 c=a+b中的c是另一个变量 (2个地址存放的东西不一样)
但是 最后c++呢? c++是指c=a+b后c++还是 就是纯粹的c++?
按c程序执行顺序我认为最终结果应该是 c=4
汇编中 最后一行inc word ptr [bp-2]错了
应该是[bp-8]才对
wsrf
[第1楼]   [ 回复时间:2009-05-21 18:11 ]   [引用]   [回复]   [ top ] 
荣誉值:33
信誉值:0
注册日期:2008-10-16 10:01
汇编中 最后一行inc word ptr [bp-2]错了 
应该是[bp-8]才对
----------------------------------
是楼主理解错误,书上没有问题。ss:[bp-2]就是main函数中c的存储位置,BP的值始终没变。


C语言中,只有值传递,也就是说main()中的C和add()中的C它们只有值是一样的,都有自己的存储空间,在add()中进行了c=a+b,此时add()中的c的值为3,但是main()中的c仍然为0.调用完add()函数后,它里面的c便会被释放。
vb733
[第2楼]   [ 回复时间:2009-10-05 03:27 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2009-09-22 19:41
附录四没有错,哪错了?绝对没错!!!大家好好想想?我想明白了,先不说,只有自己想明白的才是真的明白,别人说了你再明白对你的效果不好。大家要感谢王老师的教导,希望老师写本汇编语言和c语言的结合对比字典,就像汉语词典学汉语不用愁,成语词典学成语不用愁,牛津词典学英语不愁,要是王老师写本汇编语言和c语言的结合对比词典,学汇编和c也不用愁了啊!
不懂c语言的先学下,否则说了也不明白,
1.c++中的变量c和c=a+b中的变量c作用域相同吗?详细的看c语言书
2.c语言参数传递方式有两种,值传递和地址传递,看你怎么定义,不同的定义有不同效果。详细的看c语言书
3.变量的定义有多种,什么全局的,局部的,静态的等等,各种变量定义有什么用?详细的看c语言书
不是我不说,一时半会说不清,我不是搞教育的,可能说的没你自己看下书好。
花点时间收益非浅!
freax
[第3楼]   [ 回复时间:2010-08-27 09:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-26 10:21
我把此例编译成EXE文件,用DEBUG -r显示内存中文件有f7c字节。用DEBUG -u跟踪,内存中显示的汇编代码跟书中例子完全完全不一样,而且只能显示一小部分汇编代码,看不全整个程序的汇编代码。用重定向到存到文件命令也无效。求大师详细告知跟踪长一点EXE文件的办法。谢谢,
asmcaicai
[第4楼]   [ 回复时间:2011-02-22 14:17 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
2楼一说,我就明白了。
唉。C语言忘了差不多了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved