1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| data segment count db 5 array label byte db 1,2,3,4,5 data ends code segment assume ds:data,cs:code start: mov dx,data mov ds,dx mov ch,[count] ;设置数组长度 mov ah,0ffh ;设置退出标志位不要直接退出 next2: cmp ah,00h jz exit dec ch ;循环次数n-1次 jz exit mov cl,ch ;内层循环次数等于外层循环剩余次数 lea bx,array ;bx指针归位 mov ah,00h ;提前退出标志归位 next3: mov al,[bx] cmp al,1[bx] jae next1 xchg al,1[bx] mov [bx],al mov ah,0ffh next1: inc bx dec cl jz next2 jmp next3 exit: call breakPoint mov ah,4ch int 21h
breakPoint: push bx ;bx压栈,保护起来 pushf ;psw压栈 pop bx ;上一条保存的psw内容弹出到bx or bh,3 ;TF、IF置1,开中断,单步调试 push bx ;bx压栈 popf ;上一条压栈的bx内容弹出到psw pop bx ;最开始压栈的bx弹出,恢复数据 ret code ends end start
|