زبان ماشین و اسمبلی
Download
1 / 42

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


  • 159 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' زبان ماشین و اسمبلی – درس ششم' - caroun


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

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

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

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

سعید آشیان


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

stack

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

    • Data

    • Stack

    • Code

data

code


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


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


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

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’


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


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

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


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


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

  • جمع

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

  • تفریق

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

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

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

  • ضرب

  • تقسیم

  • منفی کردن

  • کاهش

  • افزایش

  • جمع BCD

  • تفریق BCD

  • ...


جمع (ADD)

PF

ADD DEST,SRC

OF

CF

DEST←DEST+SRC

SF

ZF

AF


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


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

PF

ADC DEST,SRC

OF

CF

DEST←DEST+SRC+ CF

SF

ZF

AF


تفریق (SUB)

PF

SUB DEST,SRC

OF

CF

DEST←DEST-SRC

SF

ZF

AF


تفریق به کمک بیت قرضی (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


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

  • CBWConvert Byte to Word

  • CWDConvert Word to Byte


ضرب ( MUL)

BYTE * BYTE

WORD

DOUBLE

MUL

BYTE * WORD

WORD * WORD

DOUBLE


MUL

BYTE * BYTE

WORD

MUL OPERAND

AX ← OPERAND * AL


مثال

MOV AL,100

MOV BL,200

MUL BL

AX=200*100=20000

MOV AL,100

MUL 55

AX=55*100=5500

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


MUL

WORD * WORD

DOUBLE

MUL OPERAND

AX

DX

← OPERAND * AX


مثال

MOV AX,1000

MOV CX,5000

MUL CX

(AX,DX) ← AX * CX

DX

AX

4C

4B40


MUL

WORD * BYTE

WORD * WORD

DOUBLE

CBW

MOV AL,100

CBW

MUL BX

MOV AX,0064H

MUL BX

(DX,AX)←AX*BX


ضرب

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

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

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

MUL

IMUL

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


Division
تقسیم DIVISION

AX ÷ byte

WORD ÷ BYTE

DIV

DOUBLE ÷ WORD

(DX AX) ÷ word


DIV

DIV OPERAND8

DIV OPERAND16

OPERAND8

OPERAND16

AX

DX,AX

AL

AX

AH

DX


مثال

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


تمرین

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


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


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


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


تکلیف

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

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

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

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

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


تقسیم

  • علامتدار

  • بی علامت

همواره عملوند اول تقسیم در (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


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


مثال

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

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

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

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

Sum+=y;


Stacksg segment stack ‘stack’

Dw 320h dup(0)

Stackseg ends

Datasg segment ‘data’

X db 10

Y db 5

Z dw 0

Datasg ends


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



ad