View difference between Paste ID: NRSeUVJA and 4zz927X5
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...$" 
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
21+
mov si,0 // האינדקס של המקומות במערך 2
22-
mov bx,0
22+
mov bx,0 // האינדקס של המקומות במערך 1
23-
mov cx,35
23+
mov cx,35 // תנאי עצירה
24
25-
first:
25+
first: // תחילת הלולאה שמעתיקה את מערך 1 לתוך מערך 2 - כולל הבדיקות
26-
mov ax,arr1[bx]
26+
mov ax,arr1[bx] // הכנסת הערך שבמערך 1 לתוך אוגר 
27-
jmp before_check:  
27+
jmp before_check: // ישר לאחר מכן נכנס לבדיקה - האם הערך שבתוך האוגר כבר קיים בתוך המערך השני  
28-
a1:
28+
a1: // במקרה שהערך שבתוך האוגר לא קיים במערך השני, הבדיקה מקפיצה אותו לפה 
29-
  mov arr2[si],ax
29+
  mov arr2[si],ax // הכנסת הערך לתוך המקום המתאים במערך 2
30
  inc si
31
  inc bx
32
  
33-
  loop first
33+
  loop first 
34-
  jmp finish
34+
  jmp finish // בסוף הלולאה - לסיים, כדי לא לעבור דרך הבדיקות האלה ולקלקל את המערכים
35
36-
before_check:  
36+
before_check:  // התת-תכנית שבודקת האם הערך קיים במערך 2 או לא, במקרה שכן -קופצת ללייבל איי2
37-
mov di,0
37+
mov di,0 // אינדקס חדש למערך 2 , כדי לשמור על ערכו של האינדקס הקודם
38-
check:
38+
check: // התחלת הבדיקה
39-
mov dx,arr2[di]
39+
mov dx,arr2[di] // הכנסת הערך שבמערך 2 לתוך אוגר די-איקס
40-
cmp ax,dx
40+
cmp ax,dx // השוואה- האם הוא קיים או לא
41-
jz a2
41+
jz a2 // אם קיים - קפוץ לאיי-2
42-
inc di
42+
inc di // אחרת, המשך בבדיקה לאורך כל המערך
43-
cmp di,36
43+
cmp di,35 // תנאי עצירה - אם כבר עבר על כל המערך ועדיין לא מצא- כנראה שהערך לא קיים.
44-
jz a1
44+
jz a1 // אם כך, חזור לאיי-1, שם הערך ייכנס למערך 2
45-
jmp check
45+
jmp check // אם לא, חזור והמשך בלולאה
46
47
a2:
48-
inc bx
48+
cmp bx,35 // קודם כל בודק מה מצב בי-איקס, אם 35- אין לאן להתקדם והתוכנית מסיימת
49-
jmp first 
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.