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
汇编语言的一道题目,老是编译出错!!!请各位不吝赐教
答案:5 悬赏:80 手机版
解决时间 2021-03-03 12:55
- 提问者网友:送舟行
- 2021-03-03 03:33
最佳答案
- 五星知识达人网友:往事隔山水
- 2021-03-03 04:15
用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
全部回答
- 1楼网友:几近狂妄
- 2021-03-03 07:22
话说用的是什么编译器,是masm5吗?
- 2楼网友:山有枢
- 2021-03-03 06:11
a=8 b=8 c=10
- 3楼网友:想偏头吻你
- 2021-03-03 05:33
你用什么汇编程序啊?
我用masm5.0调试,程序没有错误啊。
- 4楼网友:末日狂欢
- 2021-03-03 04:31
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中,你可以通过查看对应内存中的值,来获得三数相加的和...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