Skyltförlängning
Teckenförlängning (förkortat sext ) är operationen, i datoraritmetik , att öka antalet bitar av ett binärt tal samtidigt som talets tecken (positivt/negativt) och värde bevaras. Detta görs genom att lägga till siffror på den mest signifikanta sidan av numret, enligt en procedur som är beroende av den speciella signerade nummerrepresentationen som används.
Till exempel, om sex bitar används för att representera talet " 00 1010
" (decimal positiv 10) och teckenförlängningsoperationen ökar ordlängden till 16 bitar, då är den nya representationen helt enkelt " 0000 0000 0000 1010
". Därmed bibehålls både värdet och att värdet var positivt.
Om tio bitar används för att representera värdet " 11 1111 0001
" (decimal negativ 15) med tvås komplement, och detta är teckenförlängt till 16 bitar, är den nya representationen " 1111 1111 1111 0001
". Genom att utfylla den vänstra sidan med ettor bibehålls således minustecknet och värdet på det ursprungliga talet.
I Intel x86-instruktionsuppsättningen , till exempel, finns det två sätt att göra teckenförlängning:
- använda instruktionerna
cbw
,cwd
,cwde
ochcdq
: konvertera byte till ord, ord till dubbelord, ord till utökat dubbelord respektive dubbelord till fyrord (i x86-sammanhang har en byte 8 bitar, ett ord 16 bitar, ett dubbelord och utökat dubbelord 32 bitar och ett fyrord 64 bitar); - med hjälp av ett av de förlängda dragen, utförda av instruktionerna
movsx
("flytta med teckenförlängning").
Noll förlängning
Ett liknande koncept är noll extension (förkortat zext ). I en flytt- eller omvandlingsoperation hänvisar nollförlängning till att ställa in de höga bitarna för destinationen till noll, snarare än att sätta dem till en kopia av den mest signifikanta biten i källan. Om källan till operationen är ett tal utan tecken, är nolltillägg vanligtvis det korrekta sättet att flytta det till ett större fält samtidigt som dess numeriska värde bevaras, medan teckentillägg är korrekt för tecken med tecken.
I instruktionsuppsättningarna x86 och x64 utför movzx- instruktionen ("flytta med noll förlängning") denna funktion.
Till exempel, movzx ebx, al
kopierar en byte från al-
registret till lågordningens byte av ebx
och fyller sedan de återstående byten av ebx
med nollor.
På x64 kommer de flesta instruktioner som skriver till hela de nedre 32 bitarna i något av de allmänna registren att nollställa den övre halvan av destinationsregistret. Till exempel kommer instruktionen mov eax, 1234
att rensa de övre 32 bitarna i raxregistret
....
Se även
- Mano, Morris M.; Kime, Charles R. (2004). Logic and Computer Design Fundamentals (3:e upplagan), s 453. Pearson Prentice Hall. ISBN 0-13-140539-X .