终于体验到在Linux下使用Asm 和 C的混合编写生成-elf文件。
 在程序中的函数相互调用显然使用的是堆栈进行。

而中断 int 0x80 却没搞清楚。可以明确的是这是个BIOS中断可以实现多种功能,使用eax选择功能,当eax=4时是屏幕输出,ebx为输出个数,ecx是字符长度,edx则为字符内容。

参数的传递遵循后边的参数先入栈

foo.asm                                                                                                                                                    
 extern choose

 [section .data]

     num1    dd  3
     num2    dd  4

 [section .text]

     global _start
     global myprint

 _start:

         push    dword   [num1]
         push    dword   [num2]
         call    choose
         add     esp ,   8

         mov     ebx ,   0
         mov     eax ,   1
         int     0x80

 myprint:

     mov     edx ,   [esp+8]
     mov     ecx ,   [esp+4]
     mov     ebx ,   1
     mov     eax ,   4
     int     0x80
     ret
 ~                                                                                 
 使用 nasm -f elf -o foo.o foo.asm 编译 ,生成elf格式的.o文件


  bar.c                                                                                                                                                      
 void myprint(char* msg  , int len);

 int choose(int a,int b)
 {
     if ( a>=b )
         myprint("the 1st one\n",13);
     else
         myprint("the 2st one\n",13);
     return 0;
 }
 ~                                                                                                                                                           
 使用gcc -c -o bar.o bar.c编译

 用ld -o f foo.o bar.o 链接




================================================================================
在Linux 的Vim中 可以打开多个程序使用Alt + 1/2/3 切换,而Shift + Ctrl + T则可打开终端,还挺方便





自己的评论:

       1:对于vim的切换,那样感觉行不通,但是也可能因为是虚拟机下面的ubuntu的问题。。。。以后去双系统的ubuntu试试效果。。。。不过shift+ctrl+t打开中断的方式还是挺不错的,现在也意识到快捷键等的方式对于使用的影响了,感觉很棒啊。。。很舒适

      2:本文生成ELF,运行的时候是:~#  ./f  的执行方式