Ensamblador - como crear un chat con esamblador

   
Vista:

como crear un chat con esamblador

Publicado por gabriel (1 intervención) el 06/06/2008 00:16:46
necesito ayuda con el siguiente tema tengo que hacer un chat entre dos PCs via puerto serie y estoy algo perdido alguien me puede orientar. Saludos gabriel
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

RE:como crear un chat con esamblador

Publicado por Sándor (3 intervenciones) el 12/11/2008 16:45:56
Dosseg
.Model small
.Data
CHAR_FRAME DB 218, 196, 191, 179, 217, 192, 201, 205, 187, 186, 188, 200
;Indica cual de los dos marcos esta activo.
ACTIVE DB 0
FIRST_COLOR DB ?
SECOND_COLOR DB ?
X DB ?
Y DB ?
CHAR DB ?
ATTRI DB ?
COUNT DB ?

NEW_LINE DB 79 DUP (?) ;Linea a agregar, el primer caracter es el color.
BLANK_LINE DB 79 DUP (32) ;Linea en blaco.
HISTORY_LINES DB 7900 DUP(?) ;Arreglo de lineas del historial.
HISTORY_COUNT DW 0 ;Cantidad de lineas que hay en el historial.
HISTORY_CURSOR DW 0 ;Que linea se esta mostrando en el tope del historial.

;Variables utilizadas por..
TMP_TEXT DB 468 DUP (?)
TMP_TEXT_COUNT DW 0
TMP_TEXT_CHAR DB ?
TMP_TEXT_SCAN DB ?

;Variables que tienen la posicion del cursor.
CURSOR_POS_X DB ?
CURSOR_POS_Y DB ?

;Variables que se utilizan en EL PROC SAVE_TO_DISK.
FILE_NAME DB 'C:HISTORY.txt', 0
TMP_LINE DB 80 DUP (?)

;Variables utilizadas pora almacenar lo que se quiere agregar al historial.
TMP_BUFFER DB 468 DUP (?)
TMP_BUFFER_COUNT DW 0
COLOR_OF_HISTORY DB ?

;Variables donde se almacena los caracteres que se quieren sacar y los que se han recibido por el 8250.
BUFFER_OUT DB 512 DUP (?)
BUFFER_OUT_INDEX DW 0
BUFFER_OUT_COUNT DW 0

BUFFER_IN DB 512 DUP(?)
BUFFER_IN_COUNT DW 0
.CODE
CHAT PROC NEAR

MOV AX,@DATA
MOV DS, AX
MOV ES, AX
;Poner el primer caracter de la linea en blanco con el color.
MOV BLANK_LINE, 23
;Inicializar el 8250.
CALL INIT8250
CALL PAINT_FRAME
CALL WRITE

MOV AX,4C00H ; SENTENCIA PARA FINALIZAR
INT 21H

CHAT ENDP

;Inicializar el 8250.(Averiguar ke hace)
INIT8250 PROC
PUSH DX
PUSH AX

MOV DX, 3FBH
MOV AL, 80H
OUT DX, AL
MOV DX, 3F8H
MOV AL, 60H
OUT DX, AL
MOV DX, 3F9H
MOV AL, 0
OUT DX, AL

MOV DX, 3FBH
MOV AL, 0BH
OUT DX, AL

MOV DX, 3FCH
MOV AL, 13H
OUT DX, AL

MOV DX, 3F9H
MOV AL, 0
OUT DX, AL

POP AX
POP DX
RET
INIT8250 ENDP

;Pone la posicion del cursor en las cordenadas X,Y
PUTCHAR PROC NEAR

PUSH AX
PUSH BX
PUSH CX
PUSH DX

;Colocar el cursor en la posicion especificada.
MOV AH, 02H
MOV BH, 0
MOV DH, Y
MOV DL, X
INT 10H

;Imprimir el caracter.
MOV AH, 09H
MOV AL, CHAR
MOV BH, 0
MOV BL, ATTRI
MOV CL, COUNT
INT 10H

POP DX
POP CX
POP BX
POP AX
RET
PUTCHAR ENDP

PAINT_FRAME PROC NEAR

PUSH AX

MOV ACTIVE, 1

;Hacer frame superior.
MOV X, 0
MOV Y, 0
MOV AL, CHAR_FRAME[0]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV Y, 0
MOV AL, CHAR_FRAME[1]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV Y, 0
MOV AL, CHAR_FRAME[2]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV CL, 1
COMIENZO1: MOV X, 0
MOV Y, CL
MOV AL, CHAR_FRAME[3]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV CHAR, 32
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV AL, CHAR_FRAME[3]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

INC CL
CMP CL,15
JNE COMIENZO1

MOV X,0
MOV Y, 15
MOV AL, CHAR_FRAME[5]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV Y, 15
MOV AL, CHAR_FRAME[1]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV Y, 15
MOV AL, CHAR_FRAME[4]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

;Hacer frame inferior.
MOV X, 0
MOV Y, 16
MOV AL, CHAR_FRAME[6]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV AL, CHAR_FRAME[7]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV AL, CHAR_FRAME[8]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:como crear un chat con esamblador

