首页
社区
课程
招聘
[求助]HelloWorld都显示不出来了,这让老夫如何是好。。。救命!
发表于: 2010-9-10 21:28 10593

[求助]HelloWorld都显示不出来了,这让老夫如何是好。。。救命!

2010-9-10 21:28
10593
代码是没有错的。。。
.386
.model flat,stdcall
option casemap:none

includelib msvcrt.lib

printf PROTO C :ptr sbyte,:vararg

.data
szFmt byte 'Hello!',0
.code
start:
  invoke printf,offset szFmt
  ret
end start

OD下的:
00401000 >/$  68 00304000   PUSH Hello.00403000                      ; /format = "Hello!"
00401005  |.  E8 04000000   CALL <JMP.&msvcrt.printf>                ; \printf
0040100A  |.  83C4 04       ADD ESP,4
0040100D  \.  C3            RETN
0040100E   $- FF25 00204000 JMP DWORD PTR DS:[<&msvcrt.printf>]      ;  msvcrt.printf

但是居然显示不出来。。。连个黑框都没闪。。。
这让老夫情何以堪啊。。。没有Kx币了,所以发布了悬赏贴。在线等。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (29)
雪    币: 3098
活跃值: (229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
.386
.model flat,stdcall
option casemap:none

;include	msvcrt.inc     这句貌似可以不要?
includelib	msvcrt.lib

;printf PROTO C :ptr sbyte,:vararg
printf PROTO C :dword,:dword     这样也行?
system proto C :dword

.data
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
szArgument	db	'Hello World!',0dh,0ah,0
szFormat	db	'%s',0
szPause		db	'pause',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
	invoke printf,offset szFormat,offset szArgument
	invoke system,offset szPause
	ret
	
end start


我试了下,貌似能弹出个黑框.但感觉是蒙的

继续等待高手!
上传的附件:
2010-9-10 22:39
0
雪    币: 209
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
为什么我的电脑上就没有显示出来。。。就只有“请按任意键继续”
2010-9-10 23:31
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
把头文件 包含进去 - -!还有你的Printf这个函数 的使用方法 搞错了 - -~!你没学过C语言吗? printf("%s",变量名(表示字符串 - -!))
2010-9-11 02:54
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
5
你亮了。。。
2010-9-11 07:27
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
难道我错了?
2010-9-11 08:19
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
我记得printf函数是这样用的啊..楼上的楼上请赐教 - -你的言语让我感到恐惧!
2010-9-11 08:20
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
8
MSDN....
2010-9-11 08:54
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
// crt_printf.c
// This program uses the printf and wprintf functions
// to produce formatted output.

#include <stdio.h>

int main( void )
{
   char     ch = 'h', 
            *string = "computer";
   wchar_t  wch = L'w', 
            *wstring = L"Unicode";
   int      count = -9234;
   double   fp = 251.7366;

   // Display integers
   printf( "Integer formats:\n"
           "   Decimal: %d  Justified: %.6d  "
           "Unsigned: %u\n",
           count, count, count, count );

   // Display decimals
   printf( "Decimal %d as:\n   Hex: %Xh  "
           "C hex: 0x%x  Octal: %o\n",
            count, count, count, count );

   // Display in different radixes
   printf( "Digits 10 equal:\n   Hex: %i  "
           "Octal: %i  Decimal: %i\n",
            0x10, 010, 10 );

   // Display characters
   printf("Characters in field (1):\n"
          "%10c%5hc%5C%5lc\n",
          ch, ch, wch, wch);
   wprintf(L"Characters in field (2):\n"
           L"%10C%5hc%5c%5lc\n",
           ch, ch, wch, wch);

   // Display strings
   printf("Strings in field (1):\n%25s\n"
          "%25.4hs\n   %S%25.3ls\n",
          string, string, wstring, wstring);
   wprintf(L"Strings in field (2):\n%25S\n"
           L"%25.4hs\n   %s%25.3ls\n",
           string, string, wstring, wstring);

   // Display real numbers
   printf("Real numbers:\n   %f %.2f %e %E\n",
          fp, fp, fp, fp );

   // Display pointer
   printf( "\nAddress as:   %p\n", &count);
}


MSDN是这样告诉我们的!
2010-9-11 09:02
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
我只是简化了一点  前面的format写了一个%S嘛....55555 不要吓我嘛!
2010-9-11 09:03
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
11
The format argument consists of ordinary characters, escape sequences, and (if arguments follow format) format specifications. The ordinary characters and escape sequences are copied to stdout in order of their appearance.
2010-9-11 09:12
0
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
12
英语烂的飘过 - -
2010-9-11 09:20
0
雪    币: 209
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
给力点啊。。。
2010-9-11 19:50
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
14
二楼的代码已经能解决你的问题了
2010-9-11 20:22
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
15
.386
.model flat,stdcall
option casemap:none

include windows.inc
include masm32.inc
includelib kernel32.lib
includelib masm32.lib
include D:\RadASM\masm32\macros\macros.asm

.code
start:       
        invoke StdOut,CTXT('Hello World',0d,0ah)
        ret
end start

自己也写了一个控制台程序,谢谢参考!!最后一个包含宏的路径要设置正确,根据你自己的目录设置,谢谢!
2010-9-11 20:45
0
雪    币: 209
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好像不是代码的问题啊。。。
2010-9-11 21:13
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
代码没错?

00401000 >/$  68 00304000   PUSH Hello.00403000                      ; /format = "Hello!"
00401005  |.  E8 04000000   CALL <JMP.&msvcrt.printf>                ; \printf

参数才一个,显示得出来那就是真的奇怪了
2010-9-12 11:33
0
雪    币: 209
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
是没错啊。。莫非是编译器的问题?
2010-9-12 14:37
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
还说没问题

这样解决

你用C写一条HELLO

然后用OD跟,看看C写出来的程序压了几个参,在看看你的压了几个参

具体解决方法沙发已经告诉你了
2010-9-12 17:26
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这个我不明白的.
2010-9-12 19:25
0
雪    币: 209
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
你试试他的源码,和我的效果是一样的。。。
代码是没有错的。。。printf一个参数也是没问题的。
2010-9-12 21:59
0
雪    币: 209
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
汇编调用C语言运行时库的话不需要先初始化C语言运行时库吗?是不是该参考下VC中CRTmain那部分代码
2010-9-13 00:12
0
雪    币: 393
活跃值: (100)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
23
根据LZ帖子标题 + 2#的图 + 3#的回复。
LZ可以把得出3#结论的EXE文件上传下来给别人试试。
代码貌似没问题。

另外貌似有两个人在乱扯谈 楼主完全不用理会。
2010-9-13 10:52
0
雪    币: 393
活跃值: (100)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
24
再加。
1#所说的黑框也不显示一下,可以看看链接参数。
subsystem:console
2010-9-13 10:55
0
雪    币: 1254
活跃值: (5114)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
我到现在也不会写个"HelloWorld", 看来以后要找机会补习一下了.........
2010-9-13 12:13
0
游客
登录 | 注册 方可回帖
返回
//