miercuri, 30 decembrie 2009

Tasm Minimal - Citire cifra cu cifra si afisare numar

data segment
nrcitit db ?
nrafisat db 5
sir db "Nr $"
lg dw $-sir
data ends
code segment
assume cs:code,ds:data

start:
Mov ax,data
Mov ds,ax

mov dx,offset sir
mov bx,dx
add bx,3
et:
mov ah,01
int 21h

sub al,'0'

cmp al,9
ja sfarsit
cmp al,0
jb sfarsit


add al,'0'
mov [bx],al
inc bx

jmp et

sfarsit:

mov ah,09
int 21h


mov ah,4ch
int 21h
code ends
end start

Tasm Minimal - Citire si afisare CIFRA citita de la tastatura

data segment
sir db "Numar $"
lg dw $-sir
data ends
code segment
assume cs:code,ds:data

start:
Mov ax,data
Mov ds,ax

mov ah,1
int 21h

mov nrcitit,al
sub nrcitit,'0' ;scadem cod asci pentru caracterul 0

mov dx,offset sir
mov bx,lg
sub bx,2
mov [bx],al

mov ah,9
int 21h

mov ah,4ch
int 21h
code ends
end start

Tasm Minimal - Macrou introdus cu Include din biblioteca de macrou .mac

;expr5.asm
data segment
nr1 dw 1
nr2 dw 2
rez dw ?
data ends

Include expr6.mac

code segment
assume cs:code,ds:data
start:
Mov ax,data
Mov ds,ax

cifra nr1,nr2

mov rez,ax

mov ah,4ch
int 21h
code ends
end start


;expr6.mac
cifra macro nr1,nr2
mov ax,nr1
mov bx,nr2
add ax,bx
endm

Bibliotecile .mac NU se compileaza si se introduc folosind Include
Se foloste Local et1,et2 in special daca et1,et2,... sunt folosite ca si etichete la bucle sau instructiuni de salt. Local se declara dupa parametri macreoului si asigura ca la fiecare EXPANDARE, (se face efectiv copierea macroului in program nu apel si returnare de parametri ca la procedura) sa avem NUME DIFERITE pentru etichete. Astfel se evita salturile la etichete care au acelasi nume.

Tasm Minimal - Macroul, in acelasi fisier

data segment
nr1 dw 1
nr2 dw 2
rez dw ?
data ends

cifra macro nr1,nr2
mov ax,nr1
mov bx,nr2
add ax,bx
endm
;aceasta varianta se poate folosi si la proceduri, dar la proceduri se va pune dupa ;assume
code segment
assume cs:code,ds:data
start:
Mov ax,data
Mov ds,ax

cifra nr1,nr2

mov rez,ax

mov ah,4ch
int 21h
code ends
end start

Tasm - Minimal: Programul principal si procedura sunt in acelasi fisier

data segment
nr1 dw 1
nr2 dw 3
rez dw ?
data ends

code segment
;Extrn cifra:near
assume cs:code,ds:data

start:
Mov ax,data
Mov ds, ax





Push ax
Push bx
Mov ax,nr1
Mov bx,nr2

call far ptr cifra

Mov rez,ax

Pop bx
Pop ax

Mov ah,4ch
Int 21h



code segment
;Public cifra
assume cs:code
proc cifra far

Add ax,bx
ret
endp
code ends
code ends
end start

Tasm - Minimal: Programul principal si procedura sunt in fisiere diferite

;fisierul 1 *.asm
EXTRN cifra:near

data segment
nr1 dw 1
nr2 dw 3
rez dw ?
data ends

code segment
assume cs:code,ds:data

start:
Mov ax,data
Mov ds, ax




Push ax
Push bx
Mov ax,nr1
Mov bx,nr2

call near ptr cifra

Mov rez,ax

Pop bx
Pop ax

Mov ah,4ch
Int 21h


;Fisierul 2 *.asm
code ends
end start

;public cifra
code2 segment
Public cifra
assume cs:code2

proc cifra near

Add ax,bx
ret
endp
code2 ends
end

Se vor folosi comenzile:
a)tasm /zi fis2.asm
b)tlib oBiblioteca + fis2.obj de ex: bib, bib1, sunt numele uzuale
c)tasm /zi fis1.asm
d)tlink /zi fis1.obj+oBiblioteca.lib
e)td fis1.exe

Folositi apelul cu call prt near/far numeProcedura pentru apel, in locul apelului call numeProcedura, pentru a nu obtine eroare la compilare de Need Overwritte

joi, 24 decembrie 2009

Versiune usor diferira la modelul cu JLayeredPane

