2015-07-03 8 views
5

मैं विधानसभा के लिए नया हूँ और मैं लिनक्स 0.01 बूटलोडर कोड को समझने के लिए कोशिश कर रहा हूँ, लेकिन मैं इस हिस्से पर अटक गया (बहुत शुरुआत में :)):दोहरा mov अनुदेश 86

.globl begtext, begdata, begbss, endtext, enddata, endbss 
.text 
begtext: 
.data 
begdata: 
.bss 
begbss: 
.text 

BOOTSEG = 0x07c0 
INITSEG = 0x9000 
SYSSEG = 0x1000   | system loaded at 0x10000 (65536). 
ENDSEG = SYSSEG + SYSSIZE 

entry start 
start: 
    mov ax,#BOOTSEG 
    mov ds,ax 
    mov ax,#INITSEG 
    mov es,ax 
    mov cx,#256 
    sub si,si 
    sub di,di 
    rep 
    movw 
    jmpi go,INITSEG 

इस कोड (में बताई गई विधि स्रोत टिप्पणियां प्रतियां) नए स्थान पर बूटलोडर और से निष्पादन जारी है पर जाएं। प्रतिनिधिmovs के बाद इस (कॉपी करने हिस्सा) करना चाहिए, लेकिन इसके बजाय अनुदेश mov {w} प्रयोग किया जाता है।

rep 
movw 

x86 के लिए हर संदर्भ पुस्तक में मैं प्रतिनिधि देखा स्ट्रिंग निर्देश के साथ प्रयोग किया जाता है।

प्रतिनिधि सभी डेटा स्थानांतरण निर्देशों या केवल स्ट्रिंग वाले लोगों के साथ उपयोग किया जा सकता है, और यदि ऐसा है तो संदर्भ मैनुअल में इसका उल्लेख क्यों नहीं किया गया है?

उत्तर

4

यह संभवतया इस तरह के निर्देशक को लागू करने के लिए लिखा गया है जो विशेष असेंबलर है, हालांकि यह स्वीकार्य रूप से अजीब है। movs के बाद से movsb, movsw या movsl के रूप में इसे ढूंढना अधिक आम है।

वास्तव में, यह "स्ट्रिंग" ले जा रहा है, हालांकि यह केवल मनमानी बाइट्स का एक सेट है। अधिक विशेष रूप से, आपने इससे पहले mov cx,256 देखा होगा। यह ऑपोड movw है जो 16 बिट शब्द को आगे बढ़ाएगा, और 512 बाइट बूट सेक्टर को अधिक कुशलतापूर्वक ले जायेगा।

अद्यतन:

आपका प्रश्न

मुझे बहुत उत्सुक के बाद से मैं अनुदेश इस तरह से इनकोडिंग के पार चला नहीं किया है बनाया है। दिलचस्प बात यह है कि मुझे forum entry मिला जो लगता है कि rep movw AS86 प्रारूप है और वास्तव में rep movsw पर इकट्ठा होता है।

+0

तो, _rep movw_ को इकट्ठा करने के दौरान _rep movws_ opcode में अनुवाद किया जाएगा? –

+0

'प्रतिनिधि movsw'। हालांकि, फिर, यह वास्तव में एक विचित्र नोटेशन है (आपके मूल प्रश्न में से एक)। क्या आप जानते हैं कि किस असेंबलर के लिए लिखा गया है? –

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