Új hozzászólás Aktív témák
-
-
CPT.Pirk
Jómunkásember
válasz
Jester01
#314
üzenetére
No, akkor megnézve ezt, ha jól értem ez történik:
Először:
@R1 pointer által mutatott memóriahelyen lévő érték bekerül az akkumulátorba, valamint elmentjük a "tű" első és második karakterét.Aztán belépve az első ciklusba, először jön egy nulla vizsgálat, aztán ha nem nulla az Akku tartalma (@R0), akkor jön egy kizáró vagy kapcsolat, ami az AKKU és R3 nem egyezése esetén újraindítja a ciklust és közben arrébb teszi R0-át.
Mikor megvan az első egyezés, akkor az R1 megkapja a "tű" második karakterét, valamint elmenti a "szénakazal" aktuális karakterét R4-be, és jön a ciklus 2.A második ciklus először betölti a szénakazal karakterét az akkuba, majd xor relációval megnézi, hogy egyeznek-e, ha nem, akkor kiugrik a mismatch ágra, és a szénakazal aktuális karakterétől kezdi újra keresni a loop2 az egyezéseket.
Ha nem ugrott ki, akkor jön egy lezáró nulla keresés, majd ha megvan, és mindvégig egyezés volt, akkor visszaadja R0-ban a kazal első egyező karakterét, vagy annak helyét.Köszönöm a segítséget.

-
CPT.Pirk
Jómunkásember
válasz
Jester01
#313
üzenetére
Hol találok 8051 c libraryt? Már pár napja túrom a google-t, de vagy nem értek hozzá, vagy nem tudom miért, de nem találok semmi ilyesmit.
Az strstr fgv sima C-s implementációját sem találtam meg, mindenhol csak egy példával be van mutatva, hogyan kell használni, aztán csókolom. Amiket találtam, azok meg házi kódok, de mindben van valami hiba, pl. egyéb string függvény hívások, stb.
Továbbra is az a gondom, hogy sajnos nem tudom magamtól megírni ezt az egyszerű függvényt, folyamatábrát megrajzoltam, működését értem, de hogy pl. egy memóriaterületre mutató pointert hogyan kellene megcsinálni 8051-es Assembly-n, meg léptetni arrébb, stb., na az kínai nekem.
szerk: csak nem ezt fordítottad le?
#include <stdio.h>
const char *mystrstr(const char *haystack, const char *needle)
{
if ( !*needle )
{
return haystack;
}
for ( ; *haystack; ++haystack )
{
if ( *haystack == *needle )
{
/*
* Matched starting char -- loop through remaining chars.
*/
const char *h, *n;
for ( h = haystack, n = needle; *h && *n; ++h, ++n )
{
if ( *h != *n )
{
break;
}
}
if ( !*n ) /* matched all of 'needle' to null termination */
{
return haystack; /* return the start of the match */
}
}
}
return 0;
}
int main(void)
{
const char text[] = "The quick brown fox jumps over the lazy dog.";
const char word[] = "fox";
const char *found = mystrstr(text, word);
if ( found )
{
puts(found);
}
return 0;
} -
CPT.Pirk
Jómunkásember
Tudnátok nekem segíteni egy kicsit?
Egy string kereső programot kellene átalakítani úgy, hogy kompatibilis legyen 8051-es mikrovezérlők utasításkészletével, regisztereivel.
A kód PC-s verziója így néz ki:
findnext:
mov esi,edi ; esi = edi = pointers to somewhere in str1
mov ecx,[esp + 14h] ; str2
;use edi instead of esi to eliminate AGI
mov al,[edi] ; al is next char from str1
add esi,1 ; increment pointer into str1
cmp al,dl
je first_char_found
test al,al ; end of str1?
jz not_found ; yes, and no match has been found
loop_start:
mov al,[esi] ; put next char from str1 into al
add esi,1 ; increment pointer in str1
in_loop:
cmp al,dl
je first_char_found
test al,al ; end of str1?
jnz loop_start ; no, go get another char from str1
not_found:
pop esi
pop ebx
pop edi
xor eax,eax
retEz egyébként elvileg a C-s strstr függvény is egyben. A kód innen származik: [link]
-
CPT.Pirk
Jómunkásember
Köszi!
A 2. feladatban az a lényeg, hogy 8 eszközt kell pwm vezérelni (0-127 a lehetséges értékek), miközben a mikrovezérlőknek legfeljebb 6 vezérlésére van lehetőségük, de mégis egy vezérlővel kellene 8 eszközt működtetni. A bemenet pedig egy 8*8 bites számsor.
Itt igazából az a gond, hogy nem tudjuk, mit kellene csinálni.
-
CPT.Pirk
Jómunkásember
Kérnék egy kis segítséget. Az alábbi kódrészlet egy 8 bites, i8051 mikrovezérlőre írt kód, ami 16 darab számot átlagol. Nagy vonalakban annyit csinál, hogy 16 értéket összeadja, majd eltolja 4-el balra, mert ez felel meg a 16-al való osztásnak. Ezt sajnos nem sikerül megértenem, hogy miért.
változók:
DSEG
ORG 22H
CIKLUS_SZAM: DS 01H
BCD_DIGIT_SZAM: DS 01H
RESULT_H: DS 01H
RESULT_L: DS 01H
ORG 30H
ADAT_BUFF: DS 16
OSSZEG: DS 02
UJ_ERTEK: DS 08
átlagoló:
ATLAGOLAS:
CLEAR_MEM #OSSZEG,#02
MOV R0, #ADAT_BUFF
MOV R1, #OSSZEG + 01
MOV R2, #10H
ATL_A:
CLR C
MOV A,@R0
ADDC A,@R1 ;alsó byte
MOV @R1,A
DEC R1
MOV A,@R1
ADDC A,#0 ;felső bit + túlcsordulás + 0
MOV @R1,A
INC R1
INC R0
DJNZ R2,ATL_A
;---------------------
MOV R2,#04
ATL_B:
MOV R0,#OSSZEG
CLR C
MOV A,@R0
RRC A
MOV @R0,A
INC R0
MOV A,@R0
RRC A
MOV @R0,A
DJNZ R2,ATL_B
RETEzt leszimuláltuk, működik. Viszont egy kis magyarázat jól jönne.
Valamint kaptunk egy feladatot, amiben egy 8*8 (7) bites bemenő érték állít be 8 kimenetet adott értékre 0-127 között. Vagyis 1 bitsorozat -> 8 eltérő kimenet.
Itt valami olyasmit kellene csinálnom, ami szétszedi a bemenő bitsorozatot 8 bites mezőkre, és egy kimeneti változót ennek megfelelően állít be, vagy másolja át az értékeket. Jól gondolkodok?
Új hozzászólás Aktív témák
- bambano: Bambanő háza tája
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Luck Dragon: Asszociációs játék. :)
- Hosszú premier előzetest kapott az Arknights: Endfield
- CURVE - "All your cards in one." Minden bankkártyád egyben.
- Vezeték nélküli fülhallgatók
- Milyen külső akkumulátort mobileszközökhöz?
- Kormányok / autós szimulátorok topikja
- Facebook és Messenger
- További aktív témák...
- Lenovo P52s 15,6" i7-8650 32Gb ram, 512Gb Nvme, számla, garancia
- Apple MacBook Pro 16 (2021) 16GB/512GB használt, karcmentes 87% akku, 191 ciklus
- Samsung Galaxy S21 független 8/128 akku:96% ÚJSZERŰ
- HP ProBook 450 G8 15,6" i5 1135 G7, 8-16GB RAM, SSD, jó akku, számla, 6 hó gar
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

