Ensamblador - AYUDA CON EL CODIGO

 
Vista:

AYUDA CON EL CODIGO

Publicado por JOSE ANGEL (1 intervención) el 08/10/2010 16:01:11
;PROGRAMA QUE PIDA DOS CADENAS LAS COMPARE Y CONCATENE Y BUSQUE UN CARACTER
;EL PROBLEMAS ES QUE EL PROGRAMA NO CONCATENA MUY BIEN ESPERO QUE ALGUIEN ME PUEDA AYUDAR.

B10PRMP MACRO MSG
MOV AH,09H
LEA DX,MSG
INT 21H
ENDM

STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS

DATA SEGMENT PARA 'DATA'
CAD1 LABEL BYTE ;LISTA DE PARAMETROS NOMBRE
MAXCAD1 DB 20 ;LONGITUD MAXIMA DE NOMBRE
NAMECA1 DB ? ;NO. DE CARACTERES INTRODUCIDOS
NAMCAD1 DB 21 DUP(' ') ;NOMBRE INTRODUCIDO
PROMC1 DB 'PRIMER CADENA?','$'

CAD2 LABEL BYTE ;LISTA DE PARAMETROS NOMBRE
MAXCAD2 DB 20 ;LONGITUD MAXIMA DE NOMBRE
NAMECA2 DB ? ;NO. DE CARACTERES INTRODUCIDOS
NAMCAD2 DB 21 DUP(' ') ;NOMBRE INTRODUCIDO
PROMC2 DB 'SEGUNDA CADENA?','$'
CAR DB 0
CARM DB 'INTRODUSCA EL CARACTER ','$'
IGUAL DB 'LAS CADENAS SON IGUALES','$'
DIFER DB 'LAS CADENAS SON DIFERENTES','$'
ENCON DB 'SI SE ENCONTRO','$'
NNCON DB 'NO SE ENCONTRO','$'
NAMCAD3 DB 41 DUP (' ') ;CONCATENAR

DATA ENDS

CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
INICIO:
PRINCIPAL PROC NEAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL Q10CLR ;LIMPIAR PANTALLA

A20LOOP:
CALL Q10CLR
MOV DH,00 ;FIJAR CURSOR EN 00,00
MOV DL,00
CALL Q20CURS
B10PRMP PROMC1 ;EXIBIR INDICACION
CALL D10INPT ;PROPORCIONA ENTRADA DEL NOMBRE

MOV DH,01 ;FIJAR CURSOR 01,00
MOV DL,00
CALL Q20CURS
B10PRMP PROMC2
CALL D10INPT1 ;PROPORCIONA LA ENTRADA DEL NOMBRE

MOV DH,02 ;FIJAR CURSOR 02,00
MOV DL,00
CALL Q20CURS
B10PRMP CARM
MOV AH,1 ;INVESTIGAR ESAT INTERRUPCION
INT 21H
MOV CAR,AL
CALL COMPARA
CALL CONCAT
CALL BUSCA
MOV AH,01
INT 21H
CMP AL,27
JE A30
JMP A20LOOP

A30:
MOV AH,4CH
INT 21H
PRINCIPAL ENDP

;ACEPTA ENTRADA NOMBRE

D10INPT PROC NEAR
MOV AH,0AH ;entrada del teclado mediate el bufer
LEA DX,CAD1 ;carga la entrada de cadena
INT 21H
RET
D10INPT ENDP

COMPARA PROC NEAR
MOV DH,03
MOV DL,00
CALL Q20CURS
CLD
MOV CX,20
LEA DI,NAMCAD2
LEA SI,NAMCAD1
REPE CMPSB
JNE G20
B10PRMP IGUAL
JMP G21

G20:
B10PRMP DIFER
G21:
RET
COMPARA ENDP

CONCAT PROC NEAR
MOV DH,04
MOV DL,00
CALL Q20CURS
CLD
MOV CH,00
MOV CL,NAMECA1
LEA DI,NAMCAD3
LEA SI,NAMCAD2
REP MOVSB

MOV CH,00
MOV CL,NAMECA2
LEA SI,NAMCAD2
REP MOVSB

MOV BH,00 ;REMPLAZA EL CARACTER ENTER(0D)
MOV BL,NAMECA1 ;POR EL (07)
ADD BL,NAMECA2
MOV NAMCAD3[BX],07
MOV NAMCAD3[BX+1],'$' ;DELIMITADOR DE IMPRESION
B10PRMP NAMCAD3
RET
CONCAT ENDP

BUSCA PROC NEAR
MOV DH,05
MOV DL,00
CALL Q20CURS
CLD
MOV AL,CAR
MOV CH,00 ;REMPLAZA CARACTER ENTER
MOV CL,NAMECA1
ADD CL,NAMECA2
LEA DI,NAMCAD3
REPNE SCASB ;INVESTIGAR ESTO
JNE G201
B10PRMP ENCON
JMP G211
G201:
B10PRMP NNCON
G211:
RET
BUSCA ENDP

D10INPT1 PROC NEAR
MOV AH,0AH
LEA DX,CAD2 ;ENTRADA
INT 21H
RET
D10INPT1 ENDP

Q10CLR PROC NEAR
MOV AX,0600H
MOV BH,30
MOV CX,0000
MOV DX,184FH
INT 10H
RET
Q10CLR ENDP

Q20CURS PROC NEAR
MOV AH,02H ;PETICION DE FIJAR CURSOR
MOV BH,00 ;PAGINA NO.0
INT 10H
RET
Q20CURS ENDP

CODE ENDS
END INICIO ;FIN DE SEGMENTO DE CODIGO
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