• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fpfcarvalho

Assembly código de barras

5 mensagens neste tópico

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

unsigned char x[14];
char y;
unsigned char tabestr[61];
unsigned tabcod[71];
unsigned char barras[95];


void codigo()
{
asm{

///GUARDAR EM TABESTR A TABELA 1-ESTRUTURA DO EAN-13
mov byte ptr tabestr[0],'L'  //estrutura codigo 0
mov byte ptr tabestr[1],'L'
mov byte ptr tabestr[2],'L'
mov byte ptr tabestr[3],'L'
mov byte ptr tabestr[4],'L'
mov byte ptr tabestr[5],'L'
//estrutura codigo 1 [6]
mov byte ptr tabestr[6],'L'
mov byte ptr tabestr[7],'L'
mov byte ptr tabestr[8],'G'
mov byte ptr tabestr[9],'L'
mov byte ptr tabestr[10],'G'
mov byte ptr tabestr[11],'G'
//estrutura codigo 2 [12]
mov byte ptr tabestr[12],'L'
mov byte ptr tabestr[13],'L'
mov byte ptr tabestr[14],'G'
mov byte ptr tabestr[15],'G'
mov byte ptr tabestr[16],'L'
mov byte ptr tabestr[17],'G'
//estrutura codigo3 [18]
mov byte ptr tabestr[18],'L'
mov byte ptr tabestr[19],'L'
mov byte ptr tabestr[20],'G'
mov byte ptr tabestr[21],'G'
mov byte ptr tabestr[22],'G'
mov byte ptr tabestr[23],'L'
//estrutura codigo4 [24]
mov byte ptr tabestr[24],'L'
mov byte ptr tabestr[25],'G'
mov byte ptr tabestr[26],'L'
mov byte ptr tabestr[27],'L'
mov byte ptr tabestr[28],'G'
mov byte ptr tabestr[29],'G'
//estrutura codigo5
mov byte ptr tabestr[30],'L'
mov byte ptr tabestr[31],'G'
mov byte ptr tabestr[32],'G'
mov byte ptr tabestr[33],'L'
mov byte ptr tabestr[34],'L'
mov byte ptr tabestr[35],'G'
//estrutura codigo 6 [36]
mov byte ptr tabestr[36],'L'
mov byte ptr tabestr[37],'G'
mov byte ptr tabestr[38],'G'
mov byte ptr tabestr[39],'G'
mov byte ptr tabestr[40],'L'
mov byte ptr tabestr[41],'L'
// estrutura codigo 7[42]
mov byte ptr tabestr[42],'L'
mov byte ptr tabestr[43],'G'
mov byte ptr tabestr[44],'L'
mov byte ptr tabestr[45],'G'
mov byte ptr tabestr[46],'L'
mov byte ptr tabestr[47],'G'
// estrutura codigo 8[48]
mov byte ptr tabestr[48],'L'
mov byte ptr tabestr[49],'G'
mov byte ptr tabestr[50],'L'
mov byte ptr tabestr[51],'G'
mov byte ptr tabestr[52],'G'
mov byte ptr tabestr[53],'L'
// estrutura codigo 9[54]
mov byte ptr tabestr[54],'L'
mov byte ptr tabestr[55],'G'
mov byte ptr tabestr[56],'G'
mov byte ptr tabestr[57],'L'
mov byte ptr tabestr[58],'G'
mov byte ptr tabestr[59],'L'
//finalizar a string
mov byte ptr tabestr[60],0
//////GUARDAR A TABELA2- CODIFICACAO DOS DIGITOS R-code
// digito 0
mov byte ptr tabcod[0],'1'
mov byte ptr tabcod[1],'1'
mov byte ptr tabcod[2],'1'
mov byte ptr tabcod[3],'0'
mov byte ptr tabcod[4],'0'
mov byte ptr tabcod[5],'1'
mov byte ptr tabcod[6],'0'
// digito 1 [7]
mov byte ptr tabcod[7],'1'
mov byte ptr tabcod[8],'1'
mov byte ptr tabcod[9],'0'
mov byte ptr tabcod[10],'0'
mov byte ptr tabcod[11],'1'
mov byte ptr tabcod[12],'1'
mov byte ptr tabcod[13],'0'
// digito 2 [14]
mov byte ptr tabcod[14],'1'
mov byte ptr tabcod[15],'1'
mov byte ptr tabcod[16],'0'
mov byte ptr tabcod[17],'1'
mov byte ptr tabcod[18],'1'
mov byte ptr tabcod[19],'0'
mov byte ptr tabcod[20],'0'
// digito 3 [21]
mov byte ptr tabcod[21],'1'
mov byte ptr tabcod[22],'0'
mov byte ptr tabcod[23],'0'
mov byte ptr tabcod[24],'0'
mov byte ptr tabcod[25],'0'
mov byte ptr tabcod[26],'1'
mov byte ptr tabcod[27],'0'
//digito 4 [28]
mov byte ptr tabcod[28],'1'
mov byte ptr tabcod[29],'0'
mov byte ptr tabcod[30],'1'
mov byte ptr tabcod[31],'1'
mov byte ptr tabcod[32],'1'
mov byte ptr tabcod[33],'0'
mov byte ptr tabcod[34],'0'
//digito 5 [35]
mov byte ptr tabcod[35],'1'
mov byte ptr tabcod[36],'0'
mov byte ptr tabcod[37],'0'
mov byte ptr tabcod[38],'1'
mov byte ptr tabcod[39],'1'
mov byte ptr tabcod[40],'1'
mov byte ptr tabcod[41],'0'
// digito 6 [42]
mov byte ptr tabcod[42],'1'
mov byte ptr tabcod[43],'0'
mov byte ptr tabcod[44],'1'
mov byte ptr tabcod[45],'0'
mov byte ptr tabcod[46],'0'
mov byte ptr tabcod[47],'0'
mov byte ptr tabcod[48],'0'
// digito 7 [49]
mov byte ptr tabcod[49],'1'
mov byte ptr tabcod[50],'0'
mov byte ptr tabcod[51],'0'
mov byte ptr tabcod[52],'0'
mov byte ptr tabcod[53],'1'
mov byte ptr tabcod[54],'0'
mov byte ptr tabcod[55],'0'
//digito 8 [56]
mov byte ptr tabcod[56],'1'
mov byte ptr tabcod[57],'0'
mov byte ptr tabcod[58],'0'
mov byte ptr tabcod[59],'1'
mov byte ptr tabcod[60],'0'
mov byte ptr tabcod[61],'0'
mov byte ptr tabcod[62],'0'
// digito 9 [63]
mov byte ptr tabcod[63],'1'
mov byte ptr tabcod[64],'1'
mov byte ptr tabcod[65],'1'
mov byte ptr tabcod[66],'0'
mov byte ptr tabcod[67],'1'
mov byte ptr tabcod[68],'0'
mov byte ptr tabcod[69],'0'
// para finalizar a string
mov byte ptr tabcod[70],0
}
asm{
    push ax
    push bx
    push cx
    push si
    push di
fim:asm{
pop di
pop si
pop cx
pop bx
pop ax
}
printf("aminha string de estruraa codigo:%s",tabcod);
getch();
}



////////////////////funcao para calcular o cheq digit\\\\\\\\\\\\\\\\\\

void calculacheqdigit()
{
char st[14];
clrscr();
printf("Introduza o codigo para calcular o cheq digit: ");
scanf("%s",st);
strcpy (x,st);
asm {
push ax
push bx
push cx
lea si,x
mov di,si
inc di
mov cx,6
xor bl,bl}
For:asm{
mov al,[si]
cmp al,0
je FIM
sub al,'0'
add bl,al
mov al,[di]
sub al,'0'
mov bh,3
mul bh
add bl,al
add si,2
add di,2
loop For}
asm{
mov bh,10
mov al,bl
div bh
cmp ah,0
je adicionar
sub bh,ah
mov ah,bh }     //para calcular o cheq digit
adicionar:asm{
mov y,ah
add ah,'0'
mov [si],ah
mov bl,0
mov [di],bl
} asm{
pop cx
pop bx
pop ax
	} FIM:

printf("cheq digit=%d",y);
printf("\nx= %s",x);
getch();
}

//////////////////////////Codigo para vericar se ‚ ou nao um codigo ena13 valido*************



void verificar()
{
char st[14];
y=-1;
clrscr();
printf("Introduza o codigo a verificar: ");
scanf("%s",st);
strcpy (x,st);
asm {
push ax
push bx
push cx
lea si,x
mov di,si
inc di
mov cx,6
xor bl,bl}
For:asm{
mov al,[si]
cmp al,0
je FIM
sub al,'0'
add bl,al
mov al,[di]
sub al,'0'
mov bh,3
mul bh
add bl,al
add si,2
add di,2
loop For}
asm{
mov al,[si]
sub al,'0'
add bl,al
mov bh,10
mov al,bl
div bh
cmp ah,0
jne FIM
mov y,ah
}
FIM:asm{
pop cx
pop bx
pop ax
}

printf("cheq digit=%d",y);
printf("\nx= %s",x);
getch();
}

int main()
{
unsigned int op;
clrscr();
asm{ call far ptr codigo}
WHILE:
clrscr();
printf("\n     ************** Menu ****************\n");
printf("\n\n     1- Calcular o valor do cheq digit.");
printf("\n\n     2- Verificar se o codigo ‚ ou nao ENA-13");
printf("\n\n     0- Sair deste peograma!!!!!!");
printf("\n\n     Introduzir op‡ao desejada: ");
scanf("%d",&op);
asm{
cmp op,0
je Fim
cmp op,1
je calculardigit
cmp op,2
je verificardigit
cmp op,3
je codigocal
jne WHILE}
calculardigit:asm{
call far ptr calculacheqdigit
jmp WHILE}
verificardigit:asm {
call far ptr verificar
jmp WHILE}
codigocal: asm{
call far ptr codigo
jmp WHILE}
Fim:
getchar();
return 0;
}

Este é o código que tenho até agora. Precisava de por isto a mostrar no ecrãn o código de barras.

Alguém me consegue por isto em modo de texto 03h das placas gráficas VGA (25 linhas x 80 colunas, 16 cores)?

Se alguém quiser acrescentar alguma outra funcionalidade no programa, estou aberto a sugestões.

Agradecidamente

Fernando Carvalho

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se bem me lembro para mudar de modo gráfico invocas a int 10h com ax = 03h (modo de video) e depois podes usar outras funções "INT" para escrever, ou aceder directamente à memória de video no modo de texto em b800h:0000h (se bem me lembro... se queres mesmo isto posso ir desenterrar 1 ou 2 livros que ali tenho). Mas se já tens printf não vejo necessidade disto...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas se já tens printf não vejo necessidade disto...

Pois, só que ele precisa de pôr o output em assembly também

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então o melhor é usar funções "int" do DOS ou da BIOS, existem pelo menos para output, para input já não me lembro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora