Ensamblador - Calculadora basica

   
Vista:

Calculadora basica

Publicado por ANGEL ivan_gow96@protonmail.com (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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder