Ensamblador - Ayuda Con menu de opciones 8086

 
Vista:
sin imagen de perfil

Ayuda Con menu de opciones 8086

Publicado por Anthony (1 intervención) el 23/10/2014 00:09:46
Hola camaradas estoy construyendo una calculadora en ensamblador con emu 8086 esto es lo que llevo, me podrian ayudar con las operaciones con los datos que introduce desde teclado osea las que estan hasta abajo del codigo Gracias


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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
;programa de menu de opciones
;guarda el valor de opcion en la 300h,
;el operando primero en la 305h
;y el segundo operando en la 310h
;No acepta valores mayores a 65500
 
org 100h
inicio:
;aqui despliega todo el menu de opciones
mov ah, 01
ab: int 16h
    jz ab
    ; toma el valor de la opcion
    mov [300h], al
    mov cx, 5  ;los 5 valores 00000 - 65500
    mov ah, 00
    int 16h
    mov ah, 01
    mov si, 305h
ac: int 16h
    jz ac
    mov [si], al
    inc si
    mov ah, 00
    int 16h
    mov ah, 01
    loop ac
    ; ya guarde el primer numero, repito para el segundo
    mov si, 310h
    mov cx, 5
ad: int 16h
    jz ad
    mov [si], al
    inc si
    mov ah, 00
    int 16h
    mov ah, 01
    loop ad
    ; ya guarde el segundo numero
    ;compruebo que operacion es haciendo el menu de opciones
    mov al, [300h]
    cmp al, 'a'
    jz suma
    cmp al, 'b'
    jz resta
    cmp al, 'c'
    jz multi
    cmp al, 'd'
    jz divi
    cmp al, 'e'
    jz desp
    cmp al, 'f'
    jz rota
    jmp inicio    ;si no es ninguna, que regrese a ingresar todo
 
suma: ;primero convierto los valores en decimal
      mov si, 305h
      mov cx, 10h  ;todos de un jalon, desde 305h hasta 315h
dale: mov al, [si]
      sub al, 30h
      mov [si], al
      inc si
      loop dale
      ; convierto el primer numero
      mov al, [305h]
      mov ah, 00 ;meto el numero a 16 bits
      mov dx, 10000
      mul dx   ;solo me interesa el valor de ax
      mov di, ax  ;guardo el valor
      mov al, [306h]
      mov ah, 00
      mov dx, 1000
      mul dx
      add di, ax   ;sumo con el anterior
      mov al, [307h]
      mov dl, 100
      mul dl
      add di, ax
      mov al, [308h]
      mov dl, 10
      mul dl
      add di, ax
      mov al, [309h]
      mov ah, 00
      add di, ax   ;el resultado en hexadecimal de los 5 digitos esta
      ;contenido dentro de di
      ; repito para el segundo numero
      ; convierto el primer numero
      mov al, [310h]
      mov ah, 00 ;meto el numero a 16 bits
      mov dx, 10000
      mul dx   ;solo me interesa el valor de ax
      mov si, ax  ;guardo el valor
      mov al, [311h]
      mov ah, 00
      mov dx, 1000
      mul dx
      add si, ax   ;sumo con el anterior
      mov al, [312h]
      mov dl, 100
      mul dl
      add si, ax
      mov al, [313h]
      mov dl, 10
      mul dl
      add si, ax
      mov al, [314h]
      mov ah, 00
      add si, ax    ;aqui esta el segundo valor (si)
      add si, di    ;el resultado esta en di
      mov [300h], si
      mov di, 00
      adc di, 00  ;recupero el acarreo
      mov [301h], di
      jmp inicio  ;termina mi rutina de suma
 
 
resta:
 
 
multi:
 
 
divi:
 
 
desp:
 
 
rota:
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