飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2723|回复: 2

[C/C++] C语言--学习笔记--第十课

[复制链接]
  • TA的每日心情

    2019-4-15 08:38
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-4-30 13:28:51 | 显示全部楼层 |阅读模式
    [C] 纯文本查看 复制代码
    编辑edit test.asm    编译masm test;   link test;
    
    void showstr(char * str)    /*1、void showstr()后面没有";"   2、记住(char * str)参数*/
    {
            int i = 0;
            while(str[i])
            {
                    printf("%c",str[i]);
                    i++;
            }
            printf("\n");
    }
    
    main()
    {
            char str1[20];
            char str2[20];
            scanf("%19s",str1);
            scanf("%19s",str2);
            showstr(str1);
            showstr(str2);
    
    }
    
    先封装一个函数;char*str 与int申请字节等价???
    
    
    函数分解;
    
    main()
    {
            char str1[20];
            char str2[20];
    
            char * _show_str = 0;
            int _show_i=0;
            int _ret_kind = 0;
    
            goto _main;			
    
    _show_str:
            _show_i = 0;                 	/*因为有两处调用,所以初始值必须有,不能省略*/
            while(*(_show_str+_show_i))
            {
                    printf("%c",_show_str[_show_i]);
                    _show_i++;
            }
            printf("\n");
    
            if(_ret_kind == 1)
                    goto _showstr_1end;
            if(_ret_kind == 2)
                    goto _showstr_2end;
    _main:						
            scanf("%19s",str1);
            scanf("%19s",str2);
    
            _show_str = str1;
            _ret_kind = 1;
            goto _show_str;			/*先压入参数;明白了,先给参数goto到函数的时候,根据里面一个参数的数值,然后再从参数里面返回到主程序*/
    _showstr_1end:
           /* showstr(str1); */
            _show_str = str2;
            _ret_kind = 2;
            goto _show_str;
    
    _showstr_2end:
           /* showstr(str2); */
           ;
    }
    
    可以运行;
    ==============================================================
    汇编:
    
    assume cs:code  ; main()
    
    code segment    ; {
    
    ;int a;
    ;int b;
    
    a dw 0
    b dw 0
    
    mov a,1
    mov b,1
    mov ax,a
    mov bx,b
    add ax,bx
    
    code ends       ; {
    
    end
    
    --------------
    a dw 申请两个字节; b db 申请一个字节;
    编辑edit test.asm    编译masm test;   link test;
    
    =========================================
    
    正确的代码:
    
    assume cs:code  
    
    code segment    ;代码段开始;
    
    a dw 0
    b dw 0
    
    start:  mov a,1
            mov b,1
            mov ax,a
            mov bx,b
            add ax,bx
    
            mov ax,4c00h 
            int 21h     ;这两句代码是程序执行完后返回DOS
    
    code ends     ;代码段结束;     
    
    end start  ;一定要在end后面告诉程序起始位置;
    

    PYG19周年生日快乐!
  • TA的每日心情

    2019-4-15 08:38
  • 签到天数: 15 天

    [LV.4]偶尔看看III

     楼主| 发表于 2017-4-30 13:30:23 | 显示全部楼层
    小累,未完待续……
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-28 11:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2020-2-21 18:29:24 | 显示全部楼层
    No excuse for going in the wrong direction.
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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