汇编语言编译时提示out of range错误

DATASEGMENTBUF1DW5DUP(?)BUF2DW5DUP(?)MYDATADB1,2,20,4,5,3,4,40,5,20,5,6,60,6,20,1,2,2... DATA SEGMENT
BUF1 DW 5 DUP(?)
BUF2 DW 5 DUP(?)
MYDATA DB 1,2,20,4,5,3,4,40,5,20,5,6,60,6,20,1,2,20,4,20,2,3,10,5,15
DATA ENDS
STACK SEGMENT STACK
DW 5 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SI,BUF1
LEA DI,BUF2
LEA BX,MYDATA
MOV CX,5
AGAIN:XOR AX,AX
MOV AL,[BX]
INC BX
MOV DL,[BX]
INC BX
IMUL DL
PUSH AX
MOV AL,[BX]
INC BX
CBW
MOV DL,[BX]
INC BX
IDIV DL
CBW
PUSH AX
MOV AL,[BX]
INC BX
CBW
XOR DX,DX
SUB DX,AX
POP AX
ADD DX,AX
POP AX
ADD DX,AX
JS IFNE
MOV [SI],DX
MOV AX,[SI]
MOV DL,10
IDIV DL
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV AX,[SI]
MOV DL,10
IDIV DL
MOV DL,AH
ADD DL,30H
MOV AH,02H
INT 21H
JMP OVER
IFNE:MOV [DI],DX
MOV DL,'-'
MOV AH,02H
INT 21H
MOV AX,[DI]
XOR AX,0FFH
INC AX
MOV DL,10
IDIV DL
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV AX,[DI]
XOR AX,0FFH
INC AX
MOV DL,10
IDIV DL
MOV DL,AH
ADD DL,30H
MOV AH,02H
INT 21H
OVER:MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
INC SI
INC DI
LOOP AGAIN
MOV AH,4CH
INT 21H
CODE ENDS
END START

这是我写的代码,编译时提示out of range by 7 bytes错误,提示错误发生在倒数第五行,就是LOOP错误,哪位知道的好心人帮忙看下,什么原因,关键是有什么办法修改吗,不胜感激!
展开
 我来答
DustX
推荐于2017-12-16 · 超过22用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:46.2万
展开全部
你看书上的指令系统里面是这么介绍的,LOOP rel,这个rel是8位补码数表示的偏移地址,8位补码数的表数范围为-128~127,即LOOP指令的目的地址应该在 当前地址-128~当前地址+127 之间,也就是说LOOP指令可以往前跳128个字节或是往后跳127个字节。
很明显,你的目的地址AGAIN在LOOP之前,而且这个距离超过了128个字节,这个字节数是指的指令编译后生成的二进制代码的长度,比如说XOR AX,AX占1个字节,INC BX占一个字节,MOV DL,10占两个字节,具体的你自己推算。
那么碰到这样子的情况要怎么处理?一是优化程序,精简指令代码,看你的错误提示是多超出了7个字节,应该是可以想办法减少的。另外就是中转了,用LOOP跳不过去,那我可以先用LOOP跳到一个较近的地方,在用JMP指令跳转,JMP指令的跳转范围是64K,毫无压力的,程序后几行改成如下试试:
INC SI
INC DI
LOOP AGAIN11
MOV AH,4CH
INT 21H
AGAIN11: JMP AGAIN
CODE ENDS
END START
hmfwf11
2019-03-12
知道答主
回答量:1
采纳率:0%
帮助的人:868
展开全部
你用的可能是用proetus汇编的。改用UV2汇编
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式