keren

שאלה 7 בגרות 2009

May 8th, 2012
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; multi-segment executable file template.
  2.  
  3. data segment
  4.     ; add your data here!
  5.     pkey db "press any key...$"
  6.     arr1 DB 36dup (?)
  7.     arr2 DB 36dup (?)
  8. ends
  9.  
  10. stack segment
  11.     dw   128  dup(0)
  12. ends
  13.  
  14. code segment
  15. start:
  16. ; set segment registers:
  17.     mov ax, data
  18.     mov ds, ax
  19.     mov es, ax
  20.  
  21. mov si,0 // האינדקס של המקומות במערך 2
  22. mov bx,0 // האינדקס של המקומות במערך 1
  23. mov cx,35 // תנאי עצירה
  24.  
  25. first: // תחילת הלולאה שמעתיקה את מערך 1 לתוך מערך 2 - כולל הבדיקות
  26. mov ax,arr1[bx] // הכנסת הערך שבמערך 1 לתוך אוגר
  27. jmp before_check: // ישר לאחר מכן נכנס לבדיקה - האם הערך שבתוך האוגר כבר קיים בתוך המערך השני  
  28. a1: // במקרה שהערך שבתוך האוגר לא קיים במערך השני, הבדיקה מקפיצה אותו לפה
  29.   mov arr2[si],ax // הכנסת הערך לתוך המקום המתאים במערך 2
  30.   inc si
  31.   inc bx
  32.  
  33.   loop first
  34.   jmp finish // בסוף הלולאה - לסיים, כדי לא לעבור דרך הבדיקות האלה ולקלקל את המערכים
  35.  
  36. before_check:  // התת-תכנית שבודקת האם הערך קיים במערך 2 או לא, במקרה שכן -קופצת ללייבל איי2
  37. mov di,0 // אינדקס חדש למערך 2 , כדי לשמור על ערכו של האינדקס הקודם
  38. check: // התחלת הבדיקה
  39. mov dx,arr2[di] // הכנסת הערך שבמערך 2 לתוך אוגר די-איקס
  40. cmp ax,dx // השוואה- האם הוא קיים או לא
  41. jz a2 // אם קיים - קפוץ לאיי-2
  42. inc di // אחרת, המשך בבדיקה לאורך כל המערך
  43. cmp di,35 // תנאי עצירה - אם כבר עבר על כל המערך ועדיין לא מצא- כנראה שהערך לא קיים.
  44. jz a1 // אם כך, חזור לאיי-1, שם הערך ייכנס למערך 2
  45. jmp check // אם לא, חזור והמשך בלולאה
  46.  
  47. a2:
  48. cmp bx,35 // קודם כל בודק מה מצב בי-איקס, אם 35- אין לאן להתקדם והתוכנית מסיימת
  49. je finish // הקפיצה לסיום
  50. inc bx // אם לא, קדם את בי-איקס באחד וע"י כך התעלם מהערך שכבר קיים במערך
  51. jmp first // חזור להתחלה
  52.  
  53.  
  54.  
  55. finish: nop
  56.            
  57.    lea dx, pkey
  58.    mov ah, 9
  59.    int 21h        ; output string at ds:dx
  60.    
  61.    ; wait for any key....    
  62.    mov ah, 1
  63.    int 21h
  64.    
  65.    mov ax, 4c00h ; exit to operating system.
  66.    int 21h    
  67. ends
  68.  
  69. end start ; set entry point and stop the assembler.
Advertisement
Add Comment
Please, Sign In to add comment