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
0