Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:17 Der 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
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:18 #1
Umiddelbart vil jeg da formode at den ene laver sign extension og den
anden ikke.
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:21 #2
a med l uden
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:25 #3
så den anden laver bare zero extension?
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:25 #4
dvs den aritmetiske laver signextension og den logiske zeroextension?
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:26 #5
Ja - det formoder jeg - det plejer man at ligge i a og l.
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:32 #6
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?
Avatar billede driis Nybegynder
13. oktober 2003 - 19:32 #7
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.
Avatar billede driis Nybegynder
13. oktober 2003 - 19:35 #8
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.
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:36 #9
Eksekveringen starter ved programmets entry point (eller hvor
man kalder fra HLL).

Subroutiner må du kunne placere hvor du har lyst til. Det koden
der styrer flowet ikke linierne.
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:37 #10
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?
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:38 #11
Øh.

11111111 er ikke -15 men -1

Alle computere idag bruger two's complement !
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:39 #12
-15 er 11110001

(tror jeg nok - check !)
Avatar billede driis Nybegynder
13. oktober 2003 - 19:39 #13
1111 er ikke -15, 1111 er -1.
Avatar billede driis Nybegynder
13. oktober 2003 - 19:40 #14
undskyld 1000 = -1
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:40 #15
15 = 00001111
-15 = ~00001111 + 1 = 11110000 + 1 = 11110001
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:41 #16
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
------------------------------
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:42 #17
1 = 00000001
-1 = 11111110 + 1 = 11111111
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:42 #18
Når din kode er færdig skal den afslutte og returnere til operativ
systemet.
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:44 #19
Så man kan ikke skrive fx. -15 i two's complement hvis man kun har 4 bit tilrådighed?
(Ved godt det er et meget hypotetisk spg.) :)
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:45 #20
Korrekt.

4 bit => -8 .. +7
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:47 #21
aha....
så hvad hvis man skal signextende -15 som repræsenteres vha. 1 byte til 16 bit?
Bliver det så
11111111 & 11110001 ?
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:48 #22
Ja.
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:48 #23
Det var nemmere at negere med one's complement.

Men til gengæld lidt træls med både -0 og +0.
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 19:50 #24
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 :)
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:52 #25
svar
Avatar billede arne_v Ekspert
13. oktober 2003 - 19:52 #26
Det rækker vist fint som det er.
Avatar billede bumle90 Nybegynder
13. oktober 2003 - 20:17 #27
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 ?
Avatar billede arne_v Ekspert
13. oktober 2003 - 20:22 #28
Ikke helt.

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).
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