8. Captura e impresión de 3 cadenas
TECLADO EQU 8 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H BIOS EQU 10H TAB EQU 09H BELL EQU 07H CR EQU 13 LF EQU 10 DATOS SEGMENT NOMBRE DB 30 DUP(32),"$" DIR DB 30 DUP(32),"$" TLF DB 15 DUP(32),"$" MENS1 DB "NOMBRE: $" MENS2 DB "DIRECCION: $" MENS3 DB "TELEFONO: $" ENTERR DB CR,LF,"$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP("PILA") PILA ENDS CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA INICIO: MOV AX,DATOS MOV DS,AX CALL MODO_DE_VIDEO MOV DX,OFFSET MENS1 CALL ESCRIBE MOV SI,OFFSET NOMBRE MOV CX,8 CALL PEDIR CALL SALTO_DE_LINEA MOV DX,OFFSET MENS2 CALL ESCRIBE MOV SI,OFFSET DIR MOV CX,8 CALL PEDIR CALL SALTO_DE_LINEA MOV DX,OFFSET MENS3 CALL ESCRIBE MOV SI,OFFSET TLF MOV CX,10 CALL PEDIR CALL SALTO_DE_LINEA CALL ESCRIBE CALL ESCRIBE CALL ESCRIBE MOV DX,OFFSET NOMBRE CALL ESCRIBE CALL SALTO_DE_LINEA MOV DX,OFFSET DIR CALL ESCRIBE CALL SALTO_DE_LINEA MOV DX,OFFSET TLF CALL ESCRIBE CALL SALTO_DE_LINEA CALL SALIR PEDIR PROC NEAR BUCLE: MOV AH,TECLADO INT DOS MOV[SI],AL MOV AH,2 MOV DL,AL INT DOS INC SI LOOPNZ BUCLE RET PEDIR ENDP ESCRIBE PROC NEAR MOV AH,IMPRIMIR INT DOS RET ESCRIBE ENDP SALTO_DE_LINEA PROC NEAR MOV DX,OFFSET ENTERR CALL ESCRIBE RET SALTO_DE_LINEA ENDP MODO_DE_VIDEO PROC NEAR MOV AX,3 INT BIOS RET MODO_DE_VIDEO ENDP SALIR PROC NEAR MOV AX,FIN INT DOS RET SALIR ENDP CODIGO ENDS END INICIO
9. Colores en un mensaje
TECLADO EQU 8 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H BIOS EQU 10H TAB EQU 09H BELL EQU 07H CR EQU 13 LF EQU 10 DATOS SEGMENT NOMBRE DB 30 DUP(32),"$" DIR DB 30 DUP(32),"$" TLF DB 15 DUP(32),"$" MENS1 DB "NOMBRE: $" MENS2 DB "DIRECCION: $" MENS3 DB "TELEFONO: $" ENTERR DB CR,LF,"$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP("PILA") PILA ENDS CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA INICIO: MOV AX,DATOS MOV DS,AX CALL MODO_DE_VIDEO MOV DX,OFFSET MENS1 CALL ESCRIBE MOV SI,OFFSET NOMBRE MOV CX,8 CALL PEDIR CALL SALTO_DE_LINEA MOV DX,OFFSET MENS2 CALL ESCRIBE MOV SI,OFFSET DIR MOV CX,8 CALL PEDIR CALL SALTO_DE_LINEA MOV DX,OFFSET MENS3 CALL ESCRIBE MOV SI,OFFSET TLF MOV CX,10 CALL PEDIR CALL SALTO_DE_LINEA CALL ESCRIBE CALL ESCRIBE CALL ESCRIBE MOV DX,OFFSET NOMBRE CALL ESCRIBE CALL SALTO_DE_LINEA MOV DX,OFFSET DIR CALL ESCRIBE CALL SALTO_DE_LINEA MOV DX,OFFSET TLF CALL ESCRIBE CALL SALTO_DE_LINEA CALL SALIR PEDIR PROC NEAR BUCLE: MOV AH,TECLADO INT DOS MOV[SI],AL MOV AH,2 MOV DL,AL INT DOS INC SI LOOPNZ BUCLE RET PEDIR ENDP ESCRIBE PROC NEAR MOV AH,IMPRIMIR INT DOS RET ESCRIBE ENDP SALTO_DE_LINEA PROC NEAR MOV DX,OFFSET ENTERR CALL ESCRIBE RET SALTO_DE_LINEA ENDP MODO_DE_VIDEO PROC NEAR MOV AX,3 INT BIOS RET MODO_DE_VIDEO ENDP SALIR PROC NEAR MOV AX,FIN INT DOS RET SALIR ENDP CODIGO ENDS END INICIO
10. Impresión de un valor binario dado
CR EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H TAB EQU 09H BELL EQU 07H DATOS SEGMENT ENCABEZADO DB 13,10,13,TAB,TAB, "============================" DB 13,10,13,TAB,TAB," PROGRAMA QUE IMPRIME UN VALOR BINARIO" DB 13,10,13,TAB,TAB,"====================================",13,10,"$" VALOR_ASCII DB '0101010110',"$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP("0") PILA ENDS CODIGO SEGMENT ASCI PROC NEAR ASSUME CS:CODIGO, DS:DATOS, SS:PILA MOV AX,DATOS MOV DS,AX LEA DX,ENCABEZADO CALL ESCRIBE LEA DX, VALOR_ASCII CALL ESCRIBE CALL SALIR ASCI ENDP ESCRIBE PROC MOV AH,9 INT 21H RET ESCRIBE ENDP SALIR PROC NEAR MOV AX,FIN INT DOS RET SALIR ENDS CODIGO ENDS END ASCI
11. Impresión de valores numericos (decimales y hexadecimales)
CR EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H TAB EQU 09H BELL EQU 07H DATOS SEGMENT ENCABEZADO DB 13,10,13,TAB,TAB,"===============================" DB 13,10,13,TAB,TAB,"PROGRAMA QUE IMPRIME VALORES NUMERICOS DEC Y EXA 91.3 XD" DB 13,10,13,TAB,TAB,"================================",13,10,"$" VALOR_1 DW 41D,"$" VALOR_2 DW 42D,"$" VALOR_3 DW 43D,"$" VALOR_4 DW 44D,"$" VALOR_5 DW 45D,"$" VALOR_6 DW 46,"$" VALOR_7 DW 47,"$" VALOR_8 DW 48,"$" VALOR_9 DW 49,"$" VALOR_10 DW 50,"$" VALOR_11 DW 31H,"$" VALOR_12 DW 32H,"$" VALOR_13 DW 33H,"$" VALOR_14 DW 34H,"$" VALOR_15 DW 35H,"$" VALOR_16 DW 36H,"$" VALOR_17 DW 37H,"$" VALOR_18 DW 38H,"$" VALOR_19 DW 39H,"$" VALOR_20 DW 40H,"$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP ('0') PILA ENDS CODIGO SEGMENT EXA PROC NEAR ASSUME CS:CODIGO,DS:DATOS,SS:PILA MOV AX,DATOS MOV DS,AX LEA DX,ENCABEZADO CALL ESCRIBE LEA DX,VALOR_1 CALL ESCRIBE LEA DX,VALOR_2 CALL ESCRIBE LEA DX,VALOR_3 CALL ESCRIBE LEA DX,VALOR_4 CALL ESCRIBE LEA DX,VALOR_5 CALL ESCRIBE LEA DX,VALOR_6 CALL ESCRIBE LEA DX,VALOR_7 CALL ESCRIBE LEA DX,VALOR_8 CALL ESCRIBE LEA DX,VALOR_9 CALL ESCRIBE LEA DX,VALOR_10 CALL ESCRIBE LEA DX,VALOR_11 CALL ESCRIBE LEA DX,VALOR_12 CALL ESCRIBE LEA DX,VALOR_13 CALL ESCRIBE LEA DX,VALOR_14 CALL ESCRIBE LEA DX,VALOR_15 CALL ESCRIBE LEA DX,VALOR_16 CALL ESCRIBE LEA DX,VALOR_17 CALL ESCRIBE LEA DX,VALOR_18 CALL ESCRIBE LEA DX,VALOR_19 CALL ESCRIBE LEA DX,VALOR_20 CALL ESCRIBE CALL SALIR EXA ENDP ESCRIBE PROC MOV AH,9 INT 21H RET ESCRIBE ENDP SALIR PROC NEAR MOV AX,FIN INT DOS RET SALIR ENDP CODIGO ENDS END EXA
12. Conversión de letras en ASCII a Binario
CR EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H TAB EQU 09H DATOS SEGMENT ASCII DB 'A','B','C','D','E','F','G','H' ESPACIO DB CR,LF,"$" BINARIO DB 64 DUP (?),"$" MENSAJE1 DB CR,LF,TAB,"ANTES DE LA CONVERSION: ","$" MENSAJE2 DB CR,LF,TAB,"DESPUES DE LA CONVERSION: ","$" DATOS ENDS PILA SEGMENT STACK 'STACK' DW 128 DUP('P') PILA ENDS CODIGO SEGMENT CONV PROC FAR ASSUME CS:CODIGO,SS:PILA,DS:DATOS MOV AX,DATOS MOV DS,AX LEA DX,MENSAJE1 CALL ESCRIBE LEA DX,ESPACIO CALL ESCRIBE LEA DX,ASCII CALL ESCRIBE LEA DX,ESPACIO CALL ESCRIBE LEA DX,BINARIO CALL ESCRIBE LEA DX,ESPACIO CALL ESCRIBE LEA SI,ASCII LEA DI,BINARIO CALL ASCII2BIN LEA DX,MENSAJE2 CALL ESCRIBE LEA DX,ESPACIO CALL ESCRIBE LEA DX,ASCII CALL ESCRIBE LEA DX,ESPACIO CALL ESCRIBE LEA DX,BINARIO CALL ESCRIBE LEA DX,ESPACIO CALL ESCRIBE CALL SALIR CONV ENDP ASCII2BIN PROC NEAR XOR AX,AX MOV CX,8 ASCII1: MOV AL,[SI] PUSH CX MOV CX,8 LOOP_SHIFT: SHL AL,1 JC BIN_UNO MOV [DI],BYTE PTR '0' JMP CICLO_SHIFT BIN_UNO: MOV [DI],BYTE PTR '1' CICLO_SHIFT: INC DI LOOP LOOP_SHIFT POP CX INC SI LOOP ASCII1 RET ASCII2BIN ENDP ESCRIBE PROC MOV AH,IMPRIMIR INT DOS RET ESCRIBE ENDP SALIR PROC NEAR MOV AX,FIN INT DOS SALIR ENDP CODIGO ENDS END CONV
13. Programa de impresión de números en hexadecimal
CR EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H TAB EQU 09H DATOS SEGMENT ENCABEZADO DB 13,10,13,10,TAB,TAB,"======================================================" DB 13,10,13,TAB,TAB,"PROGRAMA QUE IMPRIME NUMEROS EN HEXADECIMAL" DB 13,10,13,TAB,TAB,"====================================================================",13,10,13,10,"$" DATOS ENDS PILA SEGMENT STACK 'STACK' DB 64 DUP('0') PILA ENDS CODIGO SEGMENT CEXA PROC NEAR ASSUME CS:CODIGO,SS:PILA,DS:DATOS ORG 100H MOV AX,DATOS MOV DS,AX LEA DX,ENCABEZADO CALL ESCRIBE MOV CX,200H XOR DX,DX CICLO: CALL ESCRIBE_HEX CALL ESCRIBE_CRLF INC DX LOOP CICLO CALL SALIR CEXA ENDP ESCRIBE_HEX PROC NEAR PUSH AX PUSH CX PUSH DX OTRO_DIGITO: PUSH CX MOV CL,4 ROL DX,CL CALL ESCRIBE_DIGITO_HEX POP CX LOOP OTRO_DIGITO POP DX POP CX POP AX RET ESCRIBE_HEX ENDP ESCRIBE_DIGITO_HEX PROC NEAR PUSH AX PUSH DX AND DX,0FH CMP DL,10 JAE ES_MAYOR_A_10 ADD DL,48 JMP IMPRIME_DIGITO ES_MAYOR_A_10: ADD DL,55 IMPRIME_DIGITO: MOV AH,2 INT 21H POP DX POP AX RET ESCRIBE_DIGITO_HEX ENDP ESCRIBE_CRLF PROC NEAR PUSH AX PUSH DX MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H POP DX POP AX RET ESCRIBE_CRLF ENDP ESCRIBE PROC MOV AH,9 INT 21H RET ESCRIBE ENDP SALIR PROC NEAR MOV AX,FIN INT DOS RET SALIR ENDP CODIGO ENDS END CEXA
14. Conversión de ASCII a Binario (Dado por el programador)
CR EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H TAB EQU 09H BELL EQU 07H DATOS SEGMENT ENCABEZADO DB 13,10,13,10,TAB,TAB,"=======================================================" DB 13,10,13,TAB,TAB,"PROGRAMA QUE CONVIERTE UN NUMERO ASCII A BINARIO" DB 13,10,13,TAB,TAB,"=====================================================================",13,10,"$" VALOR_ASCII DB '33',"$" VALOR_BINARIO DW 0,"$" LONGITUD_ASCII DW 2,"$" POTENCIA_10 DW 00000001B,"$" DATOS ENDS PILA SEGMENT STACK DB 64 DUP('0') PILA ENDS CODIGO SEGMENT POTE PROC NEAR ASSUME CS:CODIGO,DS:DATOS,SS:PILA MOV AX,DATOS MOV DS,AX LEA DX,VALOR_ASCII CALL ESCRIBE MOV BX,00001010B MOV CX,LONGITUD_ASCII LEA SI,VALOR_ASCII+1 ETIQUETA_1: MOV AL,[SI] AND AX,000FH MUL POTENCIA_10 ADD VALOR_BINARIO,AX MOV AX,POTENCIA_10 MUL BX MOV POTENCIA_10,AX DEC SI LOOP ETIQUETA_1 LEA DX,ENCABEZADO CALL ESCRIBE LEA DX,VALOR_BINARIO CALL ESCRIBE CALL SALIR POTE ENDP ESCRIBE PROC MOV AH,9 INT 21H RET ESCRIBE ENDP SALIR PROC NEAR MOV AX,FIN INT DOS RET SALIR ENDP CODIGO ENDS END POTE
15. Conversión de ASCII a Binario(Capturado)
EQU 13 LF EQU 10 IMPRIMIR EQU 9 FIN EQU 4C00H DOS EQU 21H TAB EQU 09H BELL EQU 07H TECLADO EQU 8 DATOS SEGMENT NUMERO_BINARIO DW 0,"$" NUMERO_ASCII DB 6,0,6 DUP (?),"$" M_ENCABEZADO DB 13,10,13,10,TAB,"=================================================" DB 13,10,13,TAB,"PROGRAMA QUE CONVIERTE UN NUMERO ASCII (CAPTURADO) A BINARIO" DB 13,10,13,TAB,"=================================================================",13,10,"$" M_ESPACIO DB 13,10,13,10,13,10,13,10,13,10,13,10,"$" M_ASCII_ASCII DB 13,10,13,10,"NUMERO ASCII IMPRESO NORMALMENTE COMO LO HACE UNA PC (EN ASCII)",13,10,"$" M_BINARIO_ASCII DB 13,10,13,10,"NUMERO BINARIO (YA CONVERTIDO), ",13,10,"IMPRESO NORMALMENTE COMO LO HACE UNA PC (EN ASCII)","$" Potencia DW 001H,000AH,0064H,03E8H,2710H,"$" DATOS ENDS PILA SEGMENT STACK 'STACK' DW 128 DUP('P') PILA ENDS CODIGO SEGMENT CAPT PROC NEAR ASSUME CS:CODIGO,SS:PILA,DS:DATOS MOV AX,DATOS MOV DS,AX MOV AH,0AH MOV DX,Offset NUMERO_ASCII INT 21H MOV DI,OFFSET NUMERO_ASCII + 1 MOV CX,[DI] MOV SI,OFFSET NUMERO_ASCII + 2 XOR CH,CH MOV DI,OFFSET POTENCIA DEC SI ADD SI,CX XOR BX,BX STD CICLO: LODSB SUB AL,30H CBW MOV DX,[DI] MUL DX ADD DI,2 ADD BX,AX LOOP CICLO MOV NUMERO_BINARIO,BX LEA DX,M_ENCABEZADO CALL ESCRIBE LEA DX,M_ASCII_ASCII CALL ESCRIBE LEA DX,NUMERO_ASCII - 1 CALL ESCRIBE LEA DX,M_BINARIO_ASCII CALL ESCRIBE LEA DX,NUMERO_BINARIO CALL ESCRIBE LEA DX,M_ESPACIO CALL ESCRIBE CALL SALIR CAPT ENDP ESCRIBE PROC MOV AH,IMPRIMIR INT DOS RET ESCRIBE ENDP SALIR PROC NEAR MOV AX,FIN INT DOS SALIR ENDP CODIGO ENDS END CAPT
Comments
Post a Comment