汇编语言的loop指令
datareasegmentgradedw88,75,95,63,98,78,87,73,90,60rankdw10dup(?)datareaendsprognamseg...
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的语法错误,但是我不知道怎么改才能让程序成功运行且执行正确功能(应该是累似高级语言里的冒泡法排序) 展开
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的语法错误,但是我不知道怎么改才能让程序成功运行且执行正确功能(应该是累似高级语言里的冒泡法排序) 展开
5个回答
展开全部
loop在汇编语言中是关键字,loop本身就是个指令,不能作为子程式入口名。可以将loop改为loop0 or loop1,只要符合命名规则就行。
更多追问追答
追问
上面的loop:
mov ax,grade[bx]
mov dx,0
mov cx,10
lea si,grade
我是想做一个循环的,这个用loop入口没问题吧
追答
我把你的程序拷下来编译了下(编译环境:MASMPlus),显示loop入口有error,所以我认为关键字作为入口名是不可以的。还有add bx.2这句有error(倒数第七行),中间应该是个逗号。
展开全部
修改如下:
……
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
试试看吧。
……
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
试试看吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
shanyufei2010 的回答是正确的;loop是循环控制指令(无条件循环,格式是: loop 目标标号),所以不能作为标号,会引起误解.
追问
其实我的疑问重点不在这标号上,是怎么改倒数第5行
追答
倒数第五行的错误就是在于loop标号不对啊,你可以将它该后再测试一下,程序结构是对的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵
追问
哥们能帮下忙吗
追答
不太懂,我看那人挺有意思。最后你说他没找对问题。所以,呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询