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
domingo, 25 de novembro de 2012
Imprimindo apenas vogais na tela
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.
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);
}
}
}
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/
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>
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>
<?
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')"/>
<xsl:decimal-format name="european" decimal-separator=',' grouping-separator='.' />
<xsl:value-of select="format-number(24535.2, '###.###,00', 'european')"/>
Assinar:
Postagens (Atom)