可以正常运行。
分析,前面的程序都很简单,没啥问题,到了
mov ax,cs:[si]
mov cs:[di],ax
这里,由于s2处的jmp short s1指令jmp机器码为EB,之后记录的是跳转的距离,这里向上跳到s1处,所以jmp short s1只占2个字节,所以jmp short s1处的代码就被复制到s处,由于记录的是向上跳相同的距离,所以当s0执行jmp short s之后,又执行了跳到mov ax,400h处,正常结束。
个人代码:
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 2h,24h,71h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start :mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b872h
mov es,ax
mov cx,3
mov si,16
s1:push cx
mov bx,0
mov bp,0
mov cx,16
s2:mov al,ds:[bx]
mov es:[bp],al
inc bx
inc bp
mov al,ds:[si]
mov es:[bp],al
inc bp
loop s2
inc si
mov ax,es
add ax,0ah
mov es,ax
pop cx
loop s1
g:mov cx,3
loop g
mov ax,4c00h
int 21h
code ends
end start
效果: