SEJAM BEM VINDOS!!!

Este blog é destinado a todos que interessam em aprender e compartilhar conhecimento sobre desenvolvimento de aplicativos, linguagens de programação, banco de dados, entre outros.

O que é OCX?

Abreviatura de OLE custom control. Módulo de software que se baseia nas tecnologias OLE e COM que, quando chamado por uma aplicação, produz um controle que acrescenta algum recurso interessante à aplicação. A tecnologia OCX é independente de plataforma, opera em sistemas operacionais de 16 e 32 bits e pode ser usada com várias aplicações. É a sucessora da tecnologia VBX (Visual Basic custom control), que aceitava apenas aplicações do Visual Basic, e constitui a base dos controles ActiveX. Os controles OCX podem ser criados em diversas linguagens, embora o Visual C++ seja a linguagem mais utilizada. Desenvolvida pela Microsoft, a tecnologia OCX é tratada na especificação OCX 96 (1996 OLE Controls specification). Pesquise também ActiveX controls (controles ActiveX); COM (definição 2); control (controle – definição 2); OLE; VBX; Visual Basic.

Fonte: http://o-que-significa.blogspot.com.br/2011/06/ocx.html#.UxivZPldXik

sexta-feira, 16 de outubro de 2009

Exemplos de códigos em Assembly

_Primeiro exemplo

- a0100
297D:0100 MOV AX,0006 ;Põe o valor 0006 no registrador AX
297D:0103 MOV BX,0004 ;Põe o valor 0004 no registrador BX
297D:0106 ADD AX,BX ;Adiciona BX ao conteúdo de AX
297D:0108 INT 20 ;Finaliza o Programa

**A única coisa que este programa faz é salvar dois valores em dois registradores e adicionar o valor de um ao outro.

_Segundo exemplo

- a100
0C1B:0100 jmp 125 ;Salta para o endereço 125h
0C1B:0102 [Enter]
- e 102 'Hello, How are you ?' 0d 0a '$'
- a125
0C1B:0125 MOV DX,0102 ;Copia a string para registrador DX
0C1B:0128 MOV CX,000F ;Quantas vezes a string será mostrada
0C1B:012B MOV AH,09 ;Copia o valor 09 para registrador AH
0C1B:012D INT 21 ;Mostra a string
0C1B:012F DEC CX ;Subtrai 1 de CX
0C1B:0130 JCXZ 0134 ;Se CX é igual a 0 salta para o endereço 0134
0C1B:0132 JMP 012D ;Salta ao endereço 012D
0C1B:0134 INT 20 ;Finaliza o programa

**Este programa mostra 15 vezes na tela a string de caracteres.

_Terceiro exemplo

-a100
297D:0100 MOV AH,01 ;Função para mudar o cursor
297D:0102 MOV CX,0007 ;Formata o cursor
297D:0105 INT 10 ;Chama interrupção do BIOS
297D:0107 INT 20 ;Finaliza o programa

**Este programa muda o formato do cursor.

_Quarto exemplo

-a100
297D:0100 MOV AH,01 ;Função 1 (lê caractere do teclado)
297D:0102 INT 21 ;Chama interrupção do DOS
297D:0104 CMP AL,0D ;Compara se o caractere lido é um ENTER
297D:0106 JNZ 0100 ;Se não é, lê um outro caractere
297D:0108 MOV AH,02 ;Função 2 (escreve um caractere na tela)
297D:010A MOV DL,AL ;Character to write on AL
297D:010C INT 21 ;Chama interrupção do DOS
297D:010E INT 20 ;Finaliza o programa

**Este programa usa a interrupção 21h do DOS. Usa duas funções da mesma: a primeira lê um caractere do teclado (função 1) e a segundo escreve um caractere na tela. O programa lê caracteres do teclado até encontrar um ENTER.

_Quinto exemplo

-a100
297D:0100 MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:0102 MOV CX,0008 ;Põe o valor 0008 no registrador CX
297D:0105 MOV DL,00 ;Põe o valor 00 no registrador DL
297D:0107 RCL BL,1 ;Rotaciona o byte em BL um bit para a esquerda
297D:0109 ADC DL,30 ;Converte o registrador de flag para 1
297D:010C INT 21 ;Chama interrupção do DOS
297D:010E LOOP 0105 ;Salta se CX > 0 para o endereço 0105
297D:0110 INT 20 ;Finaliza o programa

**Este programa mostra na tela um número binário através de um ciclo condicional (LOOP) usando a rotação do byte.

_Sexto exemplo

-a100
297D:0100 MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:0102 MOV DL,BL ;Põe o valor de BL em DL
297D:0104 ADD DL,30 ;Adiciona o valor 30 a DL
297D:0107 CMP DL,3A ;Compara 3A com conteúdo de DL sem afetá-lo
;apenas modifica o estado do flag de carry
297D:010A JL 010F ;salta ao endereço 010f, se for menor
297D:010C ADD DL,07 ;Adiciona o valor 07 a DL
297D:010F INT 21 ;Chama interrupção do DOS
297D:0111 INT 20 ;Finaliza o programa

**Este programa imprime um valor zero em dígitos hexadecimais.

_Sétimo exemplo

