Ausdruck 1. 8080 Assemblersprache der Shell-Metzner-Sortierung 1: 2: 3: ; 4: ; General sort routine, in memory 5: ; 6: ; 7: ; 8: ; 9: AB00 orig org 0ab00h ;chance this for dif loc 10: AB00 = n1: equ orig 11: AB02 = m1: equ n1+2 12: AB04 = k1: equ m1+2 13: AB06 = j1: equ k1+2 14: AB08 = i1: equ j1+2 15: AB0A = ml1: equ i1+2 16: AB0C = dj1: equ ml1+2 17: AB0E = di1: equ dj1+2 18: ; 19: AB00 ds 16 20: ; 21: AB10 2A06AB lhld j1 ;get st adr 22: AB13 E5 push h ; save 23: AB14 2A04AB lhld k1 ;get lencth 24: AB17 E5 push h ;save 25: AB18 AF div: xra a ;m1=m1/2 26: AB19 2A02AB lhld m1 27: AB1C 7C mov a,h 28: AB1D 1F rar 29: AB1E 67 mov h,a 30: AB1F 7D mov a,l 31: AB20 1F rar 32: AB21 6F mov l,a 33: AB22 2202AB shld m1 ;save new m1 34: ; 35: AB25 B4 ora h ;check if done 36: AB26 C22CAB jnz ndon 37: AB29 C1 pop b ;done, return 38: AB2A D1 pop d 39: AB2B C9 ret 40: ; 41: ;set k1=n1-m1 42: ; 43: AB2C EB ndon: xchg ;m1 to de 44: AB2D 2A00AB lhld n1 45: AB30 7D mov a,l 46: AB31 93 sub e 47: AB32 6F mov l,a 48: AB33 7C mov a,h 49: AB34 9A sbb d 50: AB35 67 mov h,a 51: AB36 2204AB shld k1 52: ; 53: AB39 210100 lxi h,1 ;set & save i=j=1 54: AB3C 2206AB shld j1 55: AB3F 2208AB shld i1 56: ; 57: ;calc & save addr offset = m1*l1 58: ; 59: AB42 2D dcr l 60: AB43 C1 pop b ;len of str=l1 61: AB44 C5 push b 62: AB45 19 lp1: dad d 63: AB46 0B dcx b 64: AB47 78 mov a,b 65: AB48 B1 ora c 66: AB49 C245AB jnz lp1 67: AB4C 220AAB shld ml1 68: ; 69: AB4F EB xchg ;calc & save d(j), d(i), d(i+m) 70: AB50 C1 pop b 71: AB51 E1 pop h 72: AB52 E5 push h 73: AB53 C5 push b 74: AB54 220CAB lp2: shld dj1 75: AB57 220EAB shld di1 76: AB5A EB xchg 77: AB5B 19 dad d 78: AB5C EB xchg ;hl has d(i), de has d(i+m> 79: ; 80: ;compare strings & switch 81: ; 82: AB5D C1 cp1: pop b ;len of string=l1 83: AB5E C5 push b 84: AB5F 1A lp3: ldax d ;compare ea byte 85: AB60 96 sub m 86: AB61 C26FAB jnz neq 87: AB64 23 inx h ;if = compare next byte 88: AB65 13 inx d 89: AB66 0B dcx b 90: AB67 78 mov a,b 91: AB6B B1 ora c 92: AB69 C25FAB jnz lp3 93: AB6C C3ABAB jmp nsw ;if done, don' t switch 94: ; 95: AB6F D2A8AB neq: jnc nsw ;if d(i)k 142: ; 143: ABA8 2A06AB nsw: lhld j1 144: ABAB 23 inx h ;save new j=old j+1 145: ABAC 2206AB shld j1 146: ABAF 2208AB shld i1 147: ABB2 EB xchg 148: ABB3 2A04AB lhld k1 149: ABB6 7D mov a,l 150: ABB7 93 sub e 151: ABB8 7C mov a,h 152: ABB9 9A sbb h 153: ABBA DA18AB jc div ;if j>k goto beginning divide m1 154: ; 155: ;calc new d(j), d(i) 156: ; 157: ABBD 2A0CAB lhld dj1 158: ABC0 D1 pop d 159: ABC1 D5 push d 160: ABC2 19 dad d ;new d(j)=old d(j+1) 161: ABC3 EB xchg 162: ABC4 2A0AAB lhld ml1 ;addr offset 163: ABC7 EB xchg 164: ABC8 C354AB jmp lp2