domingo, 25 de novembro de 2012

Imprimindo apenas vogais na tela

A seguir segue o código onde o programa recebe dados digitados pelo usuário e imprime na tela apenas as vogais. Fiquem a vontade para alterarem o código e postem aqui o que conseguirem a partir deste.

; ===== MODEL = Declara o Modelo de memoria usado no programa
.MODEL SMALL ; SMALL = código e dados são menores que 64kb, mas estão em segmentos diferentes.
; ===== STACK = Aloca espaco na pilha pilha
.STACK 200h ; Espaço de memória para instruções do programa na pilha

; ===== DATA = indica o começo do bloco de dados
.DATA ; Dados e declaracao de variaveis
; ===== Constantes =====
nome DB 0DH,0AH, " Digite o seu nome => $"
vogais DB 0DH,0AH, " As vogais sao => $"
; ===== Vetor de tamanho 20 =====
nomevet db 20 dup(' ') ; vetor de nome "nomevet" de tamanho 20

; ===== CODE = indica o começo do bloco de código.
.CODE ; Código do programa
START: ; START = inicio da funcao principal
mov ax,@data ; pega endereco do segmento de dados
mov ds,ax ; coloca no registrador de dados
xor si,si ; zera o registrador si - irá fazer a contagem no vetor
call limpatela ; chama função limpa tela

; imprime na tela a variavel
MOV DX,OFFSET nome ; Movendo o OFFSET de nome para DX
MOV AH,09H ; Ativa a interrupção 21H (09H - Escreve um string na saida padrão)
INT 21H ; Habilita a interrupção 21 - Funções do DOS
leia: ; funcao que irá ler todos os caracteres do seu nome - até 30 letras
MOV ah,1h ; Ativa a interrupção 21H (01h - Le um caractere da entrada padrão)
INT 21H ; Habilita a interrupção 21 - Funções do DOS

; comparando com as vogais minusculas
CMP AL,61H ; compara com a
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,65H ; compara com e
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,69H ; compara com i
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,6FH ; compara com o
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,75H ; compara com u
JZ mover ; se for, pula para a funcao mover senao segue comparando
; comparando com as vogais maiusculas
CMP AL,41H ; compara com A
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,45H ; compara com E
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,49H ; compara com I
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,4FH ; compara com O
JZ mover ; se for, pula para a funcao mover senao segue comparando
CMP AL,55H ; compara com U
JZ mover ; se for, pula para a funcao mover senao segue comparando

CMP AL,0DH ; compara se a tecla digitada é enter
JZ imprimir ; caso seja enter, pula para computar o total de caracteres
jnz leia ; se não foi teclado enter ira continuar

mover:
inc si ; incrementa si para nao sobrepor a letra anterior
mov nomevet[si],al ; move o caractere digitado para o "vetor"
jmp leia

imprimir:
call imprime_caracteres ; chama a função para imprimir o vetor na tela
JMP fim2 ; após imprimir salta para o fim

;----------------------------------------------------------------------
;Procedimento: Imprime Vetor
;----------------------------------------------------------------------
imprime_caracteres proc
; Imprime todo o conteudo do vetor
push si
xor si,si ; zera o registrador si
mov ch,20 ; coloca em ch o tamanho do vetor

mov ah,9h ; Ativa a interrupção 21H (09H - Escreve um string na saida padrão)
mov dx,offset vogais ; Movendo o OFFSET de vogais para DX
int 21h ; Habilita a interrupção 21 - Funções do DOS

imprime:
mov ah,2h ; Ativa a interrupção 21H (02H - Escreve um caracter na saida padrão)
mov dl,nomevet[si] ; Move cada caracter para o registrador DL
int 21h ; Habilita a interrupção 21 - Funções do DOS
inc si ; incrementa o registrador si para o proximo caracter do vetor
dec ch ; decrementa o registrador ch
cmp ch,0 ; compara o registrador ch com 0
jnz imprime ; se não for zero volta ao inicio da função imprime

pop si
ret
endp

