زبان ماشین و اسمبلی
This presentation is the property of its rightful owner.
Sponsored Links
1 / 42

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


  • 93 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


2209640

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

شروع برنامه نویسی

دانشگاه آزاد اسلامی واحد نیک شهر

سعید آشیان


2209640

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

stack

  • سه بخش اصلی هر برنامه

    • Data

    • Stack

    • Code

data

code


2209640

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


2209640

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


Data type

تعریف انواع داده (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


2209640

تعریف متغیر از نوع بایت

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’


2209640

تعریف متغیر از نوع 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’


2209640

نحوه قرار گیری داده ها در حافظه

1000

1001

c5

1002

4f

1003

1004

….

4F

C5

WORD


Double quad ten byte

تعریف متغیر از نوع DOUBLE ، QUAD ، TEN BYTE

  • مشابه با DW

  • فضای اشغال شده بیشتر 4-8-10

  • نحوه قرار گیری در حافظه مشابه WORD

  • مثال :

  • X1 DD 43FAC254H

200

54

201

c2

202

fa

43

43

FA

C2

54


2209640

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


2209640

دستورات محاسباتی

  • جمع

  • جمع به کمک بیت نقلی

  • تفریق

  • تفریق با بیت قرضی

  • گسترش بایت به کلمه

  • گسترش کلمه به LONG

  • ضرب

  • تقسیم

  • منفی کردن

  • کاهش

  • افزایش

  • جمع BCD

  • تفریق BCD

  • ...


2209640

جمع (ADD)

PF

ADD DEST,SRC

OF

CF

DEST←DEST+SRC

SF

ZF

AF


2209640

جمع (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


2209640

جمع با بیت نقلی (ADC)

PF

ADC DEST,SRC

OF

CF

DEST←DEST+SRC+ CF

SF

ZF

AF


2209640

تفریق (SUB)

PF

SUB DEST,SRC

OF

CF

DEST←DEST-SRC

SF

ZF

AF


2209640

تفریق به کمک بیت قرضی (SBB)

PF

SBB DEST,SRC

OF

CF

DEST←DEST-(SRC+CF)

SF

ZF

AF


Byte word

گسترش 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


Byte word1

گسترش 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


2209640

دستورات گسترش داده

  • CBWConvert Byte to Word

  • CWDConvert Word to Byte


2209640

ضرب ( MUL)

BYTE * BYTE

WORD

DOUBLE

MUL

BYTE * WORD

WORD * WORD

DOUBLE


2209640

MUL

BYTE * BYTE

WORD

MUL OPERAND

AX ← OPERAND * AL


2209640

مثال

MOV AL,100

MOV BL,200

MUL BL

AX=200*100=20000

MOV AL,100

MUL 55

AX=55*100=5500

در ضرب بایت در بایت همیشه یکی از اپرند ها AL است


2209640

MUL

WORD * WORD

DOUBLE

MUL OPERAND

AX

DX

← OPERAND * AX


2209640

مثال

MOV AX,1000

MOV CX,5000

MUL CX

(AX,DX) ← AX * CX

DX

AX

4C

4B40


2209640

MUL

WORD * BYTE

WORD * WORD

DOUBLE

CBW

MOV AL,100

CBW

MUL BX

MOV AX,0064H

MUL BX

(DX,AX)←AX*BX


2209640

ضرب

همیشه یکی از اپراند ها در AL یا AX قرار دارد

  • ضرب اعداد بی علامت (UNSIGNED)

  • ضرب علامتدار (SIGNED)

MUL

IMUL

نتیجه محاسبات در AX یا در (DX,AX) قرار می گیرد


Division

تقسیم DIVISION

AX ÷ byte

WORD ÷ BYTE

DIV

DOUBLE ÷ WORD

(DX AX) ÷ word


2209640

DIV

DIV OPERAND8

DIV OPERAND16

OPERAND8

OPERAND16

AX

DX,AX

AL

AX

AH

DX


2209640

مثال

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


2209640

تمرین

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


2209640

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


2209640

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


2209640

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


2209640

تکلیف

  • برنامه ای بنویسید که نمرات 5 درس را از حافظه خوانده و معدل آن را محاسبه نماید

  • برنامه ای بنویسید که یک درجه حرارت را از سلسیوس به فارنهایت تبدیل نماید

  • برنامه ای بنویسید که روز ماه و سال تولد و تاریخ روز را از حافظه خوانده و تعداد روزهای زندگی را محاسبه نماید

  • برنامه ای بنویسید که تاریخ روز را خوانده و تعیین کند که امروز چند شنبه است

  • برنامه ای بنویسید که تاریخ شمسی را به میلادی تبدیل نماید (؟؟؟)


2209640

تقسیم

  • علامتدار

  • بی علامت

همواره عملوند اول تقسیم در (DX,AX) یا AX قرار دارد

idiv

div

خارج قسمت در AL یا AX قرار می گیرد و باقیمانده در AHیا DX قرار میگیرد


Increament

افزایش 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


2209640

کاهش 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


Negative

قرینه کردن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


2209640

مثال

  • برنامه ای بنویسید که بدون استفاده از دستورالعمل ضرب دو متغیر X و Y را در هم ضرب کرده حاصل را در Z ذخیره نماید .

  • X و Y هشت بیتی و Z شانزده بیتی است .

Int x=10,y=5,sum=0;

For (i=x; i>0;i--)

Sum+=y;


2209640

Stacksg segment stack ‘stack’

Dw 320h dup(0)

Stackseg ends

Datasg segment ‘data’

X db 10

Y db 5

Z dw 0

Datasg ends


2209640

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


2209640

پایان


  • Login