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
#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.