Ensamblador - Calculadora basica de dos números

 
Vista:

Calculadora basica de dos números

Publicado por Sebastian (1 intervención) el 05/07/2021 00:51:00
Hola, me podrían ayudar con la siguietne tarea?

1. Escriba un programa que dado dos números calcule las 4 operaciones básicas entre ellos.
2. Modifique el programa anterior para validar la división por cero.
3. Modifique el programa para que el resultado de las operaciones se imprima en el centro de la
pantalla.

A continuación lo que he conseguido hacer, me falta arreglar la division sobre 0, cuando pongo la oprecion de division dentro de la bandera "positivo" me sale un error. Ayuda por favor.


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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
name 'Taller 1'
 
; Escriba un programa que dado dos números calcule las 4 operaciones basicas entre ellos
 
lugar macro fila,col
mov ah,02h
mov dh,fila
mov dl,col
mov bh,0h
int 10h
endm
 
.model small
.stack 64
 
; Empezamos declarando los datos a usar
 
.data
 
    ; Delaramos las variables de cada numero y de las operaciones
 
    Num1 db 0
    Num2 db 0
    Suma db 0
    Resta db 0
    Mult db 0
    Divi db 0
 
 
    ; Pedimos al ususario que ingrese los dos numeros aplastando enter
 
    Ingreso1 db 13,10, 'Ingrese Primer Numero', 13,10, '$'
    Ingreso2 db 13,10, 'Ingrese Segundo Numero', 13,10, '$'
 
    ; Delaramos las variables cadena donde me de el resultado
 
    Rsuma db 13,10 , 'Suma: ', 13,10, '$'
    Rresta db 13,10 , 'Resta: ', 13,10, '$'
    Rmult db 13,10 , 'Multiplicacion: ', 13,10, '$'
    Rdivi db 13,10 , 'Division: ' , 13,10, '$'
    Rcero db 13,10 , 'Division:                          NO VALIDA ' , 13,10, '$'
 
; Empezamos a escribir el codigo
 
.code
 
 
        mov ax, @data   ; Cargamos datos en el acumulador
        mov ds, ax
 
        ; Pasos para ingresar primer numero
 
        lugar 0,0
 
        mov ah, 09h       ; Iniciar consola
        lea dx, Ingreso1  ; Aparece mensaje de Ingresar 1
        int 21h           ; Interrupcion
        mov ah, 01        ; Ingresar numero atravez del teclado
        int 21h           ; Interrupcion para terminar bloque de instrucciones
        sub al, 30h       ; Convierte la tecla a numero
        mov Num1, al      ; Movemos el valor ingresado a la variable Num1
 
 
        ; Repetimos para ingresar segundo numero
 
        lugar 3,0
        mov ah, 09
        lea dx, Ingreso2
        int 21h
        mov ah, 01
        int 21h
        sub al, 30h
        mov Num2, al
 
 
    ; Empezamos Operaciones
 
    ; Suma
 
    mov al, Num1     ; Traemos Num1 del registro anterior
    add al, Num2     ; Sumamos a Num1, que esta en el acumulador, el valor de Num2
    mov Suma, al     ; Movemos a variable Suma el resultado del acumulador
 
 
    ; Resta
 
    mov al, Num1     ; Traemos Num1 del registro anterior
    sub al, Num2     ; Restamos a Num1, que esta en el acumulador, el valor de Num2
    mov Resta, al    ; Movemos a variable Resta el resultado del acumulador
 
 
    ; Multiplicacion
 
    mov al, Num1     ; Traemos Num1 del registro anterior
    mul Num2         ; Multiplicamos a Num1, que esta en el acumulador, el valor de Num2
    mov Mult, al     ; Movemos a variable Multi el resultado del acumulador
 
 
    ;Division por 0
 
    sub bl, 30h
    mov bl, Num2     ; Almacenamos Num2 en registro base
 
    cmp bl, 0        ; Comparamos el valor de Num2
 
    je cero          ; Si el valor es cero
    jl positivo      ; Si el valor es positivo
 
 
    ; Mostramos el Resultado
 
    positivo:
 
    ; Suma
 
    lugar 6,0
 
    mov ah, 09       ; Iniciamos la consola
    lea dx, Rsuma    ; Leemos mensaje Rsuma
    int 21h          ; Interrupcion para terminar bloque de instrucciones
 
    lugar 7,39
 
    mov dl, Suma     ; Movemos resultado de variable Suma
    add dl, 30h      ; Transformamos resultado a letras
    mov ah, 02       ; Mostramos valor de la variable
    int 21h          ; Interrupcion para terminar bloque de instrucciones
 
 
    ; Resta
 
    lugar 9,0
 
    mov ah, 09
    lea dx, Rresta
    int 21h
 
    lugar 10,39
 
    mov dl, Resta
    add dl, 30h
    mov ah, 02
    int 21h
 
 
    ; Multiplicacion
 
    lugar 12,0
 
    mov ah, 09
    lea dx, Rmult
    int 21h
 
    lugar 13,39
 
    mov dl, Mult
    add dl, 30h
    mov ah, 02
    int 21h
 
 
    ; Division
 
    ; Division
 
    mov al, Num1     ; Traemos Num1 del registro anterior
    div Num2         ; Dividimos a Num1, que esta en el acumulador, el valor de Num2
    mov Divi, al     ; Movemos a variable Divi el resultado del acumulador
 
 
 
    lugar 15,0
 
    mov ah, 09
    lea dx, Rdivi
    int 21h
 
    lugar 16,39
 
    mov dl, Divi
    add dl, 30h
    mov ah, 02
    int 21h
 
    .exit
 
    cero:
 
    ; Suma
 
    lugar 18,0
 
    mov ah, 09       ; Iniciamos la consola
    lea dx, Rsuma    ; Leemos mensaje Rsuma
    int 21h          ; Interrupcion para terminar bloque de instrucciones
 
    lugar 19,39
 
    mov dl, Suma     ; Movemos resultado de variable Suma
    add dl, 30h      ; Transformamos resultado a letras
    mov ah, 02       ; Mostramos valor de la variable
    int 21h          ; Interrupcion para terminar bloque de instrucciones
 
 
    ; Resta
 
    lugar 21,0
 
    mov ah, 09
    lea dx, Rresta
    int 21h
 
    lugar 22,39
 
    mov dl, Resta
    add dl, 30h
    mov ah, 02
    int 21h
 
 
    ; Multiplicacion
 
    lugar 24,0
 
    mov ah, 09
    lea dx, Rmult
    int 21h
 
    lugar 25,39
 
    mov dl, Mult
    add dl, 30h
    mov ah, 02
    int 21h
 
 
    ; Division
 
    lugar 27,0
 
    mov ah, 09
    lea dx, Rcero
    int 21h
 
    .exit
 
ret
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