c - 如何使用 Bruce 的 C 编译器进行编译以获得在 8086 处理器上运行的 asm 文件

标签 c assembly x86-16 bcc-compiler

我有这个小c代码

    int main (){
    int in  [50];
    int res [50];

    int avg=0;
    int i=0;
    int j=0;

    for(i=0;i<50;i++){
      in[i]=i*5+28%25;
    }

    for(i=0;i<50;i++){
        avg=0;
        for(j=i-4;j<=i+5;j++){
            if((j>=0)&&(j<50)){
                avg=avg+in[j];
            }
            avg=avg/10;
            res[i]=avg;
        }
    }
    return 0;
}

这是一个简单的移动平均函数

我想得到这段代码对应的汇编代码,但是,我想要的是可以在8086处理器上运行的x86 ISA汇编代码

看了之后我运行了这个命令

bcc -ansi -c -o foo.o foo.c
as86 foo.asm -o foo.o

这以错误告终

as: error opening input file

如何编译我的文件以获得汇编代码?

最佳答案

尝试 bcc -S 获取程序集。例如,如果您键入 bcc -ansi -S foo.c,您将获得包含以下内容的 foo.s(为简洁起见删除了调试注释):

export  _main
_main:
push    bp
mov bp,sp
push    di
push    si
add sp,#-$CA
xor ax,ax
mov -$CE[bp],ax
dec sp
dec sp
xor ax,ax
mov -$D0[bp],ax
dec sp
dec sp
xor ax,ax
mov -$D2[bp],ax
xor ax,ax
mov -$D0[bp],ax
jmp .3
.4:
mov ax,-$D0[bp]
mov dx,ax
shl ax,*1
shl ax,*1
add ax,dx
add ax,*3
push    ax
mov ax,-$D0[bp]
shl ax,*1
mov bx,bp
add bx,ax
mov ax,-$D4[bp]
mov -$68[bx],ax
inc sp
inc sp
.2:
mov ax,-$D0[bp]
inc ax
mov -$D0[bp],ax
.3:
mov ax,-$D0[bp]
cmp ax,*$32
jl  .4
.5:
.1:
xor ax,ax
mov -$D0[bp],ax
jmp .8
.9:
xor ax,ax
mov -$CE[bp],ax
mov ax,-$D0[bp]
add ax,*-4
mov -$D2[bp],ax
jmp .C
.D:
mov ax,-$D2[bp]
test    ax,ax
jl      .E
.10:
mov ax,-$D2[bp]
cmp ax,*$32
jge     .E
.F:
mov ax,-$D2[bp]
shl ax,*1
mov bx,bp
add bx,ax
mov ax,-$CE[bp]
add ax,-$68[bx]
mov -$CE[bp],ax
.E:
mov ax,-$CE[bp]
mov bx,*$A
cwd
idiv    bx
mov -$CE[bp],ax
mov ax,-$D0[bp]
shl ax,*1
mov bx,bp
add bx,ax
mov ax,-$CE[bp]
mov -$CC[bx],ax
.B:
mov ax,-$D2[bp]
inc ax
mov -$D2[bp],ax
.C:
mov ax,-$D0[bp]
add ax,*5
cmp ax,-$D2[bp]
jge .D
.11:
.A:
.7:
mov ax,-$D0[bp]
inc ax
mov -$D0[bp],ax
.8:
mov ax,-$D0[bp]
cmp ax,*$32
blt     .9
.12:
.6:
xor ax,ax
lea sp,-4[bp]
pop si
pop di
pop bp
ret
.data
.bss

关于c - 如何使用 Bruce 的 C 编译器进行编译以获得在 8086 处理器上运行的 asm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168171/

相关文章:

assembly - NASM的resb以二进制输出格式做什么?

assembly - x86实模式段重叠如何帮助节省内存?

c - _mm_lfence() 时间开销是不确定的?

c - 在数组上使用 mprotect()

c execv通过函数传递参数

c - 如何从 gdb 读取 fread 值

c++ - gcc 内联 asm 跳转到带有交叉抛出异常的标签

x86-16 - 为什么 mov 0900h, ax 允许在 emu8086 中使用?

c - 错误仅在 NetBeans 中运行 C 代码时出现

Hack 汇编语言中的 Java 函数