1 / 42

زبان ماشین و اسمبلی – درس ششم

زبان ماشین و اسمبلی – درس ششم. شروع برنامه نویسی دانشگاه آزاد اسلامی واحد نیک شهر سعید آشیان. شروع برنامه سازی. stack. سه بخش اصلی هر برنامه Data Stack Code. data. code. Stacksg segment stack ‘stack’ Dw 32h dup(0) Stackseg ends.

caroun
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. شروع برنامه سازی stack • سه بخش اصلی هر برنامه • Data • Stack • Code data code

  3. Stacksg segment stack ‘stack’ Dw 32h dup(0) Stackseg ends Datasg segment ‘data’ Datasg ends data Codesg segment ‘code’ Assume ss:stacksg,ds:datasg , cs:codesg Main proc far Mov ax,datasg Mov ds,ax Mov ax,4c00h Int 21h Main endp Codesg ends End main start program

  4. Stacksg segment stack ‘stack’ Dw 32h dup(0) Stackseg ends Datasg segment ‘data’ X db 10h Y dw 1234h Datasg ends Codesg segment ‘code’ Assume ss:stacksg,ds:datasg , cs:codesg Main proc far Mov ax,datasg Mov ds,ax ;----------------------------------------- Mov ax,x Mov bx,y Add ax,bx Mov x,ax ;------------------------------------------ Mov ax,4c00h Int 21h Main endp Codesg ends End main

  5. تعریف انواع داده (DATA TYPE) VARNAME D VALUE(S) نام متغیر D مقدار (ها) X1 DB 100 1B 2B X2 DW 1200 4B X3 DD 434565 8B X4 DQ 457234572457 10B X5 DT 12312312342342

  6. تعریف متغیر از نوع بایت X1 DB 0 X8 DB 10 DUP(100) X2 DB ? X9 DB 20 DUP (?) X3 DB 25H X10 DB ‘ABCDEDFG’ X2 DB 10,20,’A’,15,’COMPUTER’ X4 DB 0AFH X5 DB 01011110B X6 DB 15,100,200 X7 DB ‘A’,’B’,’C’,’D’

  7. تعریف متغیر از نوع WORD X1 DW 0 X8 DW 10 DUP(100) X2 DW ? X9 DW 20 DUP (?) X3 DW 1225H X10 DW ‘AB’ X2 DW 10,20,’AC’,15 X4 DW 0A12FH X5 DW 01011110B X6 DW 15,100,200 X7 DW ‘A’,’B’,’C’,’D’

  8. نحوه قرار گیری داده ها در حافظه 1000 1001 c5 1002 4f 1003 1004 …. 4F C5 WORD

  9. تعریف متغیر از نوع DOUBLE ، QUAD ، TEN BYTE • مشابه با DW • فضای اشغال شده بیشتر 4-8-10 • نحوه قرار گیری در حافظه مشابه WORD • مثال : • X1 DD 43FAC254H 200 54 201 c2 202 fa … 43 43 FA C2 54

  10. Stacksg segment stack ‘stack’ Dw 32h dup(0) Stackseg ends Datasg segment ‘data’ a db B dw 1000 C dd ? D dq dup (?) Y dt 1234h Datasg ends Codesg segment ‘code’ Assume ss:stacksg,ds:datasg , cs:codesg Main proc far Mov ax,datasg Mov ds,ax ;----------------------------------------- ;------------------------------------------ Mov ax,4c00h Int 21h Main endp Codesg ends End main

  11. دستورات محاسباتی • جمع • جمع به کمک بیت نقلی • تفریق • تفریق با بیت قرضی • گسترش بایت به کلمه • گسترش کلمه به LONG • ضرب • تقسیم • منفی کردن • کاهش • افزایش • جمع BCD • تفریق BCD • ...

  12. جمع (ADD) PF ADD DEST,SRC OF CF DEST←DEST+SRC SF ZF AF

  13. جمع (ADD) ADD AX, BX AX ← AX+ BX ADD AX, M AX ← AX+ M CORRECT M ← M+ AX ADD M,AX ADD CX,0FC25H CX ← CX+ 0FC25H ADD M,N ERROR ADD AL,CX

  14. جمع با بیت نقلی (ADC) PF ADC DEST,SRC OF CF DEST←DEST+SRC+ CF SF ZF AF

  15. تفریق (SUB) PF SUB DEST,SRC OF CF DEST←DEST-SRC SF ZF AF

  16. تفریق به کمک بیت قرضی (SBB) PF SBB DEST,SRC OF CF DEST←DEST-(SRC+CF) SF ZF AF

  17. گسترش BYTE به WORD بیت علامت 0 x x x x x x x 0 0 0 0 0 0 0 0 0 x x x x x x x

  18. گسترش byte به word بیت علامت 1 x x x x x x x 1 1 1 1 1 1 1 1 1 x x x x x x x

  19. دستورات گسترش داده • CBWConvert Byte to Word • CWDConvert Word to Byte

  20. ضرب ( MUL) BYTE * BYTE WORD DOUBLE MUL BYTE * WORD WORD * WORD DOUBLE

  21. MUL BYTE * BYTE WORD MUL OPERAND AX ← OPERAND * AL

  22. مثال MOV AL,100 MOV BL,200 MUL BL AX=200*100=20000 MOV AL,100 MUL 55 AX=55*100=5500 در ضرب بایت در بایت همیشه یکی از اپرند ها AL است

  23. MUL WORD * WORD DOUBLE MUL OPERAND AX DX ← OPERAND * AX

  24. مثال MOV AX,1000 MOV CX,5000 MUL CX (AX,DX) ← AX * CX DX AX 4C 4B40

  25. MUL WORD * BYTE WORD * WORD DOUBLE CBW MOV AL,100 CBW MUL BX MOV AX,0064H MUL BX (DX,AX)←AX*BX

  26. ضرب همیشه یکی از اپراند ها در AL یا AX قرار دارد • ضرب اعداد بی علامت (UNSIGNED) • ضرب علامتدار (SIGNED) MUL IMUL نتیجه محاسبات در AX یا در (DX,AX) قرار می گیرد

  27. تقسیم DIVISION AX ÷ byte WORD ÷ BYTE DIV DOUBLE ÷ WORD (DX AX) ÷ word

  28. DIV DIV OPERAND8 DIV OPERAND16 OPERAND8 OPERAND16 AX DX,AX AL AX AH DX

  29. مثال MOV AX,102 MOV CL,5 DIV CL AL = AX / CL=20 AH= AX % CL = 2 (DX,AX)=40401200H AX= (DX,AX) / BX DX=(DX,AX) % BX MOV DX,4040H MOV AX,1200H MOV BX,500H DIV BX MOV AX, 1000 DIV 120 عملوند تقسیم نمی تواند عدد باشد ERROR

  30. تمرین • برنامه ای بنویسید که مبلغ 25575 را به سکه های 1و5و10و25 تومانی خرد کند .

  31. Stacksg segment stack ‘stack’ Dw 100h dup(0) Stackseg ends Datasg segment ‘data’ X dw 25575 c25 db ? c10 db ? c5 db ? c1 db ? Datasg ends

  32. Codesg segment ‘code’ Assume ss:stacksg,ds:datasg , cs:codesg Main proc far Mov ax,datasg Mov ds,ax ;----------------------------------------- mov cl,25 Mov ax ,x Div cl Mov c25,al mov cl,10 Mov al ,ah Cbw Div cl Mov c10,al

  33. Mov cl,5 Mov al,ah Cbw Div cl Mov c5,al Mov c1,ah ;------------------------------------------ Mov ax,4c00h Int 21h Main endp Codesg ends End main

  34. تکلیف • برنامه ای بنویسید که نمرات 5 درس را از حافظه خوانده و معدل آن را محاسبه نماید • برنامه ای بنویسید که یک درجه حرارت را از سلسیوس به فارنهایت تبدیل نماید • برنامه ای بنویسید که روز ماه و سال تولد و تاریخ روز را از حافظه خوانده و تعداد روزهای زندگی را محاسبه نماید • برنامه ای بنویسید که تاریخ روز را خوانده و تعیین کند که امروز چند شنبه است • برنامه ای بنویسید که تاریخ شمسی را به میلادی تبدیل نماید (؟؟؟)

  35. تقسیم • علامتدار • بی علامت همواره عملوند اول تقسیم در (DX,AX) یا AX قرار دارد idiv div خارج قسمت در AL یا AX قرار می گیرد و باقیمانده در AHیا DX قرار میگیرد

  36. افزایش INCREAMENT INC OPERAND INC MEM INC X مثال INC REG8 INC AL INC REG16 INC CX INC REG32 INC EBX OF SF ZF AF PF CF

  37. کاهش DECREAMENT DEC OPERAND DEC MEM DEC X مثال DEC REG8 DEC AL DEC REG16 DEC CX DEC REG32 DEC EBX OF SF ZF AF PF CF

  38. قرینه کردنNEGATIVE NEG REG8 NEG CL NEG OPERAND مثال NEG REG16 NEG AX NEG REG32 NEG EBX NEG MEM NEG X قرینه کردن معادل با مکمل دو عدد است OF SF ZF AF PF CF

  39. مثال • برنامه ای بنویسید که بدون استفاده از دستورالعمل ضرب دو متغیر X و Y را در هم ضرب کرده حاصل را در Z ذخیره نماید . • X و Y هشت بیتی و Z شانزده بیتی است . Int x=10,y=5,sum=0; For (i=x; i>0;i--) Sum+=y;

  40. Stacksg segment stack ‘stack’ Dw 320h dup(0) Stackseg ends Datasg segment ‘data’ X db 10 Y db 5 Z dw 0 Datasg ends

  41. Codesg segment ‘code’ Assume ss:stacksg,ds:datasg , cs:codesg Main proc far Mov ax,datasg Mov ds,ax ;------------------------------------------------------------ Mov al,0 Mov al,y Mov cx, x For : Add z, ax Loop for ;------------------------------------------------------------ Mov ax,4c00h Int 21h Main endp Codesg ends End main

  42. پایان

More Related