190 likes | 411 Views
Assembly For X86. Chapter 3 פקודות בסיסיות. סוגי פקודות. פקודות להעברת מידע פקודות אריטמטיות פקודות לוגיות פקודות הסתעפות פקודות מחרוזת פקודות בקרה פקודות ל- Protected Mode. מבנה הפקודות. פקודה. אופרנד ,אופרנד. MOV AX , 56 ADD [SI] , DL CMP CX , BX. יעד. מקור.
E N D
Assembly For X86 Chapter 3 פקודות בסיסיות
סוגי פקודות • פקודות להעברת מידע • פקודות אריטמטיות • פקודות לוגיות • פקודות הסתעפות • פקודות מחרוזת • פקודות בקרה • פקודות ל- Protected Mode
מבנה הפקודות פקודה אופרנד ,אופרנד MOV AX , 56 ADD [SI] , DL CMP CX , BX יעד מקור ; כתיבת הערות
MOV MOV DX,3456H MOV AL,32H MOV AX,11110000B MOV AH,DL MOV [BX+1],DL MOV BX,1000H MOV AL,88 MOV [BX],AL MOV SI,819H MOV DH,[SI]
שגיאות נפוצות MOV [300],6 MOV [AX],DL MOV [BX],BL MOV [BX],[DI] MOV [BX+AX],DL MOV [SI+DI],BH ;[BX+SI] / [BX+DI] MOV [SI],47H
תוכנית להחלפת שני נתונים בזיכרון CODE SEGMENT ASSUME CS:CODE,DS:CODE START: MOV SI,700H MOV DI,800H MOV AL,[SI] MOV AH,[DI] MOV [SI],AH MOV [DI],AL CODE ENDS END START
INC הפקודה INC DL ;DL=DL+1 INC SI ;SI=SI+1 INC [SI] ;ERROR DEC הפקודה DEC DL ;DL=DL-1 DEC SI ;SI=SI-1 DEC [SI] ;ERROR
ADD ADD CH,5 ;CH=CH+5 ADD DI,67 ADD BX,AX ADD DL,DL ADD AL,[BX] ADD [DI],CL ADD [BX],4 ;ERROR ADD [SI],[DI] ADD CX,DH ;ERROR 8/16 BIT ADD AL,590H ;OVERFLOW
SUB SUB AL,7 SUB [BX],DL SUB DL,DH CMP CMP AL,7 ;AL - 7 CMP BX,CX CMP [SI],CL CMP [SI],[DI] ;ERROR CMP [BX],4 CMP AL,BX ;8/16 BIT
JMP MOV AL,3 MOV BL,88 JMP lbl MOV DX,22 ; שורה זו לא מתבצעת lbl: MOV DX,11 עבור התווית מותר להשתמש האותיות ספרות או התווים הבאים $ , @ , _ , ? , . אסור להכניס רווחים או להשתמש במילים שמורות אסור להתחיל בספרה או בנקודה
CONDITIONAL JUMP JE - JUMP IF EQUAL JNE - JUMP IF NOT EQUAL JG - JUMP IF GREATER JL - JUMP IF LESS JGE - JUMP IF GREATER OR EQUAL JLE - JUMP IF LESS OR EQUAL JZ - JUMP IF ZERO JNZ - JUMP IF NOT ZERO JC - JUMP IF CARRY JO - JUMP IF OVERFLOW JP - JUMP IF PARITY
דוגמאות CMP AL,DL JG BYE MOV AL,0 MOV DL,0 BYE: NOP MOV SI,449H MOV DL,[SI] CMP DL,3 JNE SOF MOV SI,800H MOV AL,0FFH ; חייבים אפס מוביל MOV [SI],AL SOF: NOP
מה מבצעת התוכנית MOV SI,500H MOV DI,550H MOV AL,[SI] MOV DL,[DI] CMP AL,DL JZ SOF MOV [SI],DL MOV [DI],AL SOF: NOP משווה בין תאי הזיכרון 550,500 ואם הם שונים ערכיהם מוחלפים
לולאות SEG SEGMENT ASSUME CS:SEG,DS:SEG BEGIN: MOV AX,SEG MOV DS,AX MOV AL,8 ;THE VALUE MOV BX,400H ;THE ADDRESS MOV CX,21H ;COUNTER AGAIN: MOV [BX],AL INC BX DEC CX ;LOOP AGAIN JNZ AGAIN ; SEG ENDS END BEGIN
דוגמאות נתון מערך תווים בכתובות 140-180 יש לבדוק את מספר המופעים של האות A CODE SEGMENT ASSUME CS:CODE,DS:CODE START: MOV AX,CODE MOV DS,AX MOV AL,0 ;THE RESULT MOV BX,140H MOV CX,41H CHECK: MOV AH,[BX] CMP AH,11H JNE CONT INC AL CONT: INC BX LOOP CHECK CODE ENDS END START
בדיקת מיון של בלוק נתונים CODE SEGMENT ASSUME CS:CODE,DS:CODE START: MOV AX,CODE MOV DS,AX MOV SI,800H ;STARTING ADDRESS MOV CX,9H ;SIZE OF ARRAY = 10 CHECK: MOV DL,[SI] CMP DL,[SI+1] JNL BAD INC SI LOOP CHECK JMP GOOD BAD: MOV AX,0 ;FUNCTION RETURN 0 JMP SIUM GOOD: MOV AX,0FFH SIUM: NOP CODE ENDS END START
סיכום תאי מערך CODE SEGMENT ASSUME CS:CODE,DS:CODE START: MOV AX,CODE MOV DS,AX MOV SI,1000H ;START MOV CX,5 ;SIZE OF ARRAY MOV AL,0 CONT: ADD AL,[SI] INC SI LOOP CONT MOV SI,1200H ;RESULT ADDRESS MOV [SI],AL CODE ENDS END START
מבנה תוכנית DATA1 segment …. DATA1 ends ST segment stack … ST ends CODE1 segment ASSUME cs:CODE1, ds:DATA1, ss:ST Start: mov AX,DATA1 mov DS,AX ….. גוף התוכנית …. CODE1 ENDS END Start
גישה עדיפה .model small .stack 100h .data disp db 'hello world',13,10,'$' .code begin: mov ax,@data mov ds,ax ….גוף התוכנית end begin