Merge two sorted arrays in NASM
While OP seemed to find the comments useful, we're supposed to put this stuff in answers.  Seems about as sensible as Jeopardy's "put your response in the form of a question."  Still, that's the rule, so:


Why are you doing jmp merge_from_2? Where do you think the execution is going to go if you don't do that jmp?
And in copy2, why have 2 jumps, instead of just jnz merge_from_2?
Which brings us to jz copy1. In copy1, you are going to check if esi is zero. But you just checked that before the jz.  If there no way to get to copy1 with esi zero, then checking for zero there is redundant. And if you remove the test/jz, that just leaves jmp merge_from_1. Why have a jump to a jump?


And one more:


When you do dec edi or dec esi, the dec sets the flags.  You can do the conditional jump right there.  Since you are only decrementing one or the other, jumping back to a place where you test both again seems redundant.  If you check the results of the decrement, you don't need to do this.  Maybe move the begin_merge label down so you only do the 2 tests on entry.