13. oktober 2003 - 19:17Der er
27 kommentarer og 1 løsning
assembler instruktioner srl og sra
hej, jeg vil høre om nogle af jer kan hjælpe mig med et bitshift. Jeg har 2 instruktioner. Den ene hedder "shift right logical" (srl) og den anden hedder "Shift right arithmetic"(sra). Jeg ved godt hvordan "shift right logical" fungerer. Men hvad så med arithmetic? Hvad er forskellen? Er det noget med at den ene er signed og den anden er unsigned eller hvordan skal dett forståes? På forhånd tak for hjælpen
oki...kanon..tak skal du have :) Jeg har lige et andet spg. Håber det er oki. Mht. når man skal lave en "jump and link", altså når jeg skal lave et procedureklad. Hvor i assemblerfilen skal jeg placere koden for det der sker inde i procedueren? Jeg mener at hvis jeg bare placerer den et sted øverst el. nederst el. midt i koden bliver proceduren jo udført selvom den ikke bliver kaldt fordi programmet bliver udført linie for linie ik? Eller har jeg bare misforstået et eller andet grundlæggende?
Shift right arithmetic skal bruges til signed værdier. Den bibeholder MSB, som jo her er fortegnsbittet, og fylder ud med værdien af fortegnsbittet på de bitpladser, der skiftes.
Shift right logical skal bruges til unsigned. Den skifter til højre og fylder ud med nuller.
Ovenstående gælder i hvert fald hvis det er til Intel processorer, men jeg går ud fra, at det samme er gældende ved andre arkitekturer.
Nå, jeg kan se dit første spørgsmål allerede er besvaret. Mht. dit andet spørgsmål, skal du placere din procedure efter dit hovedprogram. Efter de instruktioner er blevet udført, som afslutter programmet.
Og lige et sidst spg. mht til positive og negative tal. (Du skal nok få flere pts. hvis du vil) Når man sætter signextension på et tal fx. -15 Lad os sige vi har et 4 bits ord vi vil signextende til 1 byte. Dvs. 1111 =-15 signextendes til 11111111 =-15 Hvad jeg ikke forstår er hvorfor står der -15 i den nederste med længden 1 byte og ikke -127 hvis det er MSB der angiver fortegnet?
oki, men hvis nu man placerer den til sidst. Skal man så lave en eller anden form for uendelig løkke som programmet skal stå og snurre i når det er udført, så det altså aldrig kommer ned til selve proceduren. altså fx. noget ala
Main: add sub ---------her slutter main------ Loop: beq $0,$0,Loop --------Her starter procedure---- Procedure1: addi sll sra jr ------------------------------
oki, jeg siger tusind tak for hjælpen til jer begge. Arne_v jeg vil gerne give dig pointene hvis du lige laver svar istedet for kommentar :) Og hvis du vil have ekstra pga. ekstraspg sig endelig til :)
som et lillebitte ekstraspg. vil jeg lige spørge. Når man kigger på et tal som er signed vil det så sige at det er two's complement og unsigned er almindelig fra 0 til MSB ?
4 bit signed har range -8 .. 7 4 bit unsigned har range 0 .. 15
Negative tal er repræsenteret i two complement (vend alle bits og lig en til).
Synes godt om
Ny brugerNybegynder
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.