-a100
297D:0100 MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:0102 MOV DL,BL ;Põe o valor de BL em DL
297D:0104 AND DL,0F ;Transporta fazendo AND dos números bit a bit
297D:0107 ADD DL,30 ;Adiciona 30 a Dl
297D:010A CMP DL,3A ;Compara Dl com 3A
297D:010D JL 0112 ;Salta ao endereço 0112, se menor
297D:010F ADD DL,07 ;Adiciona 07 a DL
297D:0112 INT 21 ;Chama interrupção do DOS
297D:0114 INT 20 ;Finaliza o programa

**Este programa é usado para imprimir dois dígitos hexadecimais.

Oitavo exemplo
-a100
297D:0100 MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:0102 MOV DL,BL ;Põe o valor de BL em DL
297D:0104 MOV CL,04 ;Põe o valor 04 em CL
297D:0106 SHR DL,CL ;Desloca os 4 bits mais altos do número
;ao nibble mais à direita
297D:0108 ADD DL,30 ;Adiciona 30 a DL
297D:010B CMP DL,3A ;Compara Dl com 3A
297D:010E JL 0113 ;Salta ao endereço 0113, se menor
297D:0110 ADD DL,07 ;Adiciona 07 a DL
297D:0113 INT 21 ;Chama interrupção do DOS
297D:0115 INT 20 ;Finaliza o programa

**Este programa imprime o primeiro de dois dígitos hexadecimais.

_Nono exemplo

-a100
297D:0100 MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:0102 MOV DL,BL ;Põe o valor de BL em DL
297D:0104 MOV CL,04 ;Põe o valor 04 em CL
297D:0106 SHR DL,CL ;Desloca os 4 bits mais altos do número
;ao nibble mais à direita
297D:0108 ADD DL,30 ;Adiciona 30 a DL
297D:010B CMP DL,3A ;Compara Dl com 3A
297D:010E JL 0113 ;Salta ao endereço 0113, se menor
297D:0110 ADD DL,07 ;Adiciona 07 a DL
297D:0113 INT 21 ;Chama interrupção do DOS
297D:0115 MOV DL,BL ;Põe o valor de BL em DL
297D:0117 AND DL,0F ;Transporta fazendo AND dos números bit a bit
297D:011A ADD DL,30 ;Adiciona 30 a DL
297D:011D CMP DL,3A ;Compara Dl com 3A
297D:0120 JL 0125 ;Salta ao endereço 0125, se menor
297D:0122 ADD DL,07 ;Adiciona 07 a DL
297D:0125 INT 21 ;Chama interrupção do DOS
297D:0127 INT 20 ;Finaliza o programa

**Este programa imprime o segundo de dois dígitos hexadecimais.

_Décimo exemplo

-a100
297D:0100 MOV AH,01 ;Função 1 (lê caractere do teclado)
297D:0102 INT 21 ;Chama interrupção do DOS
297D:0104 MOV DL,AL ;Põe o valor de AL em DL
297D:0106 SUB DL,30 ;Subtrai 30 de DL
297D:0109 CMP DL,09 ;Compara DL com 09
297D:010C JLE 0111 ;Salta ao endereço 0111, se menor ou igual
297D:010E SUB DL,07 ;Subtrai 07 de DL
297D:0111 MOV CL,04 ;Põe o valor 04 em CL
297D:0113 SHL DL,CL ;Insere zeros à direita
297D:0115 INT 21 ;Chama interrupção do DOS
297D:0117 SUB AL,30 ;Subtrai 30 de AL
297D:0119 CMP AL,09 ;Compara AL com 09
297D:011B JLE 011F ;Salta ao endereço 011f, se menor ou igual
297D:011D SUB AL,07 ;Subtrai 07 de AL
297D:011F ADD DL,AL ;Adiciona AL a DL
297D:0121 INT 20 ;Finaliza o programa

**Este programa pode ler dois dígitos hexadecimais.

_Décimo primeiro exemplo

-a100
297D:0100 CALL 0200 ;Chama um procedimento
297D:0103 INT 20 ;Finaliza o programa

-a200
297D:0200 PUSH DX ;Põe o valor de DX na pilha
297D:0201 MOV AH,08 ;Função 8
297D:0203 INT 21 ;Chama interrupção do DOS
297D:0205 CMP AL,30 ;Compara AL com 30
297D:0207 JB 0203 ;Salta se CF é ativado ao endereço 0203
297D:0209 CMP AL,46 ;Compara AL com 46
297D:020B JA 0203 ;Salta ao endereço 0203, se diferente
297D:020D CMP AL,39 ;Compara AL com 39
297D:020F JA 021B ;Salta ao endereço 021B, se diferente
297D:0211 MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:0213 MOV DL,AL ;Põe o valor de AL em DL
297D:0215 INT 21 ;Chama interrupção do DOS
297D:0217 SUB AL,30 ;Subtrai 30 de AL
297D:0219 POP DX ;Extrai o valor de DX da pilha
297D:021A RET ;Retorna o controle ao programa principal
297D:021B CMP AL,41 ;Compara AL com 41
297D:021D JB 0203 ;Salta se CF é ativado ao endereço 0203
297D:021F MOV AH,02 ;Função 2 (escreve caractere na tela)
297D:022 MOV DL,AL ;Põe o valor AL em DL
297D:0223 INT 21 ;Chama interrupção do DOS
297D:0225 SUB AL,37 ;Subtrai 37 de AL
297D:0227 POP DX ;Extrai o valor de DX da pilha
297D:0228 RET ;Retorna o controle ao programa principal

**Este programa se mantém lendo caracteres até receber um que possa ser convertido para um número hexadecimal.

Nenhum comentário:

Postar um comentário