//Se foloseste constructorul de la JLayeredPane cu parametrul numar Integer in locul
//valorilor predefinite MODAL,PALLETE,POPUP.... sunt echivalente cu folosirea DEFAULT
//astfel se permite folosirea unui numar de <> componente intr-un Layer
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Layered
{
public static void main()
{
Layered gui=new Layered();
gui.go();
};
JButton buton;
int flag=0;
JLayeredPane layer;
JFrame frame;
JButton b1;
JButton b2;
JButton b3;
JLabel label;
public void go()
{
frame=new JFrame();
JLabel label2=new JLabel("Modal");
layer=new JLayeredPane();
label=new JLabel("Nimic");

b1=new JButton("1");
b2=new JButton("2");
b3=new JButton("3");

b1.setBackground(Color.cyan);
b2.setBackground(Color.magenta);
b3.setBackground(Color.lightGray);
label2.setBackground(Color.blue);

b1.setOpaque(true);
b2.setOpaque(true);
b3.setOpaque(true);
label2.setOpaque(true);


b1.setBounds(0,0,100,100);
b2.setBounds(30,30,100,100);
b3.setBounds(60,60,100,100);
label2.setBounds(80,80,100,100);

layer.add(b1,new Integer(10));
layer.add(b2,new Integer(9));
layer.add(b3,new Integer(8));
layer.add(label2,JLayeredPane.PALETTE_LAYER);
//Daca se foloseste DEFAULT_LAYER va fi suprapus de catre celelate componente

buton=new JButton("1<->2<->3");

frame.add(layer,BorderLayout.CENTER);
frame.add(buton,BorderLayout.SOUTH);
frame.getContentPane().add(label,BorderLayout.NORTH);

frame.setSize(300,300);
frame.setVisible(true);

buton.addActionListener(new List());
}
class List implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
flag++;
if(flag==1)//buton 1 in fata
{
label.setText("1,2,3 falg=1");
layer.setLayer(b1,new Integer(10));
layer.setLayer(b2,new Integer(9));
layer.setLayer(b3,new Integer(8));
}
else
if(flag==2)
{
label.setText("1,3,2 falg=2");
layer.setLayer(b1,new Integer(10));
layer.setLayer(b3,new Integer(9));
layer.setLayer(b2,new Integer(8));
}
else
if(flag==3)
{
label.setText("2,1,3 falg=3");
layer.setLayer(b2,new Integer(10));
layer.setLayer(b1,new Integer(9));
layer.setLayer(b3,new Integer(8));
}
else
if(flag==4)
{
label.setText("2,3,1 falg=4");
layer.setLayer(b2,new Integer(10));
layer.setLayer(b3,new Integer(9));
layer.setLayer(b1,new Integer(8));
}
else
if(flag==5)
{
label.setText("3,1,2 falg=5");
layer.setLayer(b3,new Integer(10));
layer.setLayer(b1,new Integer(9));
layer.setLayer(b2,new Integer(8));
}
else
if(flag==6)
{
label.setText("3,2,1 falg=6");
layer.setLayer(b3,new Integer(10));
//layer.setLayer(b2,new Integer(10));
//layer.setLayer(b1,new Integer(10));
layer.setLayer(b2,new Integer(9));
layer.setLayer(b1,new Integer(8));
flag=0;
JOptionPane.showMessageDialog(frame, "Ati ajuns la final");
}

}
}
}

Java - Folosire JLayeredPane si GridLayout


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;

public class GridPlusLayer
{
int nr_linii=0,nr_coloane=0;
JFrame frame;
JLabel label,labelAfisare, superLabel;
int x=10,y=10;
public static void main(int x,int y)
{
GridPlusLayer gui=new GridPlusLayer(x,y);
}


GridPlusLayer(int x,int y)
{
if(x>=0&&y>=0)
nr_linii=x;
nr_coloane=y;
frame=new JFrame("Butoane");
frame.setSize(nr_linii*75,nr_coloane*75);
JLayeredPane layer=new JLayeredPane();
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(nr_linii,nr_coloane));
labelAfisare=new JLabel("Nimic");

for(int i=0;i<(nr_linii*nr_coloane);i++)
{

label=new JLabel("");
label.setOpaque(true);

int red=(int )(Math.random()*255);
int green=(int )(Math.random()*255);
int blue=(int )(Math.random()*255);
Color random=new Color(red,green,blue);
Color complementary=new Color (255-red,255-green,255-blue);
labelAfisare.setOpaque(true);
labelAfisare.setBackground(complementary);

label.setBackground(random);
label.setText(""+(i+1));
panel.add(label);


}
superLabel=new JLabel();
superLabel.setOpaque(true);
superLabel.setBounds(x,y,(int)(nr_linii*75*0.5),(int)(nr_coloane*75*0.5));
panel.setBounds(0,0,frame.getWidth(),frame.getHeight());
layer.add(panel,JLayeredPane.DEFAULT_LAYER);
layer.add(superLabel,JLayeredPane.PALETTE_LAYER);

frame.add(layer,BorderLayout.CENTER);
frame.add(labelAfisare,BorderLayout.NORTH);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
layer.addMouseListener(new List());
}
class List implements MouseListener
{
public void mousePressed(MouseEvent e)
{
x=e.getX();
y=e.getY();
superLabel.setBounds(x,y,(int)(nr_linii*75*0.5),(int)(nr_coloane*75*0.5));
labelAfisare.setText("X: "+e.getX()+" Y: "+e.getY());
}

public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
}

