-
-
汇编语言和C语言字符串的区别
-
发表于:
2006-5-19 17:35
5419
-
以前老是搞不清楚它们之间的区别,今天专门研究一下
如有什么错误,请大家指正。
汇编语言:
szText db 'hello,world',0
mov eax,szText;这是错误的!
mov al,szText;这是正确的,al='h'
mov ebx,offset szText;ebx保存了"hello,world!",0字符串的首地址
mov cl,szText+1;cl='e'
szText表示字符串的第一个字节
offset szText表示该字符串的地址
szText+1表示首地址+1的字节
C语言:
char *s = "hello,world" ;//定义s这个指针变量(4字节)来保存字符串的地址
char str[] = "china" ;//str就是字符串首地址本身
如下:
int main(void)
{
char *s = "hello,world" ;
char str[] = "abc" ;
__asm
{
mov eax,s//eax就是"hello,world"的地址
mov bl,byte ptr[eax]
}
}
在堆栈中的情况是
----------
|00636261|--->此栈地址就是字符串的首地址
----------
|xxxxxxxx|--->此栈地址就是s指针变量的地址,内部保存的是"hello,world"字
---------- 符串的首地址
|EBP |
----------
很明显,s在内存中是要占空间的(4 byte),而str就是地址本身,所以不占空间
以上是自己的一些理解,可能会有错误,欢迎大家更正&补充
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!