当前位置:编程学习 > 汇编语言 >>

汇编语言的loop指令

datarea segment grade dw 88,75,95,63,98,78,87,73,90,60 rank dw 10 dup(?) datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov di,10 mov bx,0 loop: mov ax,grade[bx] mov dx,0 mov cx,10 lea si,grade next: cmp ax,[si] jg no_count inc dx no_count: add si,2 loop next mov rank[bx],dx add bx.2 dec di jne loop ret main endp prognam ends end start 这段代码我照抄书上的实验源代码的,问了老师后,老师说是jne loop的语法错误,但是我不知道怎么改才能让程序成功运行且执行正确功能(应该是累似高级语言里的冒泡法排序)
追问:上面的loop:
mov   ax,grade[bx]
mov   dx,0
mov   cx,10
lea   si,grade
我是想做一个循环的,这个用loop入口没问题吧其实最主要的错误在倒数第5行,那个语法错误,其实这题是要建立学生名次表的,我就纳闷这这倒数第5行该怎么改哥们,还真不对.........loop在上面去做循环,不是做入口名....算了,谢了,哥们哥们能帮下忙吗其实我的疑问重点不在这标号上,是怎么改倒数第5行
答案:loop在汇编语言中是关键字,loop本身就是个指令,不能作为子程式入口名。可以将loop改为loop0 or loop1,只要符合命名规则就行。
其他:呵呵 shanyufei2010 的回答是正确的;loop是循环控制指令(无条件循环,格式是:  loop  目标标号),所以不能作为标号,会引起误解. 修改如下:
……
no_count:
add   si,2
oopl:              ;这里加上一个标号
loop  next
mov   rank[bx],dx
add   bx,.2    ;加上逗号.
dec   di
jne   oopl   ;目的地改为 oopl
ret
main  endp
prognam  ends
  end  start

试试看吧。 

上一个:汇编语言里内存1000H开始存有20个无符号字节数据,编程计算其平均值
下一个:用汇编语言编写程序:从键盘输入一串(不超过51个)以逗号分隔符的不带符号的十进制数(1~4位),在显示器

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,