Как скомпилировать с компилятором Брюса C, чтобы получить файл asm, который работает на процессорах 8086
У меня есть этот маленький код 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;
}
которая является простой функцией скользящего среднего
Я хочу получить код сборки, соответствующий этому коду, однако я хочу, чтобы код сборки ISA x86 мог работать на процессоре 8086
после просмотра я запустил эту команду
bcc -ansi -c -o foo.o foo.c
as86 foo.asm -o foo.o
это закончилось ошибкой
as: error opening input file
Как я могу скомпилировать мой файл, чтобы получить код сборки?
1 ответ
Решение
Пытаться 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