Ensamblador - ¿Cómo hacer un programa Ensamblador 8086 (DosBox)?

 
Vista:
sin imagen de perfil

¿Cómo hacer un programa Ensamblador 8086 (DosBox)?

Publicado por Jos Antonio (8 intervenciones) el 22/10/2020 01:54:04
Programa que calcule la multiplicación de dos números (A*B) de 8 bits mediante sumas sucesivas en Ensamblador 8086
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿Cómo hacer un programa Ensamblador 8086 (DosBox)?

Publicado por Nacho (81 intervenciones) el 22/10/2020 15:49:16
Básicamente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.model small
.stack
.data
 
factor1 db 5
factor2 db 4
resultado dw 0
.code
 
start:
   mov ax,@data
   mov ds,ax
 
   mov cl, factor2
   xor ax, ax
 
l: add al, factor1
   loop l
   mov resultado, ax
 
salir:
 
end start
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo hacer un programa Ensamblador 8086 (DosBox)?

Publicado por Nacho (81 intervenciones) el 22/10/2020 17:23:15
Pequeño experimento, el mismo programa escrito en c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void main()
{
 push        ebp
 mov         ebp,esp
 sub         esp,0F0h
 push        ebx
 push        esi
 push        edi
 lea         edi,[ebp-0F0h]
 mov         ecx,3Ch
 mov         eax,0CCCCCCCCh
 rep stos    dword ptr es:[edi]
 mov         ecx,offset _88D22677_LosPillaos@cpp (0B7C002h)
 call        @__CheckForDebuggerJustMyCode@4 (0B71208h)
    char factor1=5;
 mov         byte ptr [factor1],5
    char factor2=4;
 mov         byte ptr [factor2],4
    short resultado=0;
 xor         eax,eax
 mov         word ptr [resultado],ax
 
    for (int i = 0; i < factor2; i++)
 mov         dword ptr [ebp-2Ch],0
 jmp         main+48h (0B71748h)
 mov         eax,dword ptr [ebp-2Ch]
 add         eax,1
 mov         dword ptr [ebp-2Ch],eax
 movsx       eax,byte ptr [factor2]
 cmp         dword ptr [ebp-2Ch],eax
 jge         main+61h (0B71761h)
    {
        resultado += factor1;
 movsx       eax,byte ptr [factor1]
 movsx       ecx,word ptr [resultado]
 add         ecx,eax
 mov         word ptr [resultado],cx
    }
 jmp         main+3Fh (0B7173Fh)
}
 xor         eax,eax
 pop         edi
 pop         esi
 pop         ebx
 add         esp,0F0h
 cmp         ebp,esp
 call        __RTC_CheckEsp (0B71212h)
 mov         esp,ebp
 pop         ebp
 ret

Eso sí, sin optimización.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar