1 / 16

زبان های ماشین و برنامه سازی سیستم

زبان های ماشین و برنامه سازی سیستم. عملیات پردازش رشته ها. مهدی ایل بیگی دانشگاه آزاد اسلامی دماوند. عملیات پردازش رشته ها. رشته: رشته عبارت است از يك بلوك پشت سر هم از بايت ها يا کلمه ( word )ها در حافظه اصلی کامپیوتر. طول رشته مي تواند تا 64k بايت باشد.

badrani
Download Presentation

زبان های ماشین و برنامه سازی سیستم

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. زبان های ماشین و برنامه سازی سیستم • عملیات پردازش رشته ها مهدی ایل بیگی دانشگاه آزاد اسلامی دماوند

  2. عملیات پردازش رشته ها • رشته: رشته عبارت است از يك بلوك پشت سر هم از بايت ها يا کلمه (word)ها در حافظه اصلی کامپیوتر. • طول رشته مي تواند تا 64k بايت باشد. • با دستورالعمل هائي كه تاكنون بحث نموده ايم مي توان عمليات روي رشته ها را انجام داد. ولي استفاده از دستورالعمل هاي پردازش رشته اي ساده تر و كارآمدتر مي باشد. • عمليات پردازش رشته اي عبارتند از: • Move String (MOVS) • Load String (LODS) • Store String (STOS) • Compare String (CMPS) • Scan String (SCAS)

  3. دستورات MOVSB, MOVSW • از اين دستورالعمل براي كپي نمودن يك رشته از محلي از حافظه به محل ديگري از حافظه استفاده مي گردد. • چنانچه رشته از نوع بايت باشد از دستور MOVSB و اگر رشته از نوع word باشد از دستور MOVSW استفاده مي گردد. • با این دستورات يك عنصر از رشته مبداء به رشته مقصد انتقال مي یابد و اشاره گر رشته ها یک واحد جلو برده می شوند تا برای انتقال عنصر بعدی آماده باشند. • آدرس رشته مبدا همواره در DS:SI و آدرس رشته مقصد همواره در ES:DI قرار دارد. با هر بار اجرای این دستورات SI, DI یک واحد جلو برده می شوند. • در ابتدای برنامه باید ES مقداردهی شود. برای راحتی کار ES و DS را بصورت مساوی مقدار دهی می کنیم (سگمنت داده و Extra یکی می شوند). • جهت حرکت بر روی رشته با استفاده از پرچم DF مشخص می شود: • اگر DF == 0 باشد رشته از اولین عنصر به سمت آخرین عنصر کپی می شود، و اگر DF == 1 باشد رشته از آخرین عنصر به سمت اولین عنصر کپی می گردد. • دستور STD برای یک کردن DF و دستور CLD برای صفر کردن DF می باشد.

  4. دستور REP • دستور MOVSB و MOVSW فقط یک بایت یا کلمه از رشته مبداء را در رشته مقصد کپی می کنند. • برای کپی تمامی عناصر رشته، این دستورات باید به تعداد عناصر رشته تکرار گردد. • برای تکرار یک دستور به تعداد n بار، از دستور REP(Repeat) استفاده می نماییم و تعداد تکرار (n) را در CX قرار می دهیم. • درنتیجه برای کپی کردن یک رشته در یک رشته دیگر مراحل زیر را طی می کنیم: • آدرس رشته مبداء را در SI و آدرس رشته مقصد را در DI قرار می دهیم. • طول رشته مبداء را در CX قرار می دهیم. • با استفاده از دستور REP، دستور MOVSB یا MOVSW را به تعداد عناصر رشته مبداء تکرار می کنیم.

  5. STACKSG SEGMENT • DW 32H DUP(0) • STACKSG ENDS • ;----------------------------------------------- • DATASG SEGMENT • SOURCE DB 'THIS IS A TEST $' • ORG 10H • DESTDB 16 DUP(?) • DATASG ENDS • ;------------------------------------------------------- • CODESG SEGMENT • ASSUM SS:STACKSG,DS:DATASG,ES:DATASG,CS:CODESG • MAIN PROC FAR • MOV AX,DATASG • MOV DS,AX • MOV ES,AX • CLD • LEA SI,SOURCE • LEA DI,DEST • MOV CX,16 • REP MOVSB • MOV AX,4C00H • INT 21H • MAIN ENDP • CODESG ENDS • END MAIN مثال برای کپی یک رشته با دستور MOVSB

  6. STACKSG SEGMENT • DW 32H DUP(0) • STACKSG ENDS • ;----------------------------------------------- • DATASG SEGMENT • SOURCE DB 'THIS IS A TEST $' • ORG 10H • DESTDB 16 DUP(?) • DATASG ENDS • ;------------------------------------------------------- • CODESG SEGMENT • ASSUM SS:STACKSG,DS:DATASG,ES:DATASG,CS:CODESG • MAIN PROC FAR • MOV AX,DATASG • MOV DS,AX • MOV ES,AX • CLD • LEA SI,SOURCE • LEA DI,DEST • MOV CX, 8 • REP MOVSW • MOV AX,4C00H • INT 21H • MAIN ENDP • CODESG ENDS • END MAIN مثال برای کپی یک رشته با دستور MOVSW

  7. دستورات STOSB, STOSW • اين دستورالعمل ها باعث مي شوند كه يك بايت يا يك word از ثبات AL یا ثبات AX به يك عنصر رشته مقصد منتقل شود و اشاره گر رشته مقصد یک واحد جلو برده می شود تا برای انتقال عنصر بعدی آماده باشد. • چنانچه رشته از نوع بايت باشد از دستورالعملSTOSB استفاده مي گردد و AL به رشته مقصد انتقال می یابد. • اگر رشته از نوع word باشد از دستورالعملSTOSW استفاده خواهد شد و مقدار AX به رشته مقصد منتقل می گردد. • آدرس رشته مقصد را در DI قرار می دهیم. • برای تکرار این دستورات نیز می توانیم از دستور REP استفاده نماییم.

  8. STACKSG SEGMENT STACK 'STACK' DW 32H DUP(0) STACKSG ENDS DATASG SEGMENT NAME1 DB 'UNIVERSITY' DATASG ENDS CODESG SEGMENT 'CODE' ASSUME SS:STACKSG,DS:DATASG,ES:DATASG,CS:CODESG MAIN PROC FAR MOV AX,DATASG MOV DS,AX MOV ES,AX CLD MOV AX, ‘&&’ MOV CX, 5 LEA DI, NAME1 REP STOSW MOV AX,4C00H INT 21H MAIN ENDP CODESG ENDS END MAIN مثال برای کار با دستور STOSW

  9. دستورات LODSB, LODSW • اين دستورالعمل ها باعث مي شوند كه يك بايت يا يك word از رشته مبداء به ثبات AL یا ثبات AX انتقال پیدا کند و اشاره گر رشته مبداء نیز یک واحد جلو برده می شود تا برای انتقال عنصر بعدی آماده باشد. • چنانچه رشته از نوع بايت باشد از دستورالعمل LODSB استفاده مي گردد و عنصر رشته به AL انتقال می یابد. • اگر رشته از نوع word باشد از دستورالعملLODSW استفاده خواهد شد و عنصر رشته به AX منتقل می گردد. • آدرس رشته مبداء را در SI قرار می دهیم. • برای تکرار این دستورات نیز می توانیم از دستور REP استفاده نماییم.

  10. DATASG SEGMENT TABLE1 DB '1254683218945$' DATASG ENDS CODESG SEGMENT 'CODE' ASSUME SS:STACKSG,DS:DATASG,CS:CODESG MAIN PROC FAR MOV AX,DATASG MOV DS,AX CLD LEA SI,TABLE1 MOV DL, 0 L1: LODSB CMP AL, '$' JE L2 CMP AL,DL JLE L1 MOV DL,AL JMP L1 L2: MOV AH,02 INT 21H MOV AX,4C00H INT 21H MAIN ENDP CODESG ENDS END MAIN مثال: بدست آوردن ماکزیمم ارقام درون یک رشته با استفاده از دستور LODSB

  11. دستورات CMPSB, CMPSW • دو رشته مبدا و مقصد را می توان به کمک دستور CMPS مقایسه کرد. • برای مقایسه دو رشته باید تک تک عناصر دو رشته با هم مقایسه شوند. مقایسه را می توان تا زمانی که به اولین تفاوت یا اولین تشابه در دو رشته برسیم، ادامه دهیم. • برای تکرار دستور CMPS با دو شرط فوق می توانیم از دستورات زیر استفاده نماییم: • REPE: مقایسه تا زمانی که کرکترها مساوی هستند. • REPNE: مقایسه تا زمانی که کرکترها مساوی نیستند. • اگر دو رشته از نوع بایت باشند از دستور CMPSB استفاده می نماییم. • اگر دو رشته از نوع کلمه (Word) باشند از دستور CMPSW استفاده می نماییم. • آدرس رشته مبداء را در SI و آدرس رشته مقصد را در DI قرار می دهیم. • با هر بار اجرای دستور CMPS رجیسترهای SI و DI بهنگام می شوند و به عنصر بعدی برای مقایسه اشاره می کنند.

  12. .DATA • NAME1 DB 'UNIVERSITY' • NAME2 DB 'UNIVERSITY' • NAME3 DB 'TEHRAN ' • .Code • MAIN PROC FAR • MOV AX,DATASG • MOV DS,AX • MOV ES,AX • MOV BX,0 • CLD • MOV CX,10 • LEA SI,NAME1 • LEA DI,NAME2 • REPE CMPSB • JNE SECOND • MOV BL,1 • SECOND: • MOV CX,10 • LEA SI,NAME1 • LEA DI,NAME3 • REPE CMPSB • JNE EXIT • MOV BH,1 • EXIT: MOV AX,4C00H • INT 21H مثال برای مقایسه رشته ها: برنامه ای که درصورت تساوی رشته های 1و2، BL را یک می کند و در صورت تساوی رشته های 1و3، BH را یک می نماید.

  13. دستورات SCASB, SCASW • وظیفه این دستورات جستجو در یک رشته به دنبال یک کرکتر یا یک کلمه خاص می باشد. • آدرس رشته مقصد (رشته مورد جستجو) را در ES:DI قرار می دهیم. • اگر بخواهیم یک کرکتر را جستجو کنیم، کرکتر مورد جستجو را در AL قرار می دهیم و از دستور SCASB استفاده می نماییم. • در صورتیکه بخواهیم کلمه ای (Word) را در یک رشته جستجو کنیم، کلمه مورد جستجو را در AX قرار می دهیم و از دستور SCASW استفاده می نماییم. • دستورات تکرار REPNE و REPE را مي توان براي اين دستورالعمل ها استفاده نمود. • براي تعيين جهت پردازش رشته از فلگ DF استفاده می شود.

  14. DATASG SEGMENT NAME1 DB 'TEHBAN‘ DATASG ENDS CODESG SEGMENT ASSUME SS:STACKSG,DS:DATASG,ES:DATASG,CS:CODESG MAIN PROC FAR MOV AX,DATASG MOV DS,AX MOV ES,AX CLD MOV AL,‘B' MOV CL,6 LEA DI,NAME1 REPNE SCASB JNE EXIT MOV AL,’R’ DEC DI ; STOSB EXIT: MOV AX,4C00H INT 21H MAIN ENDP CODESG ENDS END MAIN مثال: برنامه ای که کرکتر 'B' را در رشته مقصد پیدا کرده و آن را با کرکتر 'R' تعویض می نماید. کاهش Di بمنظور اشاره به مکان کرکتر B

  15. نمونه سوال • برنامه ای بنویسید که رشته های متقارن (palindrome) را تشخیص دهد. بعنوان مثال رشته های ABSFGHGFSBA و JHKKHJ متقارن هستند. • پروسجری بنویسید که یک رشته و یک کرکتر را دریافت کرده و تعداد دفعات تکرار کرکتر در رشته را بازگرداند. • برنامه ای بنویسید که تعداد تکرار یک رشته را درون یک رشته دیگر مشخص نماید. رخدادهای همپوشان نیز باید تشخیص داده شوند، بعنوان مثال رشته AA در رشته AAA، دو بار تکرار شده است. • برنامه ای بنویسید که یک لیست 20 تایی شامل اسامی نام خانوادگی افراد را مرتب نماید.

  16. ؟

More Related