飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5072|回复: 4

[ASM] 汇编控制台程序如何换行?

[复制链接]
  • TA的每日心情
    擦汗
    2016-2-28 18:22
  • 签到天数: 38 天

    [LV.5]常住居民I

    发表于 2015-2-3 16:09:13 | 显示全部楼层 |阅读模式
    本帖最后由 Armboy2010 于 2015-2-3 16:27 编辑

    初学汇编,简单写了个循环,输出发现竟然换不了行,有碰到过此问题的盆友吗?{:soso_e103:}
    我的环境VS2010+WIN7 64+MASM32
    代码如下:
    1. .386
    2.         .model flat,stdcall
    3.         option casemap:none
    4.         
    5.         include windows.inc
    6.         include user32.inc
    7.         includelib user32.lib
    8.         include kernel32.inc
    9.         includelib kernel32.lib
    10.     include msvcrt.inc
    11.     includelib msvcrt.lib
    12.     include masm32.inc
    13.     includelib masm32.lib

    14.     .data
    15.     n dd 1
    16.     msg db 'n=%d \n \r\n', 0
    17.     szLine db '\n \r\n', 0

    18.     .code
    19. MyLoop proc
    20.     start:
    21.         cmp n, 101
    22.         jae EndLoop
    23.         ; printf("n=%d \r\n", n);
    24.         invoke crt_printf, addr msg, n      ; 换不了行?
    25.         invoke StdOut, addr szLine          ; 换不了行?
    26.         inc n
    27.         jmp start
    28.     EndLoop:
    29.         ret
    30. MyLoop endp

    31.     .code
    32.    start:
    33.       invoke  MyLoop
    34.       invoke  crt_getchar
    35.       invoke  ExitProcess, NULL
    36.    end start
    复制代码


    arm.png





    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-1 09:59
  • 签到天数: 76 天

    [LV.6]常住居民II

    发表于 2015-2-3 18:02:35 | 显示全部楼层
    本帖最后由 theend 于 2015-2-3 18:06 编辑
    1. .data
    2. msg db 'n=%d \n \r\n', 0
    3. szLine db '\n \r\n', 0
    复制代码


    .data是数据段,db "xxxxxx"或'xxxx'符号里定义的只是字符串,你本意是想表达C的\n \r 转义字符结果。
    其实只是一个变量字符串。{:soso_e104:}

    在C语言中使用\n\r来完成回车换行。

    Win32汇编中使用数据0dh,0ah
    例如:
    .data
    inform                db        'Hello',0dh,0ah,'World!',0
    szTitle        db      'Title Name',0
    ...
    .code
    ...
    invoke MessageBox,NULL,offset inform,addr szTitle,0
    ...

    会在弹出窗口(窗口标题为Title Name)中显示:
    Hello
    World!        

    转自网上,可行性楼主自行验证,我没有编译环境,哈哈

    评分

    参与人数 3威望 +8 飘云币 +40 收起 理由
    Armboy2010 + 4 赞一个!
    冷月孤心 + 20 PYG有你更精彩!
    飘云 + 4 + 20 热心!

    查看全部评分

    PYG19周年生日快乐!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2015-2-3 18:08:57 | 显示全部楼层
    {:soso_e127:}   13, 10


    1. .data
    2.     pyg db "www.", "chinapyg", ".com", 13, 10, "piaoyun",0

    3. .code

    4.   start:
    5.         invoke  MessageBox,HWND_DESKTOP,pyg,invoke GetCommandLine,MB_OK
    6.         invoke  ExitProcess,0

    7. .end start
    复制代码

    点评

    哈哈,看来我回答对了,飘总加点分分吧  详情 回复 发表于 2015-2-3 18:11
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-1 09:59
  • 签到天数: 76 天

    [LV.6]常住居民II

    发表于 2015-2-3 18:11:07 | 显示全部楼层

    哈哈,看来我回答对了,飘总加点分分吧{:soso_e113:}
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2016-2-28 18:22
  • 签到天数: 38 天

    [LV.5]常住居民I

     楼主| 发表于 2015-2-4 09:09:30 | 显示全部楼层
    theend 发表于 2015-2-3 18:11
    哈哈,看来我回答对了,飘总加点分分吧

    感谢各位的热心帮助,我试了下,终于可以换行了{:soso_e195:}
    最终代码如下:
    1. .386
    2.         .model flat,stdcall
    3.         option casemap:none
    4.        
    5.         include windows.inc
    6.         include user32.inc
    7.         includelib user32.lib
    8.         include kernel32.inc
    9.         includelib kernel32.lib
    10.     include msvcrt.inc
    11.     includelib msvcrt.lib
    12.     include masm32.inc
    13.     includelib masm32.lib

    14.     .data
    15.     n dd 1
    16.     msg db 'n=%d', 13, 10, 0

    17.     .code
    18.         MyLoop proc
    19.     start:
    20.         cmp n, 101
    21.         jae EndLoop
    22.         ; printf("n=%d \r\n", n);
    23.         invoke crt_printf, addr msg, n
    24.         inc n
    25.         jmp start
    26.     EndLoop:
    27.         ret
    28.         MyLoop endp

    29.     .code
    30.    start:
    31.       invoke  MyLoop
    32.       invoke  crt_getchar
    33.       invoke  ExitProcess, NULL
    34.    end start
    复制代码
    arm.png




    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表