汇编语言的一道题目,老是编译出错!!!请各位不吝赐教
DATASEGMENTNUMDB82H,68H,88HSUMDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,...
DATA SEGMENT
NUM DB 82H,68H,88H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET NUM
MOV BX,[BX]
INC BX
ADD AL,[BX]
INC BX
ADD AL,[BX]
MOV SUM,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START 错误如下
F:\EX11.asm(7) : error A2004: symbol type conflict
F:\EX11.asm(19) : warning A4023: with /coff switch, leading underscore required for start address : START 展开
NUM DB 82H,68H,88H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET NUM
MOV BX,[BX]
INC BX
ADD AL,[BX]
INC BX
ADD AL,[BX]
MOV SUM,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START 错误如下
F:\EX11.asm(7) : error A2004: symbol type conflict
F:\EX11.asm(19) : warning A4023: with /coff switch, leading underscore required for start address : START 展开
5个回答
展开全部
DATA SEGMENT
NUM DB 82H,68H,88H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET NUM
MOV BX,[BX];这一句出了问题,即使能够运行出来,那么结果也不对.,分析:[bx]中的值是6882h(并不是你认为的82h),因为bx是16位的寄存器,那么下一次[bx]中的值并不是你期待的68,或88h,bx是6882h,[6882]这个存储单元的值是多少,是不确定的...
即使是你认为的 82h,那么[82]这个存储单元的值也是不确定,并不是你认为的68h
所以你的这一句有2个错误,建议改成,MOV AL,[BX],但是光这样还是不够,下面会给出修改好的代码
INC BX
ADD AL,[BX]
INC BX
ADD AL,[BX]
MOV SUM,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
修改后的代码:
DATA SEGMENT
NUM DB 82H,68H,88H
SUM DW ? ;为什么这样下面有解释...
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,0 ;这一行是增加的..
MOV BX,OFFSET NUM
MOV AL,[BX]
INC BX
ADD AL,[BX]
INC BX
ADC AL,[BX];上一次相加可能产生进位.,要加上cf.
MOV AH,0 ;若这一次相加产生进位,则送到AH中
MOV SUM,AX;因为有可能产生进位,所以需要用16位来表示相加的和,sum也应该用dw定义
MOV AH,4CH
INT 21H
CODE ENDS
END START
其他的地方都没有问题,不过要在屏幕上输出结果,还需要增加代码,你的程序运行之后,结果,存放在sum中,你可以通过查看对应内存中的值,来获得三数相加的和...
NUM DB 82H,68H,88H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET NUM
MOV BX,[BX];这一句出了问题,即使能够运行出来,那么结果也不对.,分析:[bx]中的值是6882h(并不是你认为的82h),因为bx是16位的寄存器,那么下一次[bx]中的值并不是你期待的68,或88h,bx是6882h,[6882]这个存储单元的值是多少,是不确定的...
即使是你认为的 82h,那么[82]这个存储单元的值也是不确定,并不是你认为的68h
所以你的这一句有2个错误,建议改成,MOV AL,[BX],但是光这样还是不够,下面会给出修改好的代码
INC BX
ADD AL,[BX]
INC BX
ADD AL,[BX]
MOV SUM,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
修改后的代码:
DATA SEGMENT
NUM DB 82H,68H,88H
SUM DW ? ;为什么这样下面有解释...
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,0 ;这一行是增加的..
MOV BX,OFFSET NUM
MOV AL,[BX]
INC BX
ADD AL,[BX]
INC BX
ADC AL,[BX];上一次相加可能产生进位.,要加上cf.
MOV AH,0 ;若这一次相加产生进位,则送到AH中
MOV SUM,AX;因为有可能产生进位,所以需要用16位来表示相加的和,sum也应该用dw定义
MOV AH,4CH
INT 21H
CODE ENDS
END START
其他的地方都没有问题,不过要在屏幕上输出结果,还需要增加代码,你的程序运行之后,结果,存放在sum中,你可以通过查看对应内存中的值,来获得三数相加的和...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
话说用的是什么编译器,是masm5吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用什么汇编程序啊?
我用masm5.0调试,程序没有错误啊。
我用masm5.0调试,程序没有错误啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面的程序,在masm5.0上可以运行,没有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用masm5.0编译没问题:
E:\masm1>masm t.asm
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Object filename [t.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
50816 + 450496 Bytes symbol space free
0 Warning Errors
0 Severe Errors
E:\masm1>link t
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
Run File [T.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment
E:\masm1>masm t.asm
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Object filename [t.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
50816 + 450496 Bytes symbol space free
0 Warning Errors
0 Severe Errors
E:\masm1>link t
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
Run File [T.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询