Publicado por Sándor (3 intervenciones) el 12/11/2008 16:50:19
Dosseg
.Model small
.Data
CHAR_FRAME DB 218, 196, 191, 179, 217, 192, 201, 205, 187, 186, 188, 200
;Indica cual de los dos marcos esta activo.
ACTIVE DB 0
FIRST_COLOR DB ?
SECOND_COLOR DB ?
X DB ?
Y DB ?
CHAR DB ?
ATTRI DB ?
COUNT DB ?

NEW_LINE DB 79 DUP (?) ;Linea a agregar, el primer caracter es el color.
BLANK_LINE DB 79 DUP (32) ;Linea en blaco.
HISTORY_LINES DB 7900 DUP(?) ;Arreglo de lineas del historial.
HISTORY_COUNT DW 0 ;Cantidad de lineas que hay en el historial.
HISTORY_CURSOR DW 0 ;Que linea se esta mostrando en el tope del historial.

;Variables utilizadas por..
TMP_TEXT DB 468 DUP (?)
TMP_TEXT_COUNT DW 0
TMP_TEXT_CHAR DB ?
TMP_TEXT_SCAN DB ?

;Variables que tienen la posicion del cursor.
CURSOR_POS_X DB ?
CURSOR_POS_Y DB ?

;Variables que se utilizan en EL PROC SAVE_TO_DISK.
FILE_NAME DB 'C:HISTORY.txt', 0
TMP_LINE DB 80 DUP (?)

;Variables utilizadas pora almacenar lo que se quiere agregar al historial.
TMP_BUFFER DB 468 DUP (?)
TMP_BUFFER_COUNT DW 0
COLOR_OF_HISTORY DB ?

;Variables donde se almacena los caracteres que se quieren sacar y los que se han recibido por el 8250.
BUFFER_OUT DB 512 DUP (?)
BUFFER_OUT_INDEX DW 0
BUFFER_OUT_COUNT DW 0

BUFFER_IN DB 512 DUP(?)
BUFFER_IN_COUNT DW 0
.CODE
CHAT PROC NEAR

MOV AX,@DATA
MOV DS, AX
MOV ES, AX
;Poner el primer caracter de la linea en blanco con el color.
MOV BLANK_LINE, 23
;Inicializar el 8250.
CALL INIT8250
CALL PAINT_FRAME
CALL WRITE

MOV AX,4C00H ; SENTENCIA PARA FINALIZAR
INT 21H

CHAT ENDP

;Inicializar el 8250.(Averiguar ke hace)
INIT8250 PROC
PUSH DX
PUSH AX

MOV DX, 3FBH
MOV AL, 80H
OUT DX, AL
MOV DX, 3F8H
MOV AL, 60H
OUT DX, AL
MOV DX, 3F9H
MOV AL, 0
OUT DX, AL

MOV DX, 3FBH
MOV AL, 0BH
OUT DX, AL

MOV DX, 3FCH
MOV AL, 13H
OUT DX, AL

MOV DX, 3F9H
MOV AL, 0
OUT DX, AL

POP AX
POP DX
RET
INIT8250 ENDP

;Pone la posicion del cursor en las cordenadas X,Y
PUTCHAR PROC NEAR

PUSH AX
PUSH BX
PUSH CX
PUSH DX

;Colocar el cursor en la posicion especificada.
MOV AH, 02H
MOV BH, 0
MOV DH, Y
MOV DL, X
INT 10H

;Imprimir el caracter.
MOV AH, 09H
MOV AL, CHAR
MOV BH, 0
MOV BL, ATTRI
MOV CL, COUNT
INT 10H

POP DX
POP CX
POP BX
POP AX
RET
PUTCHAR ENDP

PAINT_FRAME PROC NEAR

PUSH AX

MOV ACTIVE, 1

;Hacer frame superior.
MOV X, 0
MOV Y, 0
MOV AL, CHAR_FRAME[0]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV Y, 0
MOV AL, CHAR_FRAME[1]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV Y, 0
MOV AL, CHAR_FRAME[2]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV CL, 1
COMIENZO1: MOV X, 0
MOV Y, CL
MOV AL, CHAR_FRAME[3]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV CHAR, 32
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV AL, CHAR_FRAME[3]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

INC CL
CMP CL,15
JNE COMIENZO1

MOV X,0
MOV Y, 15
MOV AL, CHAR_FRAME[5]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV Y, 15
MOV AL, CHAR_FRAME[1]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV Y, 15
MOV AL, CHAR_FRAME[4]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

;Hacer frame inferior.
MOV X, 0
MOV Y, 16
MOV AL, CHAR_FRAME[6]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV AL, CHAR_FRAME[7]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV AL, CHAR_FRAME[8]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:como crear un chat con esamblador

