gcc使用-m16选项编译16位实时代码

时间:2017-04-16 14:26:15

标签: linux gcc assembly stack

我正在使用gcc -m16选项使用实时代码进行一些练习,但我发现如果我创建函数int16_t类型的参数或返回类型,仍然是%eax或将使用堆栈中的32位。但我不希望它像这样执行,也就是说,只是做一点点,在函数调用或其他任何地方没有对齐,是不是任何方法?

细节:

zhang@HP-deepin:~/Desktop/tmp$ cat c.c
#include <stdint.h>

int16_t small(int16_t a, int16_t b) {
    return a < b ? a : b;
}
zhang@HP-deepin:~/Desktop/tmp$ gcc -m16 -S -O3 c.c -o c.s
zhang@HP-deepin:~/Desktop/tmp$ cat c.s
    .file   "c.c"
    .code16gcc
    .text
    .p2align 4,,15
    .globl  small
    .type   small, @function
small:
.LFB0:
    .cfi_startproc
    movl    4(%esp), %edx
    movl    8(%esp), %eax
    cmpw    %dx, %ax
    cmovg   %edx, %eax
    ret
    .cfi_endproc
.LFE0:
    .size   small, .-small
    .ident  "GCC: (Debian 6.2.0-11) 6.2.0 20161103"
    .section    .note.GNU-stack,"",@progbits

0 个答案:

没有答案