Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
LDI R0,1
LDI R4,34
MOV R2,R0
ADD R2,R2
MOV R3,R2
LSL R3
MOV R1,R3
OR R1,R2
ADD R1,R2
MOV R5,R4
ANDI R5,15
EOR R6,R6
MOV R7,R1
EOR R7,R6
----------
N 49° R0.R1R2R3 E 016° R4.R5R6R7
Tady jsou zašifrovány souřadnice cache, je to v assembleru, nevím, jak na to. Prosím ,pokud by mi někdo mohl poradit co s tím, či dokonce rozluštit, budu mu moc vděčná.Díky.
Offline
↑ VeraSob:
Ahoj, assembler je program blízký strojovému kódu, každá instrukce má svůj většinou jednoduchý význam (sčítání, bitový posun,...). Asi bude nejlepší najít si na internetu význam těch příkazů.
Offline
díky za pomoc,↑ check_drummer: instrukce jsem našla a snad tisíckrát prošla, ale pořád mi tam nesedí příkazyANDI a EOR, no nic budu se s tím muset poprat, dík!↑ check_drummer:
Offline
↑ mikrochip: teda jestli se ti to podaří, reputaci ti zvýším co to pude:-))
Offline
↑ VeraSob:
Zkus místo EOR použít XOR a místo ANDI použít AND. Schválně, co to udělá. :-)
Offline
↑ check_drummer:znovu jsem prošla furu instrukcí, zkoušela použít AVR studio, ale nemám na to:-)).Vychází mi asi toto.49.01.818. 016.34.198, ale myslím, že to mám zase blbě. Nemohl bys mi to i přes svůj věk opravit?:-))prosím, mimochodem já jsem ve věku, kdy mi to už hůř zapaluje, vždyt pamatuju ještě děrování štítků, kdysi jsem dělala zápočet z fortranu, ale to je přesně 33 roků:-)). tak to prosímtě aspon projdi a dej vědět,díky
Offline
↑ VeraSob:
Já asembler taky neumím - jen mám povědomí o tom jak funguje, ale neznám přesně chování jednotlivých instrukcí jako LSI atd. Možná, kdybys ke každému řádku připsala novou hodnotu proměnné, kterou daná instrukce modifikuje, že by se pak hledala chyba lépe.
Offline
Ahoj, určitě bych Ti s tím pomohl, ale nechápu moc Tvou otázku... Jinak instrukce, které tu jsou napsané jsou běžně používané. [AVR] Trošku se je pokusím popsat a nastínit problematiku:
; LDI [load immediately]
-- tato instrukce nastaví registr na hodnotu konstanty. Jinak je to podobný s instrukcí move, akorát se tady používá ta konstanta. R0 = 1.
LDI R0, 1
; LDI [load immediately]
-- tato instrukce nastaví registr na hodnotu konstanty. Jinak je to podobný s instrukcí move, akorát se tady používá ta konstanta. R4 = 34.
LDI R4, 34
; MOV [move]
-- tato instrukce hodí obsah (hodnotu) registru na adrese R0 do R2. R2 = 1.
MOV R2, R0
; ADD [add without Carry]
-- tato instrukce by měla umět sečíst operandy. :-) Levý a pravý. :-) Přičemž výsledek by se Ti měl hodit do R2 (tipuju) R2 = 2.
ADD R2, R2
; MOV [move]
-- hodíme do registru R3, co máme na adrese R2. Na adrese R2 by měla být hodnota 2. R3 = 2.
MOV R3, R2
; LSL [logical shift left]
-- tato instrukce slouží pro bitový posun na té adrese (doleva). Takže důležité u těchto posunů je, že ten bit, kterej vytlačíš jde do Carry. Ale to tu není až tak důležité. :-) Tady jde o to, že se Ti změní hodnota na adrese. :-) Vylezla mi z toho 4, ale těžko říct...
LSL R3
; MOV [move]
-- obsah adresy R3 (nějaká hodnota) hodíme do registru R1. R1 = 4.
MOV R1, R3
; OR [logical OR]
-- bitový součet hodnot na adresách R1 a R2. R1 OR R2 = 110 (dvojkově) a to by mělo být decimálně číslo 6.
OR R1, R2
; ADD [add without Carry]
-- tato instrukce by měla umět sečíst operandy. :-) Takže sečteme hodnotu 2 a 6. A výsledek by se Ti měl hodit do R1 (tipuju) R1 = 8.
ADD R1, R2
; MOV [move]
-- hodíme do registru R5 to co máme na adrese R4. R5 = 34.
MOV R5, R4
; ANDI [logical AND with Immediate]
-- jde de fakto o logický součin s konstantou. Takže vlastně provedeš AND s hodnotou na adrese R5 a s konstantou 15. Takže: 34 AND 15 = 2. A výsledek se Ti uloží do R5. R5 = 2.
ANDI R5, 15
; EOR [exclusive OR]
-- označován někdy jako XOR. :-) Co se stane si asi domyslíš. A pokud nedomyslíš, klidně nastíním, ale google XOR zobrazí... :-)
EOR R6, R6
; MOV [move]
-- hodíme obsah R1 do R7. R7 = 8.
MOV R7, R1
; EOR [exclusive OR]
-- znova provedeme XOR. :-)
EOR R7, R6
A pokud bylo u instrukce písmeno I, tak to zcela proto, že se tam pracovalo s konstantou (ne ve všech případech). Ono by se to mohlo plést s klíčovým slovem interrupt, což je přerušení, a používá se třeba u řady 8051.
Jinak je také dobré vědět, že mnoho instrukcí sebou nosí tak zvané Flags (příznaky). Po provedení určité instrukce se nastaví příznak, třeba Carry (došlo k přetečení či nedošlo) a tak dále. Je dobré o tom vědět.
Offline
↑ VeraSob:↑ VeraSob: Ať pocítám jak počítám, R1 musí být 8, protože to jinak nejde, prostě keš je schovaná v určitém prostoru a souřadnice musí být 49.01.8.. ,no, jinak by byla v širém poli a to fakt nepřichází v úvahu :-))
Offline
↑ VeraSob: Co takhle si to krokovat? [steps] To je nejlepší. ;-) Je jasné, že jsem mohl udělat jednoduchej kiks. :-))
Offline
↑ VeraSob: Ono to asi bude souviset s tím, že ORováním R1 a R2 jsme dali do R1 šestku a pak jsme k ní přičetli dvojku. R1 opravdu vyjde 8, R7 se taky změní na 8 díky MOV R7,R1 (poslední instrukce už nic nedělá). Jinak se mi postup od REPRO zdá OK.
Offline
Blahopřeji ke správnému výsledku. Jinak já se omlouvám, vůbec jsem si toho nevšiml a upravím to v mém příspěvku. Přesně jak říkáte... V R1 máme hodnotu 6 a v R2 máme hodnotu 2. Po provedení instrukce ADD se nám opravdu dostane do R1 hodnota 8. :-)
Offline
Stránky: 1