PROGRAMAS EN ASSEMBLER
;EQUIVALENCIAS ASCII - HEXADECIMAL
MSTACK SEGMENT
DB 64 DUP ('MYSTACK_')
MSTACK ENDS
MDATA SEGMENT
ASCII DB 42H ;VALOR ASCII A CONVER TIR EN HEX.
ANSWER DB ?
MDATA ENDS
MCODE SEGMENT 'CODE'
MPROC PROC FAR
ASSUME CS:MCODE,SS:MSTACK,DS:MDATA
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,MDATA
MOV DS,AX
MOV AL,ASCII ;CRGA EL VALOR DE ASCII A AL
SUB AL,30H ;RESTA AL-30H
CMP AL,9 ;COMPARA AL CON 9
JG LETTER ;SI ES MENOR, RESTA (AL-07H)
JMP FIN ;SALTA A FIN Y CARGA EL VALOR DE AL EN ANSWER
LETTER: SUB AL,07H
FIN: MOV ANSWER,AL
RET
MPROC ENDP
MCODE ENDS
END MPROC
;USO DE CADENAS
MSTACK SEGMENT
DB 64 DUP ('MYSTACK_')
MSTACK ENDS
MDATA SEGMENT
BACK DB 1 DUP(''),'___________________________________',3 DUP('') ;2000 DUP
LOGO DB 2 DUP(''),' ',3 DUP('')
DB 2 DUP(''),' ',3 DUP('')
DB 2 DUP(''),' PROGRAMA EN ASSEMBLER ',3 DUP('')
DB 2 DUP(''),' EN LA FLIA 80X86 ',3 DUP('')
DB 2 DUP(''),' ',3 DUP('')
DB 2 DUP(''),'____________________________________',3 DUP('')
MDATA ENDS
MCODE SEGMENT 'CODE'
MPROC PROC FAR
ASSUME CS:MCODE,ES:MDATA,SS:MSTACK
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,MDATA ;CARGA EN AX EL VALOR DE MDATA
MOV ES,AX ;CARGA EN ES EL VALOR DE AX
LEA BP,BACK ;CARGA LA PROMERA DIRECCION DE BACK
MOV DX,0000
MOV AH,1
MOV AL,10 ;10
MOV BL,11111111B
MOV CX,07D0H ;(2000 DECIMAL)
INT 10H ;PIDE EL ACCESO A PANTALLA
LEA BP,LOGO ;CARGA LA PRIMERA DIRECCION DE LOGO.
MOV DH,5 ;MARGEN SUPERIOR
MOV AH,19 ;19
MOV AL,1
MOV BL,01001110B
MOV CX,230H
INT 10H
RET
MPROC ENDP
MCODE ENDS
END MPROC
;PROGRAMA DE HEX A ASCII
MSTACK SEGMENT
DB 64 DUP ('MYSTACK_')
MSTACK ENDS
MDATA SEGMENT
TMPNUM DW ?
TMPCHAR DB 8 DUP (' '),'$'
MDATA ENDS
MCODE SEGMENTE 'CODE'
MPROC PROC FAR
ASSUME CS:MCODE, DS:MDATA, SS:MSTACK
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,MDATA
MOV DS,AX
;PROBLEMA DE SUMA
MOV AX,01234H
ADD AX,02299H
MOV TMPNUM,AX
;VISUALIZA UN REGISTRO DE 16 BITS
MOV CX,04H ;NUMERO DE DIGITOS A COMBERTIR
AGAIN:MOV AX,TMPNUM
AND AX,0FH ;MANTIENE LOS 4 DIGITOS INFERIORES
ADD AL,30H ;COMBIERTE A CODIGO ASCII
CMP AL,07H
ASCII:MOV SI,CX ;PONE EL INDICE =AL CARACTER
MOV TMPCHAR[SI],AL
ROR TMPNUM,1
ROR TMPNUM,1
ROR TMPNUM,1
ROR TMPNUM,1
LOOP AGAIN
;UTILIZA CADENA Y POSICION ACTUAL DEL CURSOR
LEA DX,TMPCHAR
MOV AH,9
INT 21H
RET
MPROC ENDP
MCODE ENDS
END MPROC
; PROGRAMA DE MULTIPLICACION AL CUADRADO Y AL CUBO Y MUESTRA EL RESULTADO EN PANTALLA
MSTACK SEGMENT
DB 64 DUP ('MYSTACK_')
MSTACK ENDS
MDATA SEGMENT
NUM1 DW 1234H
NUM2 DW 00CDH
TMPCHAR DB 5 DUP (' '),'$'
TMPNUM DW ?
ANS1 DW ?
ANS2 DW ?
ANS3 DW ?
MDATA ENDS
MCODE SEGMENT 'CODE'
MPROC PROC FAR
ASSUME CS:MCODE, DS:MDATA, SS:MSTACK
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,MDATA
MOV DS,AX
SUB DX,DX
MOV AX,NUM1
MUL NUM2
MOV WORD PTR ANS1,AX
MOV WORD PTR ANS1+2,DX
MOV BX,AX
MOV TMPNUM,DX
CALL VER
MOV TMPNUM,AX
CALL VER
SUB DX,DX
MOV AX,NUM1
MUL NUM1
MOV WORD PTR ANS2,AX
MOV WORD PTR ANS2+2,DX
MOV TMPNUM,DX
CALL VER
MOV TMPNUM,AX
CALL VER
SUB DX,DX
MOV AX,NUM2
MUL NUM2
MUL NUM2
MOV WORD PTR ANS3,AX
MOV WORD PTR ANS3+2,DX
MOV TMPNUM,DX
CALL VER
MOV TMPNUM,AX
CALL VER
RET
MPROC ENDP
VER PROC
;PROCEDIMIENTO PARA VISUALIZA UN REGISTRO DE 16 BITS
MOV CX,04H ;NUMERO DE DIGITOS A COMBERTIR
AGAIN: MOV AX,TMPNUM
AND AX,0FH ;MANTIENE LOS 4 DIGITOS INFERIORES
ADD AL,30H ;COMBIERTE A CODIGO ASCII
CMP AL,03AH ;COMPARA CON 39
JL ASCII ;SI ES MENOR A 39
ADD AL,07H ;SI NO LE ADICIONA 7H
ASCII: MOV SI,CX ;PONE EL INDICE =AL CARACTER
MOV TMPCHAR[SI],AL
ROR TMPNUM,1
ROR TMPNUM,1
ROR TMPNUM,1
ROR TMPNUM,1
LOOP AGAIN
;UTILIZA CADENA Y POSICION ACTUAL DEL CURSOR
LEA DX,TMPCHAR
MOV AH,9
INT 21H
;INC TMPCHAR
RET
VER ENDP
MCODE ENDS
END MPROC
; MULTIPLICACION POR SUMA REPETIDA MUESTRA EL RESULTADO EN PANTALLA
MSTACK SEGMENT
DB 64 DUP ('MYSTACK_')
MSTACK ENDS
MDATA SEGMENT
NUM1 DB 1H
NUM2 DB 2H
TMPCHAR DB 5 DUP (' '),'$'
TMPNUM DW ?
PRODUCT DW ?
ANS DW ?
MDATA ENDS
MCODE SEGMENT 'CODE'
MPROC PROC FAR
ASSUME CS:MCODE, DS:MDATA, SS:MSTACK
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,MDATA
MOV DS,AX
SUB AX,AX
SUB CX,CX
MOV CL,NUM2
SUB CL,01H
MOV AL,NUM1
AGAIN: ADD AL,NUM1
ADC AH,00H
LOOP AGAIN
MOV PRODUCT,AX
;MOV WORD PTR ANS,AX
;MOV WORD PTR ANS+2,DX
MOV BX,AX
MOV TMPNUM,DX
CALL VER
MOV TMPNUM,AX
CALL VER
RET
MPROC ENDP
VER PROC
;PROCEDIMIENTO PARA VISUALIZA UN REGISTRO DE 16 BITS
MOV CX,04H ;NUMERO DE DIGITOS A COMBERTIR
AGAIN1: MOV AX,TMPNUM
AND AX,0FH ;MANTIENE LOS 4 DIGITOS INFERIORES
ADD AL,30H ;COMBIERTE A CODIGO ASCII
CMP AL,03AH ;COMPARA CON 39
JL ASCII ;SI ES MENOR A 39
ADD AL,07H ;SI NO LE ADICIONA 7H
ASCII: MOV SI,CX ;PONE EL INDICE =AL CARACTER
MOV TMPCHAR[SI],AL
ROR TMPNUM,1
ROR TMPNUM,1
ROR TMPNUM,1
ROR TMPNUM,1
LOOP AGAIN1
;UTILIZA CADENA Y POSICION ACTUAL DEL CURSOR
LEA DX,TMPCHAR
MOV AH,9
INT 21H
;INC TMPCHAR
RET
VER ENDP
MCODE ENDS
END MPROC
No hay comentarios:
Publicar un comentario