View difference between Paste ID: 4mmA4p7x and NRSeUVJA
SHOW: | | - or go back to the newest paste.
1
; multi-segment executable file template.
2
3
data segment
4
    ; add your data here!
5-
    pkey db "press any key...$" 
5+
    arr1 DB 1,2,2,4,1,6,6,6
6-
    arr1 DB 36dup (?)
6+
    arr2 DB 8 dup (0)
7-
    arr2 DB 36dup (?)
7+
8
9
stack segment
10
    dw   128  dup(0)
11
ends
12
13
code segment
14
start:
15
; set segment registers:
16
    mov ax, data
17
    mov ds, ax
18
    mov es, ax
19
20
mov si,0 
21-
mov si,0 // האינדקס של המקומות במערך 2
21+
mov bx,0 
22-
mov bx,0 // האינדקס של המקומות במערך 1
22+
mov cx,7
23-
mov cx,35 // תנאי עצירה
23+
24
first: 
25-
first: // תחילת הלולאה שמעתיקה את מערך 1 לתוך מערך 2 - כולל הבדיקות
25+
mov al,arr1[bx]
26-
mov ax,arr1[bx] // הכנסת הערך שבמערך 1 לתוך אוגר 
26+
jmp before_check:
27-
jmp before_check: // ישר לאחר מכן נכנס לבדיקה - האם הערך שבתוך האוגר כבר קיים בתוך המערך השני  
27+
a1:
28-
a1: // במקרה שהערך שבתוך האוגר לא קיים במערך השני, הבדיקה מקפיצה אותו לפה 
28+
  mov arr2[si],al
29-
  mov arr2[si],ax // הכנסת הערך לתוך המקום המתאים במערך 2
29+
30
  inc bx
31
  
32
  cmp bx, 8
33-
  loop first 
33+
  jne first
34-
  jmp finish // בסוף הלולאה - לסיים, כדי לא לעבור דרך הבדיקות האלה ולקלקל את המערכים
34+
  jmp finish
35
36-
before_check:  // התת-תכנית שבודקת האם הערך קיים במערך 2 או לא, במקרה שכן -קופצת ללייבל איי2
36+
before_check:
37-
mov di,0 // אינדקס חדש למערך 2 , כדי לשמור על ערכו של האינדקס הקודם
37+
mov di,0 
38-
check: // התחלת הבדיקה
38+
check: 
39-
mov dx,arr2[di] // הכנסת הערך שבמערך 2 לתוך אוגר די-איקס
39+
mov dl,arr2[di]
40-
cmp ax,dx // השוואה- האם הוא קיים או לא
40+
cmp al,dl
41-
jz a2 // אם קיים - קפוץ לאיי-2
41+
jz a2 
42-
inc di // אחרת, המשך בבדיקה לאורך כל המערך
42+
inc di
43-
cmp di,35 // תנאי עצירה - אם כבר עבר על כל המערך ועדיין לא מצא- כנראה שהערך לא קיים.
43+
cmp di,7 
44-
jz a1 // אם כך, חזור לאיי-1, שם הערך ייכנס למערך 2
44+
jz a1 
45-
jmp check // אם לא, חזור והמשך בלולאה
45+
jmp check
46
47-
a2:
47+
a2:      
48-
cmp bx,35 // קודם כל בודק מה מצב בי-איקס, אם 35- אין לאן להתקדם והתוכנית מסיימת
48+
inc bx
49-
je finish // הקפיצה לסיום
49+
cmp bx,8
50-
inc bx // אם לא, קדם את בי-איקס באחד וע"י כך התעלם מהערך שכבר קיים במערך
50+
je finish 
51-
jmp first // חזור להתחלה
51+
jmp first
52
53
54
55
finish: nop
56-
            
56+
57-
    lea dx, pkey
57+
58-
    mov ah, 9
58+
59-
    int 21h        ; output string at ds:dx
59+