早教吧作业答案频道 -->其他-->
汇编语言编译时提示outofrange错误DATASEGMENTBUF1DW5DUP(?)BUF2DW5DUP(?)MYDATADB1,2,20,4,5,3,4,40,5,20,5,6,60,6,20,1,2,20,4,20,2,3,10,5,15DATAENDSSTACKSEGMENTSTACKDW5DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKS
题目详情
汇编语言编译时提示out of range错误
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错误,什么原因,关键是有什么办法修改吗,
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错误,什么原因,关键是有什么办法修改吗,
▼优质解答
答案和解析
你看书上的指令系统里面是这么介绍的,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
很明显,你的目的地址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
看了 汇编语言编译时提示outof...的网友还看了以下:
已知|a|=4,|b|=5,求下列a与b的数量积(1)a//b;当a//b时,有细塔(就是一个O中 2020-05-14 …
英语单词辨音找出画()部分读音与其余不同的单词()1.A .kn(ee) B.n(e)ck C.r 2020-05-17 …
如图所示,三个小球从同一高度处的O点分别以水平初速度v1、v2、v3抛出,落在水平面上的位置分别是 2020-07-21 …
已知平面上直线L的方向向量e=(-4/5,3/5),点O(0,0)和A(1,-2)在L的射影分别是 2020-07-30 …
如图所示,三个小球从同一高处的O点分别以水平初速度v1、v2、v3抛出,落在水平面上的位置分别是A 2020-07-30 …
如图所示,三个小球从同一高度处的O点分别以水平初速度v1、v2、v3抛出,落在水平面上的位置分别是 2020-07-30 …
如图,A是半径为5的圆O上的一个定点,单位向量AB在A点处与圆O相切,点P是圆O上的一个动点,且点 2020-07-31 …
相似三角形问题已知圆O与圆A相交于C,D两点.A,O分别是两圆的圆心,三角形ABC内界于圆O,弦C 2020-08-03 …
如图,已知⊙O和⊙O′相交于A、B两点,过点A作⊙O′的切线交⊙O于点C,过点B作两圆的割线分别交⊙ 2020-12-05 …
记时器的频率是50HZ.O点是地一个点中间还有2个点到A点,O到A点中间断开了,ABCDE是5个连续 2021-01-09 …