;----------------------------------------------------------------------
;Funcao: FIM
;----------------------------------------------------------------------
limpatela: ;#
push AX ; Guarda na pilha o valor do Registrador AX ;#
mov ah, 00h ; Ativa a IRQ 10 para a limpeza do vídeo ;#
mov al, 3 ; define o modo de video ;#
int 10h ; Habilita a IRQ 10 (video) ;#
pop AX ; Retorna da pilha o valor do Registrador AX ;#
retn ;#

fim2: ; para não fechar a janela diretamente chamar a função para leitura do teclado para então finalizar o executavel
MOV ah,1h ; Ativa a interrupção 21H (01h - Le um caractere da entrada padrão)
INT 21H ; Habilita a interrupção 21 - Funções do DOS
;finaliza o executavel
MOV AH,04CH
INT 21H

END START ; Fim do Programa

Download do TASM

Caros, muitos me pediram, portanto segue abaixo o link para download do TASM pro pessoal do Assembly:

http://www.4shared.com/file/75175453/a4d2566f/Tasm_5.html

Se após a instalação ele pedir uma dll adicional, coloquei junto no arquivo compactado.

segunda-feira, 19 de novembro de 2012

Criando itens de toolpart

Caros, segue abaixo código para criação de toolpart.

No arquivo .cs da webpart:
namespace test.VisualWebPart1
{
    [ToolboxItemAttribute(false)]
    public class VisualWebPart1 : WebPart
    {
        #region Properties
        [WebBrowsable(true),
        Personalizable(PersonalizationScope.Shared),
        WebDisplayName("Título"),
        Category("teste")]
        public string title { get; set; }
        [WebBrowsable(true),
        Personalizable(PersonalizationScope.Shared),
        WebDisplayName("Texto"),
        Category("teste")]
        public string text { get; set; }
        #endregion
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/destaque/VisualWebPart1/VisualWebPart1UserControl.ascx";
        protected override void CreateChildControls()
        {
            VisualWebPart1UserControl control = Page.LoadControl(_ascxPath) as VisualWebPart1UserControl;
            control.text = text;//tem que criar o objeto no .cs do ascx como public
            control.title = title;//tem que criar o objeto no .cs do ascx como public
            Controls.Add(control);
        }
    }
}

TFS Preview

Caros, segue abaixo o link para cadastro de um ótimo recurso, o Team Foundation na nuvem. Por enquanto é gratuíto, portanto aproveitem:

http://tfs.visualstudio.com/

Customizando arquivo .webpart

Seguem abaixo alguns exemplos de customizações que podem ser feitas na sua webpart de modo a configura-la pelo xml do arquivo .webpart:

Vale lembrar que o ideal são imagens com tamanho máximo de 16X16px

<? xml version="1.0" encoding="utf-8"?>

< webParts>

<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">

<metaData>

<type name="webpartdestaque.VisualWebPart1.VisualWebPart1, $SharePoint.Project.AssemblyFullName$" />

<importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>

</metaData>

<data>

<properties>

<property name="Title" type="string">Título da webpart</property>

<property name="Description" type="string">descrição de sua webpart</property>

<property name="ChromeType" type="chrometype">None</property>

<property name="TitleIconImageUrl" type="string">url da imagem.png</property>

<property name="CatalogIconImageUrl" type="string">url da imagem.png</property>

</properties>

</data>

</webPart>

</webParts>

Adicionando ícone à Feature

Para adicionar um ícone à Feature de alguma solution criada, abra o xml de sua feature e insira a tag imageurl, conforme exemplo abaixo:

<?

xml version="1.0" encoding="utf-8" ?>
<

Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Scope="Site"
Title="Vídeo externo"
ImageUrl="../../PublishingImages/icons/starGde.png"
>
</
 
Feature>

quarta-feira, 5 de setembro de 2012

Formatando data para padrão europeu

Segue abaixo o código de formatação de data para o padrão europeu.

<xsl:decimal-format name="european" decimal-separator=',' grouping-separator='.' />
<xsl:value-of select="format-number(24535.2, '###.###,00', 'european')"/>