Академический Документы
Профессиональный Документы
Культура Документы
Cdigo do programa:
Code_Seg Segment
Assume Cs:Code_Seg, Ds:Data_Seg
Ax, Data_Seg
Mov
Ds, Ax
; Carrega
; Nosso Segmento de Dados
Loop_Texto:
Call Le_Texto
Call Conv_Maiuscula
Call Valida_Texto
Jc
Loop_Texto
Call Imp_Bin
Mov
Int
Ah,4Ch
21h
; retorna ao DOS
Hexa_Bin Endp
Dx, Texto
Loop_Leitura:
Mov
Ah,0Ah
Int
21h
Cmp
Je
Car_Lidos,0
Loop_Leitura
Pop
Dx
Pop
Ax
Ret
Le_Texto Endp
Conv_Maiuscula
Proc Near
Push Ax
Push Bx
Push Cx
Xor
Ch,Ch
Mov
Cl,Car_Lidos
Lea
Bx,String
Loop_Conversao: Mov
Cmp
Jb
Cmp
Ja
; CL = No de Chars Lidos
Al,[Bx]
Al,'a'
Prox_Byte
Al,'z'
Prox_Byte
Sub
Al,20h
Mov
[Bx],Al
; Atualiza Memoria
Prox_Byte:
Inc
Bx
Loop Loop_Conversao
Pop
Cx
Pop
Bx
Pop
Ax
Ret
Conv_Maiuscula
EndP
;------------------------------------------------------------------------;
; Esta Rotina Retorna a Carry Setada Se Houver Algum Erro
;------------------------------------------------------------------------;
Valida_Texto
Proc Near
Push Ax
Push Cx
Mov
Al,String[0]
Cmp
Al,'0'
Jb
Cmp
Ja
; Digito ?
Erro_Digito
Al,'9'
Tenta_Letra
Sub
Al,'0'
Mov
Ah,Al
Jmp
Tenta_Letra:
Segundo_Digito
Cmp
Jb
Cmp
Ja
Al,'A'
Erro_Digito
Al,'F'
Erro_Digito
Sub
Al,'A'-10
; Al = 65-10
Mov
Ah,Al
; Salva Resultado em Ah
Segundo_Digito:
Cmp
Jb
Car_Lidos,2
Fim_Digitos
Mov
Al,String[1]
Cmp
Al,'0'
Jb
Cmp
Ja
Erro_Digito
Al,'9'
Tenta_Letra2
Jmp
Acerta_Num
Cmp
Ja
Al,'0'
Jb
; Digito ?
Sub
Tenta_Letra2:
Cmp
Al,'A'
Erro_Digito
Al,'F'
Erro_Digito
Sub
Acerta_Num:
Al,'A'-10
Mov
Cx,4
; Multiplica Por 16
Shl
Ah,Cl
; NOVA INSTRUCAO
Or
Ah,Al
Mov
Dig_Hexa,Ah
Clc
Jmp
Erro_Digito:
Fim_Valida
Stc
Jmp
Fim_Digitos:
Fim_Valida
Clc
Mov
Fim_Valida:
Dig_Hexa,Al
Pop
Pop
Cx
Ax
Ret
Valida_Texto
Imp_Bin
; Al = 65-10
Endp
Proc Near
Push Ax
Push Bx
; Encerra
Push Cx
Push Dx
Mov
Ah,02
Mov
Bl,Dig_Hexa
Mov
Cx,8
Loop_ImpBin:
Mov
Dl,0
Rcl
Bl,1
; Novas Instrucoes
Adc
Dl,'0'
Int
21h
Loop Loop_ImpBin
Pop
Dx
Pop
Cx
Pop
Bx
Pop
Ax
Ret
Imp_Bin
Endp
Code_Seg Ends
Data_Seg Segment
Car_Lidos Db 0
String
Db 3 Dup(' ')
Dig_Hexa Db ?
Data_Seg Ends
10 Dup('Pilha ')
Stack_Seg Ends
End
Hexa_Bin
Cdigo do programa:
.MODEL SMALL
.STACK 100H
.DATA
MSG DB '**********', 13, 10, '**********',13, 10, '**********',13, 10,
'**********',13, 10, '**********',13, 10, '**********',13, 10, '**********',13, 10,
'**********',13, 10, '**********',13, 10, '**********','$'
.CODE
MAIN PROC
; Inicializa DS
MOV AX,@DATA
MOV DS,AX ;inicializa DS
;
;exibe mensagem
LEA DX,MSG ;carrega o endereo da mensagem
MOV AH,9 ;funo para exibio de string
INT 21H ;executa a funo em AH
;
; Retorna para o DOS
MOV AH,4CH ;funo para retorno ao DOS
INT 21H ;interrupo que executa a funo em AH
MAIN ENDP
END MAIN