assembler complemento a1 y a2

Iniciado por usuario fbe, 29 Junio 2015, 02:44 AM

0 Miembros y 1 Visitante están viendo este tema.

usuario fbe

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.

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.