. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
自由讨论区
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
由int型数据如何转化为long型数据引发的思考?
[待解决]
回复[
2
次 ] 点击[
578
次 ]
tomato
[帖 主]
[ 发表时间:2012-05-20 00:16 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
在高级语言的函数调用中,如果参数定义的类型为长整形,而实际传过去的类型为整形,那该如何处理呢?
这个问题我们可以在汇编层面去研究一下,可以写个C语言函数调用,比如,
在这个程序中,add函数的两个参数和返回值都是long类型的,而main函数中我们传递的却是两个int型数据,而这样就出现了类型不匹配的情况,但是,C编译器是不会报错的,是完全可以通过编译的,是因为这种int型和long型的数据之间,编译器会自动进行类型转换。我们看一下下面这段代码。
上面这段代码即为那段C语言程序对应的汇编代码,有些汇编基础的同学不妨试着去理解一下这段代码的执行功能。
我明白是怎么转换的了,我就不再这里说明白了,主要是想给有一定基础的汇编学习者留些思考的空间。
我提几个问题吧。
1.这个汇编程序中分别对应C程序的哪部分?哪些是main函数对应的代码?哪些是add函数对应的代码?
2.定义的变量存放在哪里了?参数存放在哪里了?
3.int型数据和long型数据不匹配的问题是如何解决的呢?
4.函数之间的参数是如何传递的?
欢迎大家来讨论交流。O(∩_∩)O~
tomato
[第
1
楼]
[ 回复时间:2012-05-20 00:22 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
以上这些问题,没有汇编语言基础的计算机学习者是很难说清楚是怎么回事的,所以,从这一点上来说,汇编语言的基础学习是多么重要,趋向本质!
zhujinwu
[第
2
楼]
[ 回复时间:2012-05-20 09:57 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:15
信誉值:0
注册日期:2011-11-03 09:29
1、076A:01FA-076A:0218对应main函数,076A:0219-076A:022B对应add函数;
2、定义的变量分别存放在SI、DI中,参数存放在栈中;
3、int型和long型数据不匹配的问题是通过字符扩展(CWD)来解决的;
4、函数之间的参数是通过栈来传递的,其中一个关键的寄存器是BP.
不知道我说的对不对?
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved