Avatar billede ostehamster Nybegynder
25. april 2004 - 15:13 Der er 19 kommentarer og
1 løsning

C og assembler på 8086, int to char[] m.m.

Hejsa

Vi sidder og laver noget C programmering, som skal arbejde sammen med noget assembler.

Vores største problem er, at vi har et char array, DISP[9], som er delt direkte med assembler delen, så denne kan og skal kunne læse i den.

Nu vil vi gerne skrive noget i dette char array, men vi kan ikke rigtig få det til at spille.

Vi har nogle forskellige int, som skal sættes sammen med noget tekst, og så skrives i DISP.

Et eksempel kunne være, at vi har en int, som indeholder 2300. Vi vil så gerne have DISP til at indeholde f.eks. "8 H 2300". Det skal dog laves i flere omgange.

8 taller ligger i en int, denne skal så lægges ind på den første plads i DISP, det gør vi med:
DISP[0] = (char)gear;
Men det virker ikke, for idet vi lavet gear om fra int til char, kommer der jo et \0 bagefter, og det er så dette der kommer ind i DISP[0], hvordan klare vi den?

De næste to er nemme nok, det er bare:
DISP[1] = ' ';
DISP[2] = 'H*;

Men nu bliver den kedelig igen, vi har en int, der er mellem 0 og 99999, og dette skal ind i DISP, men hvordan? Hvis nu int'en er " 2300", så skulle man:
DISP[3] = ' ';
DISP[4] = '2';
DISP[5] = '3';
DISP[6] = '0';
DISP[7] = '0';

Men det holder jo ikke, er der ikke noget smart her? Vi har ikke de vilde funktioner, idet vi programmere direkte på en 8086, så det er svært at finde noget ordentlig på nettet, der refereres altid til noget strcpy osv, men det virker ikke for os.

mvh - og på forhånd tak
Christoffer
Avatar billede arne_v Ekspert
25. april 2004 - 15:15 #1
>DISP[0] = (char)gear;
>Men det virker ikke, for idet vi lavet gear om fra int til char, kommer
>der jo et \0 bagefter

Det tror jeg ikke på !
Avatar billede arne_v Ekspert
25. april 2004 - 15:16 #2
char tmp[6];
sprintf(tmp,"%d",ival);
memcpy(DISP+2,tmp,5);
Avatar billede arne_v Ekspert
25. april 2004 - 15:17 #3
Ellers er det ikke svært at kode selv med en lille løkke, hvsi man vil undgå
sprintf og memcpy.
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:18 #4
Hmm, vi har lige lavet forsøget:
gear = 1;
DISP[0] = (char)gear;
DISP[1] = '1';

På det første display stod der intet, hvilket svare til NULL, og på det andet stod der 1, så noget gik der galt under konverteringen.
Avatar billede arne_v Ekspert
25. april 2004 - 15:19 #5
Mener I måske:

DISP[0] = gear + '0';

?
Avatar billede arne_v Ekspert
25. april 2004 - 15:20 #6
1 er 0x01
'1' er 0x31
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:20 #7
Skal jeg have nogen specielle include filer, for at bruge sprintf
Avatar billede arne_v Ekspert
25. april 2004 - 15:20 #8
stdio.h
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:21 #9
Altså de skal gemmes i DISP som ASCHII, så det skal være 31 for 1, kræver det +'0' på?
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:21 #10
Den har jeg med, men den fejle anyway
Avatar billede arne_v Ekspert
25. april 2004 - 15:22 #11
tmp = ival;
for(i=7;i>2;i--)
{
  if(tmp > 0  || i == 7)
      DISP[i] = (tmp % 10) + '0';
  else
      DISP[i] = ' ';
}
Avatar billede arne_v Ekspert
25. april 2004 - 15:23 #12
Ja

1 + '0' = 0x01 + 0x30 = 0x31 = '1'
Avatar billede arne_v Ekspert
25. april 2004 - 15:24 #13
Hov forkert.

tmp = ival;
for(i=7;i>2;i--)
{
  if(tmp > 0  || i == 7)
      DISP[i] = (tmp % 10) + '0';
  else
      DISP[i] = ' ';
  tmp = tmp / 10;
}

sorry
Avatar billede arne_v Ekspert
25. april 2004 - 15:24 #14
(jeg havde glemt at dividere tmp med 10 for hver gennemløb.
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:30 #15
Ahh, modolus osv., det jo piv smart

Nu er vores board så gået ned, men finten er piv smart :)
Avatar billede arne_v Ekspert
25. april 2004 - 15:33 #16
Den slags sad jeg og lavede i assembler tilbage i 1987.
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:34 #17
Vi har lige lært det, så vi er ikke så skarpe. Vi har haft en del Java, så vi er blevet dovne og forventet, det jo ikke sådan når man ligefrem skal til at tænke :)
Avatar billede arne_v Ekspert
25. april 2004 - 15:38 #18
Det kan være kanon besværligt at lave selv de mest simple ting i assembler,
men man får en god fornemmelse for hvad der faktisk sker, når man lige
fyrer en linie C/Java/whatever af.
Avatar billede ostehamster Nybegynder
25. april 2004 - 15:47 #19
Så er der liv i boardet, og det virker perfekt. Takker, smidder du er svar?
Avatar billede arne_v Ekspert
25. april 2004 - 15:48 #20
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester