汇编语言的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位),在显示器