Publicado por Sándor (3 intervenciones) el 12/11/2008 16:51:04
Dosseg
.Model small
.Data
CHAR_FRAME DB 218, 196, 191, 179, 217, 192, 201, 205, 187, 186, 188, 200
;Indica cual de los dos marcos esta activo.
ACTIVE DB 0
FIRST_COLOR DB ?
SECOND_COLOR DB ?
X DB ?
Y DB ?
CHAR DB ?
ATTRI DB ?
COUNT DB ?

NEW_LINE DB 79 DUP (?) ;Linea a agregar, el primer caracter es el color.
BLANK_LINE DB 79 DUP (32) ;Linea en blaco.
HISTORY_LINES DB 7900 DUP(?) ;Arreglo de lineas del historial.
HISTORY_COUNT DW 0 ;Cantidad de lineas que hay en el historial.
HISTORY_CURSOR DW 0 ;Que linea se esta mostrando en el tope del historial.

;Variables utilizadas por..
TMP_TEXT DB 468 DUP (?)
TMP_TEXT_COUNT DW 0
TMP_TEXT_CHAR DB ?
TMP_TEXT_SCAN DB ?

;Variables que tienen la posicion del cursor.
CURSOR_POS_X DB ?
CURSOR_POS_Y DB ?

;Variables que se utilizan en EL PROC SAVE_TO_DISK.
FILE_NAME DB 'C:HISTORY.txt', 0
TMP_LINE DB 80 DUP (?)

;Variables utilizadas pora almacenar lo que se quiere agregar al historial.
TMP_BUFFER DB 468 DUP (?)
TMP_BUFFER_COUNT DW 0
COLOR_OF_HISTORY DB ?

;Variables donde se almacena los caracteres que se quieren sacar y los que se han recibido por el 8250.
BUFFER_OUT DB 512 DUP (?)
BUFFER_OUT_INDEX DW 0
BUFFER_OUT_COUNT DW 0

BUFFER_IN DB 512 DUP(?)
BUFFER_IN_COUNT DW 0
.CODE
CHAT PROC NEAR

MOV AX,@DATA
MOV DS, AX
MOV ES, AX
;Poner el primer caracter de la linea en blanco con el color.
MOV BLANK_LINE, 23
;Inicializar el 8250.
CALL INIT8250
CALL PAINT_FRAME
CALL WRITE

MOV AX,4C00H ; SENTENCIA PARA FINALIZAR
INT 21H

CHAT ENDP

;Inicializar el 8250.(Averiguar ke hace)
INIT8250 PROC
PUSH DX
PUSH AX

MOV DX, 3FBH
MOV AL, 80H
OUT DX, AL
MOV DX, 3F8H
MOV AL, 60H
OUT DX, AL
MOV DX, 3F9H
MOV AL, 0
OUT DX, AL

MOV DX, 3FBH
MOV AL, 0BH
OUT DX, AL

MOV DX, 3FCH
MOV AL, 13H
OUT DX, AL

MOV DX, 3F9H
MOV AL, 0
OUT DX, AL

POP AX
POP DX
RET
INIT8250 ENDP

;Pone la posicion del cursor en las cordenadas X,Y
PUTCHAR PROC NEAR

PUSH AX
PUSH BX
PUSH CX
PUSH DX

;Colocar el cursor en la posicion especificada.
MOV AH, 02H
MOV BH, 0
MOV DH, Y
MOV DL, X
INT 10H

;Imprimir el caracter.
MOV AH, 09H
MOV AL, CHAR
MOV BH, 0
MOV BL, ATTRI
MOV CL, COUNT
INT 10H

POP DX
POP CX
POP BX
POP AX
RET
PUTCHAR ENDP

PAINT_FRAME PROC NEAR

PUSH AX

MOV ACTIVE, 1

;Hacer frame superior.
MOV X, 0
MOV Y, 0
MOV AL, CHAR_FRAME[0]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV Y, 0
MOV AL, CHAR_FRAME[1]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV Y, 0
MOV AL, CHAR_FRAME[2]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV CL, 1
COMIENZO1: MOV X, 0
MOV Y, CL
MOV AL, CHAR_FRAME[3]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV CHAR, 32
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV AL, CHAR_FRAME[3]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

INC CL
CMP CL,15
JNE COMIENZO1

MOV X,0
MOV Y, 15
MOV AL, CHAR_FRAME[5]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV Y, 15
MOV AL, CHAR_FRAME[1]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV Y, 15
MOV AL, CHAR_FRAME[4]
MOV CHAR, AL
MOV AL, 24
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

;Hacer frame inferior.
MOV X, 0
MOV Y, 16
MOV AL, CHAR_FRAME[6]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR

MOV X, 1
MOV AL, CHAR_FRAME[7]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 78
CALL PUTCHAR

MOV X, 79
MOV AL, CHAR_FRAME[8]
MOV CHAR, AL
MOV AL, 23
MOV ATTRI, AL
MOV COUNT, 1
CALL PUTCHAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:como crear un chat con esamblador

Publicado por Ernesto (1 intervención) el 05/03/2013 19:00:04
Al parecer tu post está incompleto (quizás por la extensión del mismo) podrías subir la otra parte del código por aparte? Me sería de gran ayuda! gracias..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar