Hola a todos, estoy haciendo un trabajo en assembler en el que tengo que hacer sumas usando el complemento a1 y a2:
por el momento mi tp acepta bases pero quiero que no acepte una base mayor a 16 y la parte de complemento esta comentada porque ocurre un error con la linea 41 o je salida.
Les dejo mi programa hasta el momento:
quisiera que me ayudaran para que mi programa no acepte una base mayor a 16 y con la parte de complemento a1 y a2 para saber cual es el error y como podría solucionarlo.
desde ya muchas gracias por su atención.
[NOTA DEL MODERADOR] Usa las etiquetas GeSHi para insertar código.
por el momento mi tp acepta bases pero quiero que no acepte una base mayor a 16 y la parte de complemento esta comentada porque ocurre un error con la linea 41 o je salida.
Les dejo mi programa hasta el momento:
quisiera que me ayudaran para que mi programa no acepte una base mayor a 16 y con la parte de complemento a1 y a2 para saber cual es el error y como podría solucionarlo.
desde ya muchas gracias por su atención.
Código (asm) [Seleccionar]
#make_COM# ; create ".com" executable (DOS 1.0 compatible).
org 100h ; add +100h to all addresses (required for .com file).
org 100h ; inicio de programa
include 'emu8086.inc' ;Incluye funciones de libreria emu8086
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
jmp inicio
inicio:
mov ah,00h;---------------->limpiar pantalla
mov al,03h
int 10h
mov ax, @data
mov ds,ax
mov dx, offset esp;-------->espacios para los mensajes
mov ah,09;----------------->impresion en pantalla
int 21h
mov ah,09
int 21h
mov dx, offset user;------->creadores del programa
mov ah,09
int 21h
mov dx, offset menu;------->menu principal
mov ah,09
int 21h
;=====================================<comparacion para saltar
mov ah,01h
int 21h
cmp al,'0'
je salida
cmp al,'1'
je base
cmp al,'2'
;je complemento a1
cmp al,'3'
;je complemento a2
cmp al,'4'
je suma
;=====================================<bloques de operaciones
base:
mov dx, offset mensaje4;---> mensaje para pedir la base
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor5,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje
cmp ax,16 ;>mientras la base sea menor a 16
mov dx, offset mensaje8;--->para pedir una base menor a 16
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta;-------->muestra el mensaje de salida
mov ah,09
int 21h
jmp inicio
;fin del bloque base
;complemento a1:
mov dx, offset mensaje5;---> mensaje para pedir el primer numero del complemento
;mov ah,09h
int 20 ;----------------->o int 21 h
;-------------------------->rellenado de variables
;call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
;mov valor3,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje
mov dx, offset mensaje6;---> mensaje para pedir el segundo numero del complemento
;mov ah,09h
;int 21h
;-------------------------->rellenado de variables
;call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
;mov valor4,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje
;cmp ax,bx
;mov dx, offset mensaje7;--->mensaje para mostrar cual es el numero menor
; mox ax
;-------->comparar con la base
;mov dx, offset texto_compa1
;mov ah,00h;---------------->limpia la pantalla
;mov al,03h
;int 10h
;mov dx,offset beta;-------->muestra el mensaje de salida
;mov ah,09
;int 21h
;jmp inicio
;fin del bloque complemento a1
;complemento a2:
mov dx, offset mensaje2;---> mensaje para pedir el primer numero
;CALL scan_num ; escanea y recoje el numero
;MOV num1, CX ;se guarda en num1:
;CALL PTHIS ; se guarda en num2:
mov dx, offset mensaje3;---> mensaje para pedir el segundo numero
;CALL scan_num
;MOV num2, CX
;CMP AX,BX
;JGE BANDERA1
;CMP AX,CX
;JGE BANDERA2
;-------->muestra el resultado en caso de:
; la variale 1 es menor:
;DB 13, 10, 'el numero menor es: ', 0
;MOV AX, num1
;CALL print_num
;JMP BANDERASALIR
; BANDERA 1
;BANDERA1:
;CMP BX,CX
;JGE BANDERA2
; muestra el resultado en caso de que la variale 2 sea menor.
;DB 13, 10, 'el numero menor es: ', 0
;ret
;mov ah,00h;---------------->limpia la pantalla
;mov al,03h
;int 10h
;mov dx,offset beta;-------->muestra el mensaje de salida
;mov ah,09
;int 21h
;jmp inicio
;fin del bloque de complemento a2
suma:
mov dx, offset mensaje2;---> mensaje para pedir el primer numero
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor1,cx;------------->carga el numero a la variable
;-------------------------->muestra el mensaje
mov dx, offset mensaje3;---> mensaje para pedir el segundo numero
mov ah,09h
int 21h
;-------------------------->rellenado de variables
call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
mov valor2,cx;------------->carga el numero a la variable
mov dx, offset texto_suma;->muestra el resultado
mov ah,09h
int 21h;------------------->interrupcion pantalla
;-------------------------->suma de las variables
mov ax,valor1;------------->mueve el valor de la variable a ax
add ax,valor2;------------->suma entre la region ax y la variable
call PRINT_NUM;------------> imprimiendo en pantalla el resultado
mov ah,00;----------------->espera por una tecla en pantalla
int 16h
mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h
mov dx,offset beta;-------->muestra el mensaje de salida
mov ah,09
int 21h
jmp inicio
;fin del bloque de suma
salida:
jmp inicio:
;=============================================================================>
level1:
jmp inicio1:
; dimensiones del rectángulo
; ancho: 10 pixeles
; alto: 5 pixeles
; dimenciones del Cuadrado
; lados : 10 pixeles
w equ 10
h equ 5
; se trabajara en modo en video 13h - 320x200
inicio1:
mov ah, 0
mov al, 13h
int 10h
mov ah,0ch ;ah en 0ch para que ponga los pixeles en la pantalla
; dijuja la linea superior:
mov cx, 100+w ; columna
mov dx, 20 ; fila
mov al, 003 ; color de la figura
;=========================================================>
fin:;---------------------->fin del programa
mov dx, offset beta
mov ah,09
int 21h
mov ah,00h
mov al,03h
int 10h
mov ah,00;----pausa para salir
int 16h
ret
;------------------------>
user db 13,10,' franco $'
mensaje2 db 13,10,' Digite el primer numero $'
mensaje3 db 13,10,' Digite el segundo numero $'
menu db 13,10,' Digite 0->salir 1->base 2->complemento a1 3-complemento a2 4->suma $'
menu2 db 13,10,' Digite 0->regresar 1-> $'
beta db 13,10,' Saliendo $'
mensaje4 db 13,10, 'digite la base $'
mensaje5 db 13,10, 'primer numero del complemento $'
mensaje6 db 13,10, 'segundo numero del complemento $'
mensaje7 db 13,10, 'el menor es $'
mensaje8 db 13,10, 'digite una base menor a 16 $'
;------------------------>variables
valor1 dw ?
valor2 dw ?
valor3 dw ?
valor4 dw ?
valor5 dw ?
;------------------------>textos de resultados
texto_base db 13,10,'la base es $'
;texto_complemento a1 db 13,10,'complemento a1 $'
;texto_complemento a2 db 13,10,'complemento a2 $'
texto_suma db 13,10,'la suma de los valores es $'
esp db ' ',10,13,'$'
;------------------------>textos de ayuda
db 13,10, '1(primer valor)+2(segundo valor)=3 $'
[NOTA DEL MODERADOR] Usa las etiquetas GeSHi para insertar código.