; multi-segment executable file template.data segment ar1 dw 1,2,4,5 len1=($-ar1) ar2 dw 1,3,6,8,9 len2=$-ar2 ar3 dw (len1+len2) dup(0) ends stack segment dw 128 dup(0) ends code segment start: ; set segment registers: mov ax, data mov ds, ax ;int ar1[]={1,2,4,5}; ;int ar2[]={1,3,6,8,9}; ;int ar3[9]={0}; ;int i1=0,i2=0,i3=0; ;while(i1<4 && i2<9) ;{ ; if(ar1[i1]<ar2[i2]) ; { ; ar3[i3]=ar1[i1]; ; i1++; ; i3++; ; } ; else ; { ; ar3[i3]=ar2[i2]; ; i2++; ; i3++; ; } ;} ;while(i1<4) ;{ ; ar3[i3]=ar1[i1]; ; i1++; ; i3++; ;} ; ;while(i2<9) ;{ ; ar3[i3]=ar2[i2]; ; i2++; ; i3++; ;} xor si,si ;i1=0 xor di,di ;i2=0 xor bx,bx ;i3=0 start_while1: cmp si,len1 JGE end_while1 cmp di,len2 JGE end_while1 mov ax,word ptr ar1[si] ; if(ar1[i1]<ar2[i2]) cmp ax,word ptr ar2[di] JGE ELSE mov word ptr ar3[bx],ax ;ar3[i3]=ar1[i1] add si,2 ;i1++ add bx,2 ;i3++ jmp NOT_ELSE ELSE: ;ELSE mov ax,word ptr ar2[di] ;ar3[i3]=ar2[i2] mov word ptr [bx],ax add di,2 ;i2++ add bx,2 ;i3++ NOT_ELSE: jmp start_while1 end_while1: start_while2: cmp si,len1 ;while(i1<4) JGE end_while2 mov ax,word ptr ar1[di] ;ar3[i3]=ar1[i1] mov word ptr ar3[bx],ax add si,2 ;i1++ add bx,2 ;i3++ jmp start_while2 end_while2: start_while3: cmp di,len2 JGE end_while3 mov ax,word ptr ar2[di] ;ar3[i3]=ar2[i2] mov word ptr [bx],ax add di,2 ;i2++ add bx,2 ;i3++ jmp start_while3 end_while3: mov ax, 4c00h ; exit to operating system. int 21h ends end start ; set entry point and stop the assembler.
|