【问题标题】:Calling C IO functions in linux nasm assembly在 linux nasm 程序集中调用 C IO 函数
【发布时间】:2012-01-21 08:58:43
【问题描述】:

有没有办法从 nasm 汇编文件中调用 C 输入/输出函数?

【问题讨论】:

标签: c linux gcc assembly nasm


【解决方案1】:

以下代码逐字复制自Sample nasm programs

printf1.asm 基本调用 printf:

  The nasm source code is printf1.asm
  The result of the assembly is printf1.lst
  The equivalent "C" program is printf1.c
  Running the program produces output printf1.out

  This program demonstrates basic use of "C" library function  printf.
  The equivalent "C" code is shown as comments in the assembly language.

; printf1.asm   print an integer from storage and from a register
; Assemble:     nasm -f elf -l printf.lst  printf1.asm
; Link:         gcc -o printf1  printf1.o
; Run:          printf1
; Output:       a=5, eax=7

; Equivalent C code
; /* printf1.c  print an int and an expression */
; #include <stdio.h>
; int main()
; {
;   int a=5;
;   printf("a=%d, eax=%d\n", a, a+2);
;   return 0;
; }

; Declare some external functions
;
        extern  printf          ; the C function, to be called

        SECTION .data           ; Data section, initialized variables

        a:      dd      5               ; int a=5;
fmt:    db "a=%d, eax=%d", 10, 0 ; The printf format, "\n",'0'


        SECTION .text                   ; Code section.

        global main             ; the standard gcc entry point
main:                           ; the program label for the entry point
        push    ebp             ; set up stack frame
        mov     ebp,esp

        mov     eax, [a]        ; put a from store into register
        add     eax, 2          ; a+2
        push    eax             ; value of a+2
        push    dword [a]       ; value of variable a
        push    dword fmt       ; address of ctrl string
        call    printf          ; Call C function
        add     esp, 12         ; pop stack 3 push times 4 bytes

        mov     esp, ebp        ; takedown stack frame
        pop     ebp             ; same as "leave" op

        mov     eax,0           ;  normal, no error, return value
        ret                     ; return

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多