急急急急急急!汇编编程(找水仙花数):invalid instruction operands是什么错误
DATASSEGMENT;此处输入数据段代码IN1DB13,10,'Thenumberis:',13,10,'$'NDW100A1DB0;百位数字除后余数A2DB0;十位...
DATAS SEGMENT
;此处输入数据段代码
IN1 DB 13,10,'The number is :',13,10,'$'
N DW 100
A1 DB 0;百位数字除后余数
A2 DB 0;十位数字除后余数
B1 DW 0;百位立方之和
B2 DW 0;十位立方之和
B3 DW 0;个位立方之和
SUM DW 0 ;各位立方之和
M DB 0;显示时的中间变量
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV CX,900
;求百位数
L1: XOR AX,AX
MOV AX,N
MOV BL,100
DIV BL;AL->商(百位数),AH->余数
MOV A1,AH
MOV DL,AL
;百位数做立方运算
MUL AL
MUL DL
MOV B1,AX
;求十位数
MOV AL,A1
MOV AH,0
MOV BL,10
DIV BL;AL->商(十位数),AH->余数(个位数)
;求十位数的立方
MOV A2,AH
MOV DL,AL
MUL AL
MUL DL
MOV B2,AX
;求个位数的立方
MOV AL,A2
MOV DL,AL
MUL AL
MUL DL
MOV B3,AX
ADD DX,B1
ADD DX,B2
ADD DX,B3
MOV SUM,DX
CMP N,SUM;;;;;;;;;;;;;;;;;;;;;;;;这行有错误,求大神指点!!!!并帮忙看一下能否运行,万分感谢!!
JZ L2
INC N
LOOP L1
L2: LEA DI,IN1
MOV AH,09H
INT 21H
;百位显示
MOV AX,SUM
MOV BL,100
DIV BL
MOV M,AH
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
;十位显示
MOV AL,M
MOV BL,10
DIV BL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
;个位数显示
ADD AH,30H
MOV DL,AH
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START 展开
;此处输入数据段代码
IN1 DB 13,10,'The number is :',13,10,'$'
N DW 100
A1 DB 0;百位数字除后余数
A2 DB 0;十位数字除后余数
B1 DW 0;百位立方之和
B2 DW 0;十位立方之和
B3 DW 0;个位立方之和
SUM DW 0 ;各位立方之和
M DB 0;显示时的中间变量
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV CX,900
;求百位数
L1: XOR AX,AX
MOV AX,N
MOV BL,100
DIV BL;AL->商(百位数),AH->余数
MOV A1,AH
MOV DL,AL
;百位数做立方运算
MUL AL
MUL DL
MOV B1,AX
;求十位数
MOV AL,A1
MOV AH,0
MOV BL,10
DIV BL;AL->商(十位数),AH->余数(个位数)
;求十位数的立方
MOV A2,AH
MOV DL,AL
MUL AL
MUL DL
MOV B2,AX
;求个位数的立方
MOV AL,A2
MOV DL,AL
MUL AL
MUL DL
MOV B3,AX
ADD DX,B1
ADD DX,B2
ADD DX,B3
MOV SUM,DX
CMP N,SUM;;;;;;;;;;;;;;;;;;;;;;;;这行有错误,求大神指点!!!!并帮忙看一下能否运行,万分感谢!!
JZ L2
INC N
LOOP L1
L2: LEA DI,IN1
MOV AH,09H
INT 21H
;百位显示
MOV AX,SUM
MOV BL,100
DIV BL
MOV M,AH
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
;十位显示
MOV AL,M
MOV BL,10
DIV BL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
;个位数显示
ADD AH,30H
MOV DL,AH
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START 展开
展开全部
DATAS SEGMENT
IN1 DB 13,10,'The number is : $'
A1 DB 0 ;百位数
A2 DB 0 ;十位数
A3 DB 0 ;个位数
B1 DW 0 ;百位立方
B2 DW 0 ;十位立方
B3 DW 0 ;个位立方
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
MOV CX, 999
L1:
MOV AX, CX
MOV BL, 100
DIV BL ;AL=百位数, AH=余数
MOV A1, AL ;百位
MOV AL, AH
MOV AH, 0
MOV BL, 10
DIV BL
MOV A2, AL ;十位
MOV A3, AH ;个位
CALL LIFANG ;求各个立方
MOV AX, B1
ADD AX, B2
ADD AX, B3
CMP AX, CX
JNE NEXT
CALL PRINT ;相等则显示
NEXT:
LOOP L1 ;循环到0为止
MOV AH, 4CH
INT 21H
;------------------------------
LIFANG:
MOV AL, A1
MOV AH, 0
MOV BX, AX
MUL BX
MUL BX
MOV B1, AX
MOV AL, A2
MOV AH, 0
MOV BX, AX
MUL BX
MUL BX
MOV B2, AX
MOV AL, A3
MOV AH, 0
MOV BX, AX
MUL BX
MUL BX
MOV B3, AX
RET
;------------------------------
PRINT:
LEA DX, IN1
MOV AH, 9
INT 21H
MOV AH, 2
MOV DL, A1 ;百
ADD DL, 30H
INT 21H
MOV DL, A2 ;十
ADD DL, 30H
INT 21H
MOV DL, A3 ;个
ADD DL, 30H
INT 21H
RET
;------------------------------
CODES ENDS
END START
执行后显示:
c:\masm510>XX
The number is : 407
The number is : 371
The number is : 370
The number is : 153
The number is : 001
c:\masm510>
IN1 DB 13,10,'The number is : $'
A1 DB 0 ;百位数
A2 DB 0 ;十位数
A3 DB 0 ;个位数
B1 DW 0 ;百位立方
B2 DW 0 ;十位立方
B3 DW 0 ;个位立方
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
MOV CX, 999
L1:
MOV AX, CX
MOV BL, 100
DIV BL ;AL=百位数, AH=余数
MOV A1, AL ;百位
MOV AL, AH
MOV AH, 0
MOV BL, 10
DIV BL
MOV A2, AL ;十位
MOV A3, AH ;个位
CALL LIFANG ;求各个立方
MOV AX, B1
ADD AX, B2
ADD AX, B3
CMP AX, CX
JNE NEXT
CALL PRINT ;相等则显示
NEXT:
LOOP L1 ;循环到0为止
MOV AH, 4CH
INT 21H
;------------------------------
LIFANG:
MOV AL, A1
MOV AH, 0
MOV BX, AX
MUL BX
MUL BX
MOV B1, AX
MOV AL, A2
MOV AH, 0
MOV BX, AX
MUL BX
MUL BX
MOV B2, AX
MOV AL, A3
MOV AH, 0
MOV BX, AX
MUL BX
MUL BX
MOV B3, AX
RET
;------------------------------
PRINT:
LEA DX, IN1
MOV AH, 9
INT 21H
MOV AH, 2
MOV DL, A1 ;百
ADD DL, 30H
INT 21H
MOV DL, A2 ;十
ADD DL, 30H
INT 21H
MOV DL, A3 ;个
ADD DL, 30H
INT 21H
RET
;------------------------------
CODES ENDS
END START
执行后显示:
c:\masm510>XX
The number is : 407
The number is : 371
The number is : 370
The number is : 153
The number is : 001
c:\masm510>
展开全部
采用的是8086的指令集吧?你可以查看下CMP的定义,它有以下几种格式:
CMP REG, memory
CMP memory, REG
CMP REG, REG
CMP memory, immediate
CMP REG, immediate
可以看出,没有对两个内存变量进行比较的格式。而你的N和SUM都是内存变量。
解决办法,把N或者SUM先MOV到一个寄存器中,然后再进行比较。
CMP REG, memory
CMP memory, REG
CMP REG, REG
CMP memory, immediate
CMP REG, immediate
可以看出,没有对两个内存变量进行比较的格式。而你的N和SUM都是内存变量。
解决办法,把N或者SUM先MOV到一个寄存器中,然后再进行比较。
追问
按照知友你的方法改了,程序运行没有出现错误,可是运行结果出现乱码,应该怎么改呢~?
追答
汇编阅读很辛苦。你可否把运行的情况截图看看?
考虑一下思路:显示的内容如果前面正常,后面有乱码,通常是字符串没有正常结尾。你可以查阅显示的中断服务程序的相关资料。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询