注册 登录
编程论坛 汇编论坛

汇编结构中的变址疑问

wangyucoming 发布于 2012-12-20 20:20, 646 次点击
;程序名:T7_1.ASM
 ;功 能:对学生成绩求总
 ;定义变量
 COUNT = 30 ;学生总数
 ;定义学生各门课成绩结构SCORE
 SCORE STRUC
 NO DW ? ;学号
 SNAME DB 8 DUP(?) ;姓名
 CHC DB  ? ;语文成绩
 MATH DB  ? ;数学成线
 ENG DB  ? ;英语成线
 SCORE  ENDS
 ;定义学号和总成绩结构ITME
 ITME  STRUC
 NOS  DW  ? ;学号
 SUM  DW  ? ;总成绩
ITME  ENDS
 ;数据段
 DSEG  SEGMENT
 BUFFER  SCORE < > ;定义存放原始数据的缓冲区
STALE  ITME COUNT DUP(<>) ;学生总成绩变量名定义
FNAME1 DB 'SCORE.DAT',0 ;存放原始数文档
FNAME2 DB 'SCORE.SUM',0 ;存放总成绩文档
 DSEG ENDS
 ;代码段
 CSEG   SEGMENT
 ASSUME CS:CSEG,DS:DSEG ;设置段与数据段之间的关系
START:
 MOV AX,DSEG ;数据段关联
MOV DS,AX

 ;打开SCORE.DAT文件
MOV DX,OFFSET FNAME1
 MOV AX,3D00H
 INT 21H

 MOV BX,AX
 MOV DI,COUNT ;设置循环数
MOV SI,OFFSET STALE ;设置存放总成绩的缓冲区
READ:
MOV DX,OFFSET BUFFER;存放成绩的缓冲区
MOV CX,TYPE BUFFER
 MOV AH,3FH  ;读取文件
INT 21H

 XOR AH,AH  ;清空AH
 MOV AL,BUFFER.CHC ;成绩求总
ADD AL,BUFFER.MATH
 ADC AH,0H
 ADD AL,BUFFER.ENG
 ADC AH,0H
MOV [SI].SUM,AX  MOV AX,BUFFER.NO
MOV [SI].NOS,AX
 ADD SI,TYPE ITME
 DEC DI
 JNZ  READ
 ;创建文件SCORE.SUM
 MOV DX,OFFSET FNAME2
 MOV CX,0H  ;普通文件
MOV AH,3CH
 INT 21H
 MOV BX,AX
 ;写入文件
MOV DX,OFFSET STALE
 MOV CX,(TYPE ITME)*COUNT
 MOV AH,40H
 INT 21H
 MOV AH,3EH
 INT 21H
 MOV AX,4C00H
 INT 21H
 CSEG ENDS
 END START
 (masm6.11)编译的时候下面这两段报错,我都是按80X86书上敲的..
 MOV [SI].SUM,AX  MOV [SI].NOS,AX  
8 回复
#2
x64asm2012-12-20 20:43
楼主您不发作业能死人嘛?
#3
suijishu2012-12-20 21:42
9494
#4
朱三哥2012-12-21 16:48
您这个?
没法
#5
hu9jj2012-12-21 17:06
很久没有接触汇编,都快忘光了。有这种格式的变址吗?
MOV [SI].SUM,AX  MOV AX,BUFFER.NO
MOV [SI].NOS,AX
#6
wangyucoming2012-12-21 23:24
朋友!首先一点,这个不是作业,这个只是书上的例题.但是例题运行的时候报错我想知道为什么而已!朋友如果你没有能力解决你可以完全没有必要说!每个人生来又不是什么都懂..
#7
wangyucoming2012-12-21 23:26
以上的话是对二楼说的
#8
小习小习2012-12-22 00:24
MOV [SI].SUM,AX  MOV AX,BUFFER.NO
MOV [SI].NOS,AX
首先得确定打红线的语句是不是在同一行,偶就把 MOV AX,BUFFER.NO另起一行就行了,我用的masm5.0编译通过
#9
wangyucoming2012-12-22 20:47
刚才重新查看了一下!发现是自己编译的须序出了问题..
1