主题:[讨论]从寄存器问题想起的
foka
[专家分:200] 发布于 2007-09-29 01:10:00
大家好,首先声明一点,我这学期才刚开始学汇编,感觉学得很吃力!因此想和各位老师交流下:si,di和[si],[di]有什么区别啊?还有( )这种为什么一会是地址,一会又是数值呢?
回复列表 (共21个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2007-09-29 09:18:00
si di 是寄存器的内容.如果当时存放的是指针,那么 si , di 得到的就是一个内存地址.( 16 位 )
[si],[di] 是寄存器指向的内容,如果当时存放的是指针,那么[si],[di] 得到的就是一个内存单位.(8 位)
比如,内存地址 0040 中存放一个字节的变量 2B.
如果 si = 0040 则 , [si] = 2B
板凳
foka [专家分:200] 发布于 2007-09-29 22:07:00
当时存放的是指针?这是什么意思啊?
不好意思,新手……
3 楼
臭石头雪球 [专家分:23030] 发布于 2007-09-29 23:31:00
[quote]当时存放的是指针?这是什么意思啊?
不好意思,新手……[/quote]
指针就是一个内存地址,我们可以把它存放在寄存器里。这样我们就可以对它操作,以达到间接操作数据的目的。
很多时候,操作指针会更方便。
4 楼
foka [专家分:200] 发布于 2007-09-29 23:57:00
谢谢兄台的回答!
不过据说指针很是很危险的东西……
5 楼
臭石头雪球 [专家分:23030] 发布于 2007-09-30 10:10:00
[quote]谢谢兄台的回答!
不过据说指针很是很危险的东西……[/quote]
的确是比较危险,因为对指针操作不好,可能会使指针指向不可靠的地址,或不可写的地址.
结果就是得到不可靠不真实的数据,甚至出现内存错误.
但是,不管怎么样,指针的应用还是非常广泛的.虽然高级语言里我们可以用其他的东西来代替指针.但是经过编译器翻译以后,很多在高级语言里用普通方式表达的东西都会被自动转换成指针.
也就是说,学习汇编语言这种非常直接的非常低层的语言,指针可以说是无法避免的.
6 楼
foka [专家分:200] 发布于 2007-09-30 16:51:00
嗯,谢谢
希望自己以后都能用对吧
谢谢你了啊!
7 楼
我是大喊三 [专家分:3010] 发布于 2007-10-08 16:19:00
学了汇编之后,你会感觉,原来C语言里的所谓指令,并没有什么碰不得的,呵呵
8 楼
foka [专家分:200] 发布于 2007-10-08 21:09:00
[quote]学了汇编之后,你会感觉,原来C语言里的所谓指令,并没有什么碰不得的,呵呵[/quote]
呵呵……不太理解兄弟的話啊……
9 楼
我是大喊三 [专家分:3010] 发布于 2007-10-09 00:20:00
学了汇编之后,你会感觉,原来C语言里的所谓指针,并没有什么碰不得的,呵呵
=======================
打错了,是“指针”,不是“指令”。言下之意就是汇编全是“指针”,呵呵。
10 楼
foka [专家分:200] 发布于 2007-10-09 21:12:00
不过指令也不好学啊,正在慢慢适应啊
我来回复