miercuri, 23 decembrie 2009

Exemplu Java - Constructie GridLayout

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GridLayer
{
int nr_linii=0,nr_coloane=0;
public static void main(int x,int y)
{
GridLayer gui=new GridLayer(x,y);
}
JFrame frame;
JLabel label;
GridLayer(int x,int y)
{
if(x>=0&&y>=0)
nr_linii=x;
nr_coloane=y;
frame=new JFrame("Butoane");
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(nr_linii,nr_coloane));
for(int i=0;i<(nr_linii*nr_coloane);i++)
{
label=new JLabel(""+(i+1));
label.setOpaque(true);
int red=(int )(Math.random()*255);
int green=(int )(Math.random()*255);
int blue=(int )(Math.random()*255);
Color random=new Color(red,green,blue);
//Color complementary=new Color (255-red,255-green,255-blue);
label.setBackground(random);
panel.add(label);
}
frame.add(panel,BorderLayout.CENTER);
frame.setVisible(true);
frame.setSize(nr_linii*75,nr_coloane*75);
}
}

Un exemplu simplu de folosire a JLayeredPane --- Java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Layed
{
public static void main()
{
Layed gui=new Layed();
gui.go();
};
JButton buton;
int flag=0;
JLayeredPane layer;
JButton b1;
JButton b2;
JButton b3;
JLabel label;
public void go()
{
JFrame frame=new JFrame();
layer=new JLayeredPane();
label=new JLabel("Nimic");
b1=new JButton("1");
b2=new JButton("2");
b3=new JButton("3");
b1.setBackground(Color.cyan);
b2.setBackground(Color.magenta);
b3.setBackground(Color.lightGray);
b1.setOpaque(true);
b2.setOpaque(true);
b3.setOpaque(true);
b1.setBounds(0,0,100,100);
b2.setBounds(30,30,100,100);
b3.setBounds(60,60,100,100);
layer.add(b1,JLayeredPane.DEFAULT_LAYER);
layer.add(b2,JLayeredPane.PALETTE_LAYER);
layer.add(b3,JLayeredPane.MODAL_LAYER);
buton=new JButton("1<->2<->3");
frame.add(layer,BorderLayout.CENTER);
frame.add(buton,BorderLayout.SOUTH);
frame.getContentPane().add(label,BorderLayout.NORTH);
frame.setSize(300,300);
frame.setVisible(true);
buton.addActionListener(new List());
}
class List implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
flag++;
if(flag==1)//buton 1 in fata
{
label.setText("1,2,3 falg=1");
layer.setLayer(b1,JLayeredPane.DEFAULT_LAYER);
layer.setLayer(b2,JLayeredPane.PALETTE_LAYER);
layer.setLayer(b3,JLayeredPane.MODAL_LAYER);
}
else
if(flag==2)
{
label.setText("1,3,2 falg=2");
layer.setLayer(b1,JLayeredPane.DEFAULT_LAYER);
layer.setLayer(b3,JLayeredPane.PALETTE_LAYER);
layer.setLayer(b2,JLayeredPane.MODAL_LAYER);
}
else
if(flag==3)
{
label.setText("2,1,3 falg=3");
layer.setLayer(b2,JLayeredPane.DEFAULT_LAYER);
layer.setLayer(b1,JLayeredPane.PALETTE_LAYER);
layer.setLayer(b3,JLayeredPane.MODAL_LAYER);
}
else
if(flag==4)
{
label.setText("2,3,1 falg=4");
layer.setLayer(b2,JLayeredPane.DEFAULT_LAYER);
layer.setLayer(b3,JLayeredPane.PALETTE_LAYER);
layer.setLayer(b1,JLayeredPane.MODAL_LAYER);
}
else
if(flag==5)
{
label.setText("3,1,2 falg=5");
layer.setLayer(b3,JLayeredPane.DEFAULT_LAYER);
layer.setLayer(b1,JLayeredPane.PALETTE_LAYER);
layer.setLayer(b2,JLayeredPane.MODAL_LAYER);
}
else
if(flag==6)
{
label.setText("3,2,1 falg=6");
layer.setLayer(b3,JLayeredPane.DEFAULT_LAYER);
//layer.setLayer(b2,JLayeredPane.DEFAULT_LAYER);
//layer.setLayer(b1,JLayeredPane.DEFAULT_LAYER);
layer.setLayer(b2,JLayeredPane.PALETTE_LAYER);
layer.setLayer(b1,JLayeredPane.MODAL_LAYER);
flag=0;
}
}
}
}