Calculadora basica
Publicado por ANGEL (3 intervenciones) el 28/06/2016 04:42:39
Hola buenas noches estoy haciendo una clculadora basica que de a elegir entre opciones si quieres suma resta multiplicacion y divicion con saltos pero me falta meter las multiplicacion y la divicion si meto mas de dos saltos me sale este error "relative jump out range by 0005h bytete"[/b] les dejo mi codigo espero me puedan ayudar
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
.model small
.stack
.data
opcion_1 db 'Suma: $'
opcion_2 db 'Resta: $'
opcion_3 db 'Multiplicacion: $'
opcion_i db 'Opcion invalida$'
ingreso db 'Ingrese un numero:',10,13,'::[1]Suma :: ::[2]Resta ::',10,13,'::[3]Multiplicacion :: ::[4]Division ::',10,13,'$'
txtvalor1 db 'Ingrese el primer valor:$'
txtvalor2 db 'Ingrese el segundo valor:$'
newline db 10,13,'$'
valor1 db ?
valor2 db ?
numero db ?
.code
; directiva que indica el inicio de
; código a ser procesado
.startup
; Se imprime el texto de apoyo
; para el ingreso del número
lea dx, ingreso
mov ah, 09h
int 21h
; Se lee el valor numérico en formato
; de caracter.
mov ah, 01h
int 21h
; Se coloca el valor en la variable de
; apoyo.
mov numero, al
sub numero, 30h; Se convierte el valor de caracter en valor numérico.
; Se imprime un salto de linea
lea dx, newline
mov ah, 09h
int 21h
; Se pregunta si el valor es igual a 1
cmp numero, 01h
je Imp_Op1
; Se pregunta si el valor es igual a 2
cmp numero, 02h
je Imp_Op2
; Se imprime el mensaje de número invalido
lea dx, opcion_i
mov ah, 09h
int 21h
jmp salir
Imp_Op1:
lea dx, txtValor1
mov ah, 09h
int 21h
mov ah, 01h;Leer carácter desde el teclado
int 21h ;Lee primer caracter
sub al, 30h ;Resto 30H (48Dec) para obtener
;el número
mov valor1, al ; Lo guardo en variable valor
lea dx, newline
mov ah, 09h
int 21h
lea dx, txtValor2
mov ah, 09h
int 21h
mov ah, 01h ;Leer carácter desde el teclado
int 21h ; Leo el segundo caracter
sub al, 30h ; Resto 30H(48Dec) para obtener
mov valor2, al; segundo valor
lea dx, newline
mov ah, 09h
int 21h
lea dx, newline
mov ah, 09h
int 21h
lea dx, opcion_1
mov ah, 09h
int 21h
mov ax, 00h
add al, valor1 ;Realizo la suma de los dos valores
add al, valor2
mov dl, al ;Pongo en dl el número a imprimir
add dl, 30h ;Agrego 30(48Dec) para obtener el caracter
mov ah, 02h ;Funcion para imprimir un caracter
int 21h
; Se va a la etiqueta de salir
jmp salir
Imp_Op2:
lea dx, txtValor1
mov ah, 09h
int 21h
mov ah, 01h;Leer carácter desde el teclado
int 21h ;Lee primer caracter
add al, 30h ;Resto 30H (48Dec) para obtener
;el número
mov valor1, al ; Lo guardo en variable valor
lea dx, newline
mov ah, 09h
int 21h
lea dx, txtValor2
mov ah, 09h
int 21h
mov ah, 01h ;Leer carácter desde el teclado
int 21h ; Leo el segundo caracter
sub al, 30h ; Resto 30H(48Dec) para obtener
; segundo valor
mov valor2, al
lea dx, newline
mov ah, 09h
int 21h
lea dx, newline
mov ah, 09h
int 21h
lea dx, opcion_2
mov ah, 09h
int 21h
mov ax, 00h
add al, valor1 ;Realizo la suma de los dos valores
sub al, valor2
mov dl, al ;Pongo en dl el número a imprimir
sub dl, 30h ;Agrego 30(48Dec) para obtener el caracter
mov ah, 02h ;Funcion para imprimir un caracter
int 21h
salir:
.exit
end
Valora esta pregunta
0