Bayrak taşımak - Carry flag

Olarak bilgisayar işlemcisi taşıma bayrağı (genellikle olarak belirtilen Cı bayrağı ) tek bir bit , bir sistem içinde durum yazmacı / bayrak, bir belirtmek için kullanılır register aritmetik taşıma veya ödünç üzerinden oluşturulan bu en önemli aritmetik mantık birimi (ALU) biraz konum. Taşıma bayrağı, tek bir ALU genişliğinden daha büyük sayıların, kısmi bir toplama/çıkarma işleminden daha anlamlı bir kelimenin en az anlamlı bit konumuna taşınarak (eklenerek) eklenmesini/çıkarılmasını sağlar . Aynı zamanda , birçok işlemcide (bazen özel bir X bayrağı aracılığıyla yapılır) benzer şekilde bit kaydırma ve döndürme işlemlerini genişletmek için kullanılır . Çıkarma işlemleri için, çoğu makine ödünç alma bayrağını ayarladığından, bazı makineler ( 6502 ve PIC gibi ) bunun yerine ödünç alma bayrağını sıfırladığından (ve tersi) iki (tersi) kural kullanılır .

kullanır

Taşıma bayrağı, çoğu aritmetik (ve tipik olarak birkaç bit bilge) talimatın sonucundan etkilenir ve ayrıca birçoğuna girdi olarak kullanılır. Bu talimatların birçoğu, taşımayı okuyan veya yok sayan iki forma sahiptir. Olarak montaj dilleri bu talimatları ile temsil edilir mnemonic'ler gibi ADD/SUB, ADC/SBC( ADD/SUB, taşıma dahil) SHL/SHR( biraz kaymalar ,) ROL/ROR, (bit döndükçe) RCR/RCL(elde vasıtasıyla döndürmek), ve benzerleri. Taşıma bayrağının bu şekilde kullanılması, çok kelimeli toplama, çıkarma, kaydırma ve döndürme işlemlerini mümkün kılar .

Bir örnek, 8 bitlik kayıtlar kullanılarak 255 ve 255 eklenirse ne olacağıdır . Sonuç 111111110, ikili sistemde 9 bitlik değer olan 510 olmalıdır . Kayıtta her zaman saklanan en az anlamlı 8 bit 11111110ikili olacaktır (254 ondalık) ancak bit 7'nin (sekiz bit) yürütülmesi olduğundan, elde edilen sonucun 9 bit gerektirdiğini gösteren taşıma ayarlanır. Geçerli 9 bitlik sonuç, taşıma bayrağının sonuçla birleştirilmesidir.

8 bitlik x86 ALU boyutu için, 8 bitlik ikinin tamamlayıcı yorumu, toplama işlemi 11111111+ 11111111sonuçları 111111110, Carry_Flagset, Sign_Flagset ve Overflow_Flagclear ile sonuçlanır .

11111111İkinin tümleyen işaretli -1 ( ADD al,-1) tamsayısını temsil ediyorsa , sonucun yorumu -2'dir çünkü Overflow_Flagaçıktır ve Carry_Flagyok sayılır. Ayarlandığı için sonucun işareti negatiftir Sign_Flag. 11111110işaretli -2 tamsayısının ikisinin tümleyen biçimidir.

11111111İşaretsiz tamsayı ikili sayı 255'i temsil ediyorsa ( ADD al,255), o zaman sonucun yorumu 254 olur, bu doğru değildir, çünkü sonucun en önemli biti 'ye girer ve Carry_Flagbu nedenle göz ardı edilemez. Overflow_FlagVe Sign_Flaggöz ardı edilir.

Başka bir örnek , bit modeli ve taşıma bayrağı seti ile 8 bitlik bir kayıt olabilir 01010101; Biz yürütmek eğer taşıma yoluyla sol döndürme talimatı, sonuç olacağını 10101011taşıma en önemli bit içine döndürülmüş iken taşıma bayrak en önemli bit (bit 7), çünkü temizlenir taşıma içine döndürüldü ile (bit 0).

İlk mikroişlemciler Intel 4004 ve Intel 8008 , taşıma bayrağını açıkça ayarlamak ve sıfırlamak için özel talimatlara sahipti. Ancak, sonraki Intel 8080 (ve Z80 ) açık bir sıfırlama taşıma işlem kodu içermiyordu, çünkü bu, bit düzeyinde AND, OR veya XOR komutlarından biri (taşıma bayrağını kullanmayan) yoluyla eşit derecede hızlı yapılabilir.

