2012-01-15 24 views
27

के लिए खेल लड़के Z80 सीपीयू एक आधा-कैरी झंडा है, और मैं जब स्पष्ट यह स्थापित करने के लिए/के बारे में ज्यादा जानकारी मिल नहीं कर पा रहे।जीबीजेड 80: "अर्ध-वाहक" का गठन क्या होता है?

मैं अब तक जो समझता हूं वह यह है कि कोई भी 8-बिट जोड़, घटाना, स्थानांतरित करना या घुमाव ऑपरेशन (और शायद अन्य?) इसे परिणाम 4 (?) में थोड़ा सा सेट कर सकता है, और डीएए निर्देश सेट/इसका उपयोग करता है किसी न किसी तरह। मुझे यकीन नहीं है कि कैसे 16-बिट निर्देश इसे प्रभावित करते हैं और चाहे यह कुछ रजिस्टरों के उपयोग से प्रभावित हो या नहीं।

+0

एर, नहीं है यह इलेक्ट्रॉनिक्स सवाल है? –

+11

मैं एक एमुलेटर लिख रहा हूँ, इसलिए मैं तो ... – Rena

उत्तर

23

यह बिट से 4 बिट 3 से कैरी है, सामान्य कैरी झंडा रिकॉर्ड जैसे बिट 7. से ले तो, उदा अन्यथा

((a&0xf) + (value&0xf))&0x10 

कौन सा 0x10 देता आधा कैरी सेट किया जाना चाहिए है, 0: एक ऐड में थोड़ा आधा कैरी मिलता है। अन्य प्रासंगिक ओपों से आधा ले जाने से स्वाभाविक रूप से पालन किया जाता है - प्रश्न यह है कि कम निबेल से उच्च तक ले जाया गया था या नहीं।

परिप्रेक्ष्य में चीजों को रखने के लिए, Z80 एक 4bit ALU है और दो 4bit ऑप्स करके 8bit ऑप्स प्रदर्शन करती है। तो यह एक मध्यवर्ती परिणाम के रूप में, स्वाभाविक रूप से आधा ले जाता है।

DAA अगर आधा कैरी फिर दो अंक है कि 16 से अधिक कम निबल में जोड़ा गया था को जोड़ने के लिए निर्धारित है क्योंकि ध्वज में रुचि रखता है; जो सही ढंग से ऊपरी निबल में ले जायेगा, लेकिन कम निबल 6 से कम होना चाहिए, क्योंकि 10 के बीच छह और मूल्य थे, जब इसे उत्पन्न किया जाना चाहिए था, और 16, जब ऐसा हुआ था।

+1

ठीक है, लेकिन क्या बारे में 16-बिट आपरेशन में नहीं सोचता? आधा कैरेट उच्च या निम्न बाइट से सेट है? – Rena

+2

उच्च बाइट; यह सबसे हालिया आधा ले जाने वाला है। और आपको शायद यह पहले से ही मिल गया है, लेकिन मुझे http://datasheets.chipdb.org/Zilog/Z80/z80-documented-0.90.pdf को डीएए का एक बड़ा विवरण प्राप्त करने के लिए मिलता है, साथ ही आधा वाहक कहां से आता है सीसीएफ जैसे किनारे के मामले (जहां यह पुराने ले जाने के लिए सेट है, अगर स्मृति सेवा करता है)। – Tommy

+0

जोड़ने के लिए एक चीज जो मुझे स्पष्ट करती है: उदा।, 0x37 और 0x44 जोड़ना आधे वाहक का कारण नहीं बनता है क्योंकि आप केवल प्रत्येक बाइट के निचले 4 बिट्स को देखते हैं, उन्हें एक साथ जोड़ते हैं, और देखते हैं कि वह अतिप्रवाह है या नहीं। 0x0F + 0x01 करता है, 0x37 + 0x44 नहीं करता है। –

6

16-बिट संचालन के लिए, रजिस्टर के उच्च बाइट में बिट से 4 बिट 3 से कैरी ध्वज सेट करता है। दूसरे शब्दों में, बिट 12.

(नोट ऊपर बिट्स 0-15 लेबल रहे हैं, कम से कम से सबसे महत्वपूर्ण करने के लिए)

को 11 बिट यहाँ देखें: http://www.z80.info/z80code.htm

16 bit arithmetic 

If you want to add numbers that are more than the 0-255 that can 
be stored in the A register, then the HL, IX or IY registers can 
be used. Thus LD HL,1000H:LD BC,2000H:ADD HL,BC will give 

A CZPSNH BC DE HL IX IY A' CZPSNH' BC' DE' HL' SP 
00 000000 2000 0000 3000 0000 0000 00 000000 0000 0000 0000 0000 

The flags are set as follows. 

C or carry flag   1 if answer >65535 else 0 
Z or zero flag   not changed 
P flag     not changed 
S or sign flag   not changed 
N flag     0 
H or half carry flag  1 if carry from bit 11 to bit 12 else 0 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^