帮我解释下这一很少断的汇编代码?排列9个数的小算法 帮我注释下每行什么意思 最好给个例子解释下

问题描述:

帮我解释下这一很少断的汇编代码?排列9个数的小算法 帮我注释下每行什么意思 最好给个例子解释下
sort:
mov\x05\x05 bx,1
xor\x05\x05 di,di\x05\x05\x05;将di置0 \x05\x05
mov\x05\x05 cx,9
loop1:
mov\x05\x05 al,buf[di] ;取一个字节放入al中
cmp\x05\x05 al,buf[di+1] ;然后进行比较,
jnb\x05\x05 cotinue\x05 ;大于等于跳转到next1
xchg\x05 buf[di+1],al\x05;否则交换一下数据
mov\x05\x05 buf[di],al ;取al一个字节送入内存中
mov\x05\x05 bx,0\x05\x05\x05
cotinue:
inc\x05\x05 di ;di自加1
loop\x05 loop1
cmp\x05\x05 bx,0\x05\x05\x05
je\x05\x05 sort
看了好久都看不懂
我想知道它是怎样排序的 能给个例子结合说说吗 单单表面那些指令我都看得懂,可是不知道它怎样工作的,
1个回答 分类:综合 2014-11-27

问题解答:

我来补答
画个内存图就很好理解了
buf=999 12 98 65 71 99 0 24 0 0
buf[di] =999
buf[di+1] = 12
buf[di] >= buf[di+1]
交换
buf=12 999 98 65 71 99 0 24 0 0
di=di+1
循环 又从loop1:开始了
buf[di]=999 buf[di+1] = 98
再问: 其实我想问 mov bx,1 和mov bx,0 这两行代码的作用是怎样的 为什么这样设置
再答: 999 12 98 65 71 99 0 24 0 0 两层循环 loop1 内层循环是最大的数提前 * = buf[di] 999* 12 98 65 71 99 0 24 0 0 12 999* 98 65 71 99 0 24 0 0 12 98 999* 65 71 99 0 24 0 0 ..... 12 98 65 71 99 0 24 0 0 999 外层循环 cmp bx,0 je sort 反复的提前较大的数 直到在loop1循环里 整个数组没改动过 loop1 12* 98 65 71 99 0 24 0 0 999 12 98* 65 71 99 0 24 0 0 999 12 65 98* 71 99 0 24 0 0 999 12 65 71 98* 99 0 24 0 0 999 12 65 71 98 99* 0 24 0 0 999 12 65 71 98 0 99* 24 0 0 999 ... 12 65 71 98 0 24 0 0 99* 999 数组改过 bx=0 跳到sort: sort: 12 65 71 98 0 24 0 0 99 999 ... 12 65 71 0 24 0 0 98 99 999 sort: ... 12 65 0 24 0 0 71 98 99 999 直到 0 0 0 12 24 65 71 98 99 999 再次执行 loop1时 整个数组没改过 bx=1 排序已经完成了
 
 
展开全文阅读
剩余:2000
也许感兴趣的知识