企业即时通讯 - Enterprise Instant Messenger

局域网聊天工具,文字讯息、文件发送、语音通讯、高清视频通讯、远程桌面控制。

用户操作
[即时聊天] [发私信] [加为好友]
FreeEIM StudioID:i_like_cpp
972404次访问,排名32,好友4人,关注者7人。
i_like_cpp的文章
原创 888 篇
翻译 4 篇
转载 69 篇
评论 1148 篇
FreeEIM Studio的公告
最近评论
ScanerKi:#include <stdio.h>

int asm(int s)
{
int t=0;
__asm
{
mov eax, DWORD PTR [ebp+8] ;把s的值传给eax
mov t, eax ;把eax的值传给t
}
printf("- %d……
li_delong:谢谢
li_delong:谢谢
li_delong:谢谢
XUETUJIAN:
文章分类
收藏
相册
EIM 截图
相关软件图片
PI的最精确值
FreeEIM 标签
FreeEIM华军下载
XP SP2 SDK
下载FreeEIM
盛天龙
飞鸽传书
不错的网站
CPPBLOG
局域网聊天
泡妞专家
用VC写Assembly代码(RSS)
百度的Blog(RSS)
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 用VC写Assembly代码(5) --字符串收藏

新一篇: 用VC写Assembly代码(5) --函数调用(二) | 旧一篇: 10 Ways to Make Your Code More Testable

是有几个朋友也喜欢这种编城方法的,前几天听我一个朋友说:"真正的高手是懂C,而不是C++",想想也是.

几乎所有代码最后还是有汇编代码组成的,只是效率的问题,汇编和机器语言11对应,这使汇编可以叫机器做机器能做的所有事.所以学好汇编对任何高级语言的理解很有好处.希望编程爱好者也能学习.

没事做, 写了短字符串处理的代码:

#include <string.h>
#include <stdio.h>


int main(int argc, char* argv[])
{
 __asm
 {
  push ebp
  mov ebp, esp
  sub esp, 10h
  mov byte ptr[ebp-09h], 'a'
  mov byte ptr[ebp-08h], 'b'
  mov byte ptr[ebp-07h], 'c'
  mov byte ptr[ebp-06h], 'd'
  mov byte ptr[ebp-05h], '\n'
  mov byte ptr[ebp-04h], 0
  lea eax, [ebp-09h]
  push eax
  call printf
  mov esp, ebp
  pop ebp
 }
 return 0;
}
我不知他的实现方法,很多高手应该会,可以解释一下吗?

发表于 @ 2006年06月06日 09:13:00|评论(loading...)|编辑

新一篇: 用VC写Assembly代码(5) --函数调用(二) | 旧一篇: 10 Ways to Make Your Code More Testable

评论

#i_like_cpp 发表于2006-06-07 19:02:00  IP: 218.18.77.*
其实下面也可以一样:

//VC-ConsoleWithApi
#include <string.h>
#include <stdio.h>


int main(int argc, char* argv[])
{
char szStr[10] = {0};
szStr[0] = 'a';
szStr[1] = 'b';
szStr[2] = 'c';
szStr[3] = 'd';
szStr[4] = '\n';
szStr[5] = '\x00';
printf(szStr);
return 0;
}
#i_like_cpp 发表于2006-06-08 00:04:00  IP: 219.134.150.*
#include <stdio.h>

void main()
{
char ttt[8];
ttt[0] = 'c';
ttt[1] = 'm';
ttt[2] = 'd';
ttt[3] = '.';
ttt[4] = 'e';
ttt[5] = 'x';
ttt[6] = 'e';
ttt[7] = 0;
printf(ttt);
}
#i_like_cpp 发表于2006-06-08 00:05:00  IP: 219.134.150.*
1: #include <stdio.h>
2:
3: void main()
4: {
00401010 55 push ebp
00401011 8B EC mov ebp,esp
00401013 83 EC 48 sub esp,48h
00401016 53 push ebx
00401017 56 push esi
00401018 57 push edi
00401019 8D 7D B8 lea edi,[ebp-48h]
0040101C B9 12 00 00 00 mov ecx,12h
00401021 B8 CC CC CC CC mov eax,0CCCCCCCCh
00401026 F3 AB rep stos dword ptr [edi]
5: char ttt[8];
6: ttt[0] = 'c';
00401028 C6 45 F8 63 mov byte ptr [ebp-8],63h
7: ttt[1] = 'm';
0040102C C6 45 F9 6D mov byte ptr [ebp-7],6Dh
8: ttt[2] = 'd';
00401030 C6 45 FA 64 mov byte ptr [ebp-6],64h
9: ttt[3] = '.';
00401034 C6 45 FB 2E mov byte ptr [ebp-5],2Eh
10: ttt[4] = 'e';
00401038 C6 45 FC 65 mov byte ptr [ebp-4],65h
11: ttt[5] = 'x';
0040103C C6 45 FD 78 mov byte ptr [ebp-3],78h
12: ttt[6] = 'e';
00401040 C6 45 FE 65 mov byte ptr [ebp-2],65h
13: ttt[7] = 0;
00401044 C6 45 FF 00 mov byte ptr [ebp-1],0
14: printf(ttt);
00401048 8D 45 F8 lea eax,[ebp-8]
0040104B 50
#sheds 发表于2007-05-20 12:09:22  IP: 59.40.170.*
等价的C代码如下:

#include <string.h>
#include <stdio.h>


int main(int argc, char* argv[])
{
char buf[] = {'a', 'b', 'c', 'd', '\n', 0}
printf(buf);
return 0;
}
#thecrazyboy 发表于2007-11-05 19:59:08  IP: 211.144.101.*
你好 我调试 了所有的代码
但是以下代码很让我困惑
__asm
{
push ebp
mov ebp, esp
sub esp, 10h
mov byte ptr[ebp-09h], 'a'
mov byte ptr[ebp-08h], 'b'
mov byte ptr[ebp-07h], 'c'
mov byte ptr[ebp-06h], 'd'
mov byte ptr[ebp-05h], '\n'
mov byte ptr[ebp-04h], 0
lea eax, [ebp-09h]
push eax
call printf
mov esp, ebp
pop ebp
}
sub esp, 10h 为什么是 10h
我调试一下 20h也可以,
这个操作到底是什么意思 ?
发表评论  


登录
Csdn Blog version 3.1a
Copyright © FreeEIM Studio