Subrutinas de Ensamblador en C
Bueno, ya se que esto a la mayoría os sonará a chino, y os importará una mierda, pero me la suda que estoy estudiando asm del intel 8086, y si no lo apunto pues se me olvida.
La idea es añadir código ensamblador a un programa en C, usando como compilar de ensamblador turbo ensamblador (TASM) y el clásico Turbo C
// Fichero: factmain.c
#include
extern unsigned long fact (unsigned int n );
void main (void)
{
long i;
i = fact (10);
printf ("Factorial de 10 %ld", i);
}
// Fichero: fact.asm
.model small
.code
public _fact
_fact proc near
push bp
mov bp,sp
mov cx, [bp+4]
cmp cx,0
je hecho
dec cx
push cx
call _fact
pop cx
cmp ax, 0ffffh
jne sigue
cmp dx, 0ffffh
je overfl
sigue: inc cx
push dx
mul cx
push dx
push ax
mov ax, [bp-2]
mul cx
jc overfl
push ax
mov ax, [bp -6]
mov dx, [bp - 4]
add dx, [bp - 8]
jnc retorno
overfl: mov ax, 0ffffh
mov dx, 0ffffh
jmp short retorno
hecho: mov dx, 0
mov ax, 1
retorno: mov sp, bp
pop bp
ret
_fact endp
end
- Compilar el fichero principal factmain.c.
d:\turboc\tcc -c -Iinclude -Llib factmain.c
Esto genera un ficheo objeto:factmain.obj
- Compilar el fichero ensamblador fact.asm
d:\tasm\bin\tasm /ml fact.asm
- Enlazarlo todo
d:\turboc\tlink lib\c0s fact factmain, run,, lib\cs
y te crea unrun.exe
0 Comments:
Publicar un comentario
<< Home