我正在使用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