160 likes | 411 Views
برنامه نویسی به زبان اسمبلی. فصل چهارم: قواعد برنامه نویسی اسمبلی. تهیه وتنظیم: سید مصطفی موسوی. مقررات برنامه نویسی اسمبلی. هر برنامه اسمبلی باید بصورت یکسری سگمنت کد و داده و پشته تعریف گردد. بسته به ساده یا پیچیده بودن برنامه تعداد سگمنت ها می تواند شامل یک یا چندین سگمنت باشد.
E N D
برنامه نویسی به زبان اسمبلی فصل چهارم: قواعد برنامه نویسی اسمبلی تهیه وتنظیم: سید مصطفی موسوی
مقررات برنامه نویسی اسمبلی • هر برنامه اسمبلی باید بصورت یکسری سگمنت کد و داده و پشته تعریف گردد. • بسته به ساده یا پیچیده بودن برنامه تعداد سگمنت ها می تواند شامل یک یا چندین سگمنت باشد. • هر برنامه حداقل یک سگمنت کد دارد و می توان سگمنت داده و پشته برای برنامه تعریف نکرد. • راهنمای اسمبلر • جزء دستورات اصلی اسمبلی نمی باشند • نکاتی از قبیل ابتدا و انتهای سگمنت، داده یا پشته بودن سگمنت و ... را مشخص می نمایند. • به اسمبلر کمک می کنند تا مقصود برنامه نویس را درک کرده و دستورات را به کد قابل اجرا تبدیل نماید.
تعریف سگمنت کد • سگمنت کد بیان کننده دستوراتی است که برنامه نویس اجرای آنها را مد نظر دارد. • تعریف یک سگمنت در اسمبلی: Label SEGMENT …… Label ENDS
تعریف سگمنت کد • تعریف سگمنت کد: CODSG SEGMENT ASSUME CS:CODSG …… CODSG ENDS END
تعریف سگمنت کد • این قسمت کنترل سیستم را به سیستم عامل بازمیگرداند و با اجرای آن برنامه پایان می یابد: CODSG SEGMENT ASSUME CS:CODSG …… MOV AX, 4C00H INT 21H CODSG ENDS END
تعریف سگمنت کد • مثال: برنامه ای بنویسید که مجموع دو رجیستر ALو BLرا بدست آورده، نتیجه را در رجیستر CLقرار دهد. CODSG SEGMENT ASSUME CS:CODSG ADD AL, BL MOV CL, AL MOV AX, 4C00H INT 21H CODSG ENDS END
تعریف سگمنت داده • مثال: برنامه ای بنویسید که محتوای بایت صفر از سگمنت داده را که مقدار آن 45 است با رجیستر CLجمع کند و نتیجه را در بایت بعدی حافظه داده با نام RESULTقرار دهد. • ابتدا سگمنت داده را تعریف می نماییم: DATASG SEGMENT NUM DB 45 RESULT DB 0 DATASG ENDS سگمنت داده 2 RESULT 1 0 NUM
تعریف سگمنت داده • سپس سگمنت کد را می نویسیم و رجیستر DS را مقدار دهی می کنیم: DATASG SEGMENT NUM DB 45 RESULT DB 0 DATASG ENDS CODSG SEGMENT ASSUME CS:CODSG, DS:DATASG MOV AX, DATASG MOV DS, AX MOV AX, 4C00H INT 21H CODSG ENDS END
تعریف سگمنت داده • سپس کد دستورات را می نویسیم. DATASG SEGMENT NUM DB 45 RESULT DB 0 DATASG ENDS CODSG SEGMENT ASSUME CS:CODSG MOV AX, DATASG MOV DS, AX ADD CL, NUM MOV RESULT, CL MOV AX, 4C00H INT 21H CODSG ENDS END
تعریف پروسه (Procedure) • برای نوشتن برنامه های ساخت یافته از پروسه یا روال استفاده می نماییم. CODSG SEGMENT ASSUME CS:CODSG MAIN PROC FAR ADD AL,BL MOV AX,4C00H INT 21H MAIN ENDP CODSG ENDS END MAIN
تعریف پروسه (Procedure) • عبارت NEAR و FAR برای مشخص کردن دور یا نزدیک بودن پروسه می باشند. • اگر در برنامه پروسه اصلی داشته باشیم، از عبارت FAR برای تعریف آن استفاده می نماییم. • اگر از عبارت NEAR استفاده کنیم به این معنی است که پروسه مورد نظر در همان سگمنتی است که پروسه اصلی قرار دارد. • اگر از عبارت FAR استفاده کنیم به این معنی است که پروسه مورد نظر و پروسه اصلی، در سگمنت های جداگانه قرار دارند.
تعریف سگمنت پشته (Stack) • سگمنت پشته نیز همانند سایر سگمنت ها تعریف می شود: STACKSG SEGMENT …. STACKSG ENDS • بعد از تعریف سگمنت پشته باید تعدادی بایت را برای استفاده در دستورات PUSH و POP تعریف نمود. STACKSG SEGMENT DB 100 DUP(?) STACKSG ENDS
بیان کلی دستورات در اسمبلی • شکل دستورات در زبان اسمبلی معمولا به صورت زیر می باشد: • Opcode Destination, Source • مثال • ADD AL, 02H • MOV BL, AH
بیان کلی دستورات در اسمبلی • اما شکل کلی دستورات در اسمبلی به صورت زیر است: • Label: Opcode Destination, Source ;Comment • مثال: • Loop1: ADD AL, 02H ;AL = AL + 2 • NEXT: MOV BL, AH ;Copy AH to BL • Label: • برای استفاده در دستورات پرش از label استفاده می نماییم: JMP Loop1 …. Loop1: ADD AL, 02H
بیان کلی دستورات در اسمبلی • Comment: • برای نوشتن توضیح در هر خط از برنامه از Comment استفاده می کنیم. • در اسمبلی برای نوشتن توضیح از ; استفاده می نماییم. یعنی هر جا اسمبلر این علامت را دید آنرا جزء دستورات برنامه محسوب نمی کند و در نتیجه اسمبل نمی نماید. • همانند عبارت // در زبان C++ است. • توضیحات را می توان به هر زبانی (فارسی، انگلیسی و ... ) نوشت.
انواع دیگر روشهای تعریف سگمنت • این قسمت حذف شده است.