. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->综合研究
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  讨论一个关于char * a='a'和char * a="a"区别的问题  [待解决] 回复[ 5次 ]   点击[ 702次 ]  
xuejh
[帖 主]   [ 发表时间:2009-06-12 09:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-24 22:57
char * a='a'和char * a="a"的区别:
通过反汇编看到:'a'相当于直接为指针变量赋值0061h(a的ASCII码),"a"是把"a"所在DS段的偏移地址赋值给指针变量a.我不知道我的看法对否,请高手帮忙给解释一下吧.
还有就是如我的理解无误的话,"a"既然放在了DS段,在用DEBUG反汇编时,用-D命令怎么看不到"a","a"是以一种什么样的形式存储在数据段中的呢?请高手帮忙.
tomato
[第1楼]   [ 回复时间:2009-06-15 15:44 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
前者的书写在语法上是有问题的。如果执意这么写,编译器会认为是给指针变量来赋值。后者则是将字符串的偏移地址赋给指针变量。字符串的偏移地址应该从反编译过来的指令代码中找。楼主没找到,不是因为没有,是因为楼主没找到地方。
crazyman
[第2楼]   [ 回复时间:2009-06-16 11:59 ]   [引用]   [回复]   [ top ] 
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
char * a='a'和char * a="a"的区别: 
============
'a'是将这个字符的值进行赋值给前面的变量;“a”是将这个字符串的地址赋值给前面的变量。

“a”的初始话是放到了ds中,不过,你一加载就查看是不行的,你首先得先运行到main函数处,才能用此时的ds去查看。
belial
[第3楼]   [ 回复时间:2009-12-14 16:11 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2009-11-26 15:08
学习中———……
jinshuwen
[第4楼]   [ 回复时间:2009-12-23 12:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-12-19 11:15
char * a='a'是把一个字符赋值给字符指针a,字长为一个字节,而char * a="a"是把一个字符串赋值给字符指针,字长一般为2个字节,但有的机器的字符型和整形的字长一样,可能会是4个字节,这要根据具体的机器而定了。
abob
[第5楼]   [ 回复时间:2009-12-23 15:14 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
tc环境下形成exe文件:
main()
{
        char * a='a';
        char * b="a";
}
debug加载exe文件:

-g 1fa  --1fa是main函数的首地址,综合研究讲过。

AX=0000  BX=069C  CX=000F  DX=4C0E  SP=FFEA  BP=FFF4  SI=0463  DI=0654
DS=0BCE  ES=0BCE  SS=0BCE  CS=0B77  IP=01FA   NV UP EI PL ZR NA PE NC
0B77:01FA 55            PUSH    BP
-u 1fa
0B77:01FA 55            PUSH    BP
0B77:01FB 8BEC          MOV     BP,SP
0B77:01FD 83EC04        SUB     SP,+04
0B77:0200 C746FC6100    MOV     WORD PTR [BP-04],0061       --main函数的局部变量放在栈中([BP-04]),61H是‘a’的ASSIIC码,0194h是字符串“a”的首地址,所以下面用d ds:194能看到字符a。--理解有问题的可以去看汇编语言书最后一部分综合研究。
0B77:0205 C746FE9401    MOV     WORD PTR [BP-02],0194
0B77:020A 8BE5          MOV     SP,BP
0B77:020C 5D            POP     BP
0B77:020D C3            RET
0B77:020E C3            RET
0B77:020F 55            PUSH    BP
0B77:0210 8BEC          MOV     BP,SP
0B77:0212 EB0A          JMP     021E
0B77:0214 8B1EA001      MOV     BX,[01A0]
0B77:0218 D1E3          SHL     BX,1
-d ds:194 19f
0BCE:0190              61 00 0E 02-0E 02 0E 02 00 00 00 10       a...........
-
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved