assembly for x86
Download
Skip this Video
Download Presentation
Assembly For X86

Loading in 2 Seconds...

play fullscreen
1 / 24

Assembly For X86 - PowerPoint PPT Presentation


  • 144 Views
  • Uploaded on

Assembly For X86. Chapter 6 כתיבת תוכניות מלאות. Example 1. The Hello World Program. title Hello World Program         (hello.asm) ; This program displays “Hello, world!” .model small .stack 100h .data message db “Hello, world!”,0dh,0ah,’$’ .code main proc     mov  ax,@data

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 'Assembly For X86' - lynch


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
assembly for x86

Assembly For X86

Chapter 6

כתיבת תוכניות מלאות

slide2
Example 1. The Hello World Program.
  • title Hello World Program         (hello.asm)
  • ; This program displays “Hello, world!”
  • .model small
  • .stack 100h
  • .data
  • message db “Hello, world!”,0dh,0ah,’$’
  • .code
  • main proc
  •     mov  ax,@data
  •     mov  ds,ax
  •     mov  ah,9
  •     mov  dx,offset message
  •     int  21h
  •     mov  ax,4C00h
  •     int  21h
  • main endp
  • end main
directives
Directives
  • title – כותרת הקובץ
  • .model – הגדרת מודל הזיכרון
  • .stack – מקטע המחסנית
  • .data – מקטע הנתונים
  • .code – מקטע הקוד
  • proc – שגרה
  • endp – סיום שגרה
  • end – סיום התוכנית
slide4
הרצת התוכנית
  • editor  hello.asm
  • compiler  tasm hello (hello.obj)
  • Linker  tlink hello (hello.exe)
  • loader(dos)  hello
  • ניתן להשתמש בקבצים נוספים בתהליך:
    • lib
    • lst
slide5
הגדרת משתנים
  • a DB ?
  • b DB ‘hello’
  • c DB 100
  • d DB Ah
  • e DB 11001100b
  • a1 DW ?
  • a2 DW 3000
  • b1 DD ?
  • b2 DQ ?
slide6
דוגמא-פקודות אריתמטיות
  • ADC – חיבור עם התחשבות בדגל הנשא

.DATA

X DB 80h

Y DB 20h

.CODE

….

mov DX,3090h

add DL,x

adc DH,y

byte ptr
Byte Ptr
  • הצבת הערך 17 בכתובת 1000:

mov dl,17h

mov bx,1000h

mov [bx],dl

ניתן לרשום זאת גם כך:

mov bx,1000

mov byte ptr [bx],17h

ניתן גם לכתוב זאת בשורה אחת:

mov byte ptr[1000h],17h

word ptr
Word Ptr
  • עבור 16 סיביות:

mov DI,1000h

mov word ptr [DI],5678h

או בשורה אחת

mov word ptr[1000h],5678h

sbb sub with borrow
SBB – Sub With Borrow
  • SBB op1,op2
  • הפקודה מחסירה את op2 מ- op1 ובנוסף מחסירה את הערך שנמצא ב – CF

.DATA

X DD 70903798h

Y DD 50976549h

.CODE

mov ax,word ptr x

mov dx,word ptr x+2

sub ax,word ptr y

Sbb dx,word ptr y+2

slide10
סידרת פיבונאצ'י

.MODEL SMALL

.STACK 100h

.DATA

num db 5

res dw ?

.CODE

mov ax,@DATA

mov ds,ax

mov cx, word ptr num

mov ax,1

mov bx,ax ;fib0=fib1=1

slide11
fib:

mov dx,ax

add dx,bx

mov bx,ax

mov ax,dx

dec cx

cmp cx,0

jnz fib

mov res,dx

mov ah,4ch

int 21h

END

slide12
XCHG
  • title Exchange Two Variables 
  • .model small
  • .stack 100h
  • .data
  • value1 db 0Ah
  • value2 db 14h
  • .code
  • main proc
  •     mov  ax,@data      ; initialize DS register
  •     mov  ds,ax
  •     mov  al,value1     ; load the AL register
  •     xchg value2,al     ; exchange AL and value2
  •     mov  value1,al     ; store AL back into value1
  •     mov  ax,4C00h      ; exit program
  •     int  21h
  • main endp
  • end main
slide13
פעולות על סיביות
  • AND op1,op2 ; op1 = op1 & op2
  • TEST op1,op2 ; flags op1 & op2
  • OR op1,op2
  • XOR op1,op2
  • NEG op1
  • SHR op1,num ;op1=op1>>num
  • SHL op1,num ;CF הסיבית שיצאה נמצאת ב
  • ROR op1,num ;rotate right
  • ROL op1,num ;rotate left
rcr rcl
RCR,RCL
  • RCR al,3
  • הזזת 3 סיביות ימינה דרך CF
  • סיבית 0 זזה ל- CF , CF זז לסיבית 7 וכו'
  • RCL dl,4
  • הזזת 4 סיביות שמאלה דרך CF
slide15
פניה לכתובות בזיכרון

.DATA

x dw 6 ;x=0

y db 7 ;y=2

z dd 9 ;z=3

dw 88 ;z+4 or w-2

w dw 89 ;w=9

slide16
יצירת היסט עם תוית

var db 5

mov al,var

mov al,[var]

mov al,[bx+var]

mov al,[bx]+var

mov al,[bx+si+var+3]

mov al,var[bx][si]+3

var[bx]  [bx]+var  [bx+var]

var[bx][si]  [var+bx+si]  [bx+si]+var

slide17
קביעת סגמנט
  • mov ax,ds:[si+7]
  • ניתן גם לא לקבוע סגמנט ואז:
    • אם בתוך הסוגריים משתמשים ב- BP יבחר SS
    • אם בסוגריים יש תוית אזי יבחר הסגמנט של התוית
    • אם בסוגריים נמצא BX יבחר DS
    • אסור לרשום mov dl,[2]
    • אבל מותר: mov dl,DS:[2]
offset
הגדרת offset
  • מציינת את ההיסט של הכתובת יחסית לסגמנט כלומר כתובת הנתון בתוך הסגמנט

.data

aList db 10h,20h,30h

sum   db 0

.code

mov bx,offset aList   

mov al,[bx] ; AL = 10h

inc bx

add al,[bx] ; AL = 30h

inc bx

add al,[bx] ; AL = 60h

mov si,offset sum ; get offset of sum

mov [si],al ; store the sum

16 bit
חיבור 16 bit
  • .data
  • wordList dw 1000h,2000h,3000h
  • sum      dw 0
  • .code
  • mov bx,offset wordList
  • mov ax,[bx] ; first number
  • add ax,[bx+2] ; second number
  • add ax,[bx+4] ; third number
  • mov [bx+6],ax ; store the sum
slide20
קבועים
  • .data
  • string db "This is a string."
  • COUNT  = ($ – string)   
  • .code
  • mov   cx,COUNT
  • mov   si,offset string 
  • L1: 
  • mov   ah,2
  • mov   dl,[si]
  • int   21h
  • inc   si
  • loop  L1
16 bit1
16 Bit
  • .data
  • intarray dw 100h,200h,300h,400h
  • COUNT = ($ – intarray) / 2
  • .code
  • mov   ax,0
  • mov   di,offset intarray 
  • mov   cx,COUNT
  • L1: 
  • add   ax,[di]
  • add   di,2
  • loop  L1
slide22
מערכים
  • הגדרת מערך בשם arr בגודל 10 מאותחל ב-1
  • arr DW 10 dup(1)
  • גישה לאבר החמישי:
  • mov ax,[arr+10]
  • mov si,10
  • mov ax,arr[si]
lea load effective address
LEA-Load Effective Address
  • ניתן לכתוב:
  • mov bx,offset string[3]
  • אך אסור להשתמש באוגרים:
  • mov bx,offset string[si+3]
  • כיוון שפענוח הכתובת נעשה בזמן הידור ולא בזמן ריצה.
  • הפתרון:
  • lea bx,string[3+si]
slide24
LDS
  • lds bx,1000h
  • הפקודה טוענת 32 סיביות מהזיכרון ככתובת המורכבת ממקטע והיסט.
  • ההיסט נטען לאוגר bx, המקטע לאוגר ds
  • אם משתמשים בשם משתנה הוא חייב להיות מוגדר DD (4 בתים)
  • קיימות גם פקודות LES, LSS, LFS, LGS
ad