Taşıma bayrağı, aynı zamanda, karşılaştırılan iki değerden hangisinin diğerinden daha düşük (veya daha büyük veya ona eşit) olduğuna dair bir karar verilmesine izin vermek için tipik olarak çıkarma işlemleri tarafından uygulanan karşılaştırma talimatlarını takiben sıklıkla kullanılır. Taşıma bayrağı incelemek Şube talimatları genellikle ile temsil edilir mnemonic'ler gibi BCCve BCStaşıma sırasıyla ayarlanırsa taşıma açık veya şube halinde dalına. Bu şekilde kullanıldığında, taşıma bayrağı, değerleri işaretsiz tamsayılar olarak karşılaştırmak için bir mekanizma sağlar. Bu, değerleri işaretli tamsayı değerleri olarak karşılaştırmak için bir mekanizma sağlayan taşma bayrağının aksinedir.

Vs. bayrak ödünç almak

Taşıma bayrağı toplama için iyi tanımlanmış olsa da, çıkarma işlemleri için taşıma bayrağını kullanmanın yaygın olarak kullanılan iki yolu vardır.

İlk varsa bunu ayarlayarak bir ariyet bayrak olarak bit kullanır bir < b hesaplarken bir - b ve ariyet yapılmalıdır. Eğer birb , biraz temizlenir. Ödünç alma ( SBB) talimatı ile bir çıkarma, a - b - C = a -( b + C ) hesaplarken , ödünç alma ( SUB) içermeyen bir çıkarma , ödünç alma biti açıkmış gibi davranır. 8080 , 6800 , Z80 , 8051 , x86 ve 68k (diğerleri arasında) ailelerin ariyet biraz kullanın.

İkincisi, − x = ( x değil )+1 kimliğini doğrudan kullanır (yani, ters çevrilmiş taşıma bitini saklamadan) ve ab'yi a +( b değil )+1 olarak hesaplar . Taşıma bayrağı bu eklemeye göre ayarlanır ve taşıma ile çıkarma a +not( b )+ C ' yi hesaplarken , taşıma olmadan çıkarma, taşıma biti ayarlanmış gibi davranır. Sonuç olarak, taşıma biti ab ise ayarlanır ve a < b ise temizlenir . Sistemi / 360 , 6502 , MSP430 , COP8 , ARM ve PowerPC işlemciler bu kuralı kullanın. 6502 özellikle iyi bilinen bir örnektir çünkü taşıma işlemi olmayan bir çıkarma işlemi yoktur, bu nedenle programcılar, ödünç almanın gerekmediği her çıkarma işleminden önce taşıma bayrağının ayarlandığından emin olmalıdır.

Çıkarma işleminde taşıma bayrağının farklı kullanımlarının özeti

Biraz taşıyın veya ödünç alın
Taşımadan
/ödünç almadan çıkar
Çıkar
borrow ile
Çıkar
taşıma ile
C = 0 a - b
= a + not( b ) + 1
ab0
= a + not( b ) + 1
ab1
= a + not( b ) + 0
C = 1 ab1
= a + not( b ) + 0
ab0
= a + not( b ) + 1

En yaygın olarak, ilk alternatif "ödünç alma ile çıkarma" olarak adlandırılırken, ikinci alternatif "taşıma ile çıkarma" olarak adlandırılır. Ancak her iki yönde de istisnalar vardır; VAX , NS320xx ve Atmel AVR mimariler ariyet bit kuralını kullanır, ancak onların call a - b - C operasyonu "taşıma ile çıkarma" ( SBWC, SUBCve SBC). PA-RISC ve PICmicro mimariler taşıma bit kuralını kullanır, ancak onların call a + değil ( b ) + C "borrow ile çıkarma" işlemi ( SUBBve SUBWFB).

ST6 8 bit mikrodenetleyiciler belki En hepsinden kafa karıştırıcı. Herhangi bir tür "taşıma ile çıkarma" talimatına sahip olmasalar da, çıkarma talimatı tarafından ayarlanan bir taşıma biti vardır ve kural, işlemci modeline bağlıdır. ST60 işlemcisi "taşıma" kuralını kullanırken, ST62 ve ST63 işlemcileri "ödünç alma" kuralını kullanır.

Ayrıca bakınız

Referanslar

Dış bağlantılar