| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8635 人关注过本帖
标题:各位大神帮我看一下这error A2105: Expected: instruction or directive怎么 ...
只看楼主 加入收藏
君破浪
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-11-21
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:10 
各位大神帮我看一下这error A2105: Expected: instruction or directive怎么解决
没办法,刚开始学汇编,看的是华南理工大学出版的《80X86汇编语言程序设计》不过实在是很吃力,不知大神们有什么经验传授一下。
这是我写的一个汇编小程序(新手,刚学汇编,勿笑哦),

    .MODEL   SMALL
      .DATA
TABLE  DW ONE
       DW TWO
       DW THREE
       DW FOUR
       DW FIVE
       DW SIX
       DW SEVEN
       DW EIGHT
       DW NINE      
       .CODE
ONE    PROC NEAR
       MOV AH,2
       MOV DL,'A'
       INT 21H
       RET
ONE    ENDP
TWO    PROC NEAR
       MOV AH,2
       MOV DL,'B'
       INT 21H
       RET
TWO    ENDP
THREE  PROC NEAR
       MOV AH,2
       MOV DL,'C'
       INT 21H
       RET
THREE  ENDP
FOUR    PROC NEAR
       MOV AH,2
       MOV DL,'D'
       INT 21H
       RET
FOUR    ENDP

FIVE  PROC NEAR
       MOV AH,2
       MOV DL,'E'
       INT 21H
       RET
FIVE   ENDP
SIX    PROC NEAR
       MOV AH,2
       MOV DL,'F'
       INT 21H
       RET
SIX    ENDP
SEVEN  PROC NEAR
       MOV AH,2
       MOV DL,'G'
       INT 21H
       RET
SEVEN  ENDP
EIGHT  PROC NEAR
       MOV AH,2
       MOV DL,'H'
       INT 21H
       RET
EIGHT  ENDP
NINE  PROC NEAR
       MOV AH,2
       MOV DL,'I'
       INT 21H
       RET
NINE  ENDP
       .STARTUP
TOP:    MOV AH,1
       INT 21H
       CALL NEWLINE     
       SUB AL,31H
       JB  TOP
       CMP  AL,8
       JA TOP
       MOV AH,0
       MOV BX,AX
       ADD BX,BX
       CALL TABLE[BX]
       CALL NEWLINE
       CALL NEWLINE
       LOOP TOP
       .EXIT
NEWLINE  PROC
         PUSH AX
         PUSH DX
         MOV DL,0DH
         MOV AH,2
         INT 21H
         MOV DL,0AH
         MOV AH,2
         INT 21H
         POP DX
         POP AX
         RET
NEWLINE  ENDP      
         END
用MASM编译的时候出现两个错误:
1.ASM(68): error A2105: Expected: instruction or directive
1.ASM(83): error A2105: Expected: instruction or directive
就是  
    .STARTUP
TOP:    MOV AH,1
       INT 21H
       CALL NEWLINE     
       SUB AL,31H
       JB  TOP
       CMP  AL,8
       JA TOP
       MOV AH,0
       MOV BX,AX
       ADD BX,BX
       CALL TABLE[BX]
       CALL NEWLINE
       CALL NEWLINE
       LOOP TOP
       .EXIT
就是上面的代码开头 的.STARTUP和结尾的 .EXIT有错误,但我百度了很久,也试着改很多次,总是出现错误,求各位大神、高手们指点下小弟,到底是出现什么问题了,拜托各位了!
搜索更多相关主题的帖子: 程序设计 出版 理工大学 SEVEN 
2011-11-21 22:09
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:20 
.STARTUP去掉
.EXIT去掉,加上MOV AH,4CH INT 21H
最后一行END TOP

你用的masm汇编器是什么版本的




技术问题,请不要以短消息方式提问
2011-11-22 10:00
君破浪
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-11-21
收藏
得分:0 
回复 2楼 zaixuexi
谢谢你的解答!我用的MASM好像是5.0版本的,怎么难道是MASM版本的问题?
2011-11-22 10:02
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
是的,5.0不认.startup .exit,不过我手边没有5.0的文档,没法给你参考

技术问题,请不要以短消息方式提问
2011-11-22 12:51
君破浪
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-11-21
收藏
得分:0 
回复 4楼 zaixuexi
我按照你的方法把上面的代码改成下面那样
TOP:    MOV AH,1
       INT 21H
       CALL NEWLINE     
       SUB AL,31H
       JB  TOP
       CMP  AL,8
       JA TOP
       MOV AH,0
       MOV BX,AX
       ADD BX,BX
       CALL TABLE[BX]
       CALL NEWLINE
       CALL NEWLINE
       LOOP TOP
       MOV AH,4CH
       INT 21H
       END TOP
虽然汇编源程序的时候没问题,但是链接目标码的时候却出现了另外的错误:
Warning: No STACK segment
There was 1 error detected.
这又是为什么呢?(拜托了,不是我不想自己搞定,实在是不懂,正在努力学习当中!!)
2011-11-23 00:48
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
程序代码:
    .MODEL   SMALL
      .DATA
TABLE  DW ONE
       DW TWO
       DW THREE
       DW FOUR
       DW FIVE
       DW SIX
       DW SEVEN
       DW EIGHT
       DW NINE     
       .CODE
ONE    PROC NEAR
       MOV AH,2
       MOV DL,'A'
       INT 21H
       RET
ONE    ENDP
TWO    PROC NEAR
       MOV AH,2
       MOV DL,'B'
       INT 21H
       RET
TWO    ENDP
THREE  PROC NEAR
       MOV AH,2
       MOV DL,'C'
       INT 21H
       RET
THREE  ENDP
FOUR    PROC NEAR
       MOV AH,2
       MOV DL,'D'
       INT 21H
       RET
FOUR    ENDP

FIVE  PROC NEAR
       MOV AH,2
       MOV DL,'E'
       INT 21H
       RET
FIVE   ENDP
SIX    PROC NEAR
       MOV AH,2
       MOV DL,'F'
       INT 21H
       RET
SIX    ENDP
SEVEN  PROC NEAR
       MOV AH,2
       MOV DL,'G'
       INT 21H
       RET
SEVEN  ENDP
EIGHT  PROC NEAR
       MOV AH,2
       MOV DL,'H'
       INT 21H
       RET
EIGHT  ENDP
NINE  PROC NEAR
       MOV AH,2
       MOV DL,'I'
       INT 21H
       RET
NINE  ENDP
TOP:    MOV AH,1
       INT 21H
       CALL NEWLINE    
       SUB AL,31H
       JB  TOP
       CMP  AL,8
       JA TOP
       MOV AH,0
       MOV BX,AX
       ADD BX,BX
       CALL TABLE[BX]
       CALL NEWLINE
       CALL NEWLINE
       LOOP TOP
       MOV AH,4CH
       INT 21H
NEWLINE  PROC
         PUSH AX
         PUSH DX
         MOV DL,0DH
         MOV AH,2
         INT 21H
         MOV DL,0AH
         MOV AH,2
         INT 21H
         POP DX
         POP AX
         RET
NEWLINE  ENDP      
         END TOP
Warning: No STACK segment 这个无伤大雅
链接能生成EXE不就得了

技术问题,请不要以短消息方式提问
2011-11-23 09:54
君破浪
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-11-21
收藏
得分:0 
回复 6楼 zaixuexi
但是我写的那个功能没有了,之前我用Masm for Windows 集成实验环境 2011这个软件(应该是支持6.0版本的MASM)运行的时候,可以输入1显示A,输入2显示B,......可以一直输入,直到输入Ctrl+c才退出,但是改成你说的那样之后,输入1之后窗口就直接关闭了!
2011-11-23 12:59
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
你先把程序功能的描述,写写清楚吧,这是第1步

技术问题,请不要以短消息方式提问
2011-11-23 13:02
君破浪
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2011-11-21
收藏
得分:0 
回复 8楼 zaixuexi
对不起,这是我的失误!下面是一些程序功能的描述与一些注释:
通过在计算机键盘上键入数字1、2、.....9分别引用9个独立的子程序。调用系列跳转AL中的值,并先把它扩展为16位数字再加查询表地址。这里用CALL TABLE[BX]指令引用9个子程序之一,执行这个程序时,键入1显示字幕A,键入2显示字母B.......
   .MODEL   SMALL
      .DATA
TABLE  DW ONE         ;定义查询表
       DW TWO
       DW THREE
       DW FOUR
       DW FIVE
       DW SIX
       DW SEVEN
       DW EIGHT
       DW NINE     
       .CODE
ONE    PROC NEAR      ;显示字母A
       MOV AH,2
       MOV DL,'A'
       INT 21H
       RET
ONE    ENDP
TWO    PROC NEAR      ;显示字母B
       MOV AH,2
       MOV DL,'B'
       INT 21H
       RET
TWO    ENDP
THREE  PROC NEAR      ;显示字母C
       MOV AH,2
       MOV DL,'C'
       INT 21H
       RET
THREE  ENDP
FOUR    PROC NEAR     ;显示字母D
       MOV AH,2
       MOV DL,'D'
       INT 21H
       RET
FOUR    ENDP

FIVE  PROC NEAR       ;显示字母E
       MOV AH,2
       MOV DL,'E'
       INT 21H
       RET
FIVE   ENDP
SIX    PROC NEAR      ;显示字母F
       MOV AH,2
       MOV DL,'F'
       INT 21H
       RET
SIX    ENDP
SEVEN  PROC NEAR      ;显示字母G
       MOV AH,2
       MOV DL,'G'
       INT 21H
       RET
SEVEN  ENDP
EIGHT  PROC NEAR      ;显示字母H
       MOV AH,2
       MOV DL,'H'
       INT 21H
       RET
EIGHT  ENDP
NINE  PROC NEAR      ;显示字母I
       MOV AH,2
       MOV DL,'I'
       INT 21H
       RET
NINE  ENDP
TOP:    MOV AH,1      ;读键盘上输入的数字,送入AL
       INT 21H
       CALL NEWLINE    ;调用子程序,回车换行
       SUB AL,31H     ;转换ASCLL码为0、1、2、3、4、5、6、7、8
       JB  TOP        ;R如果低于0
       CMP  AL,8
       JA TOP         ;如果高于8
       MOV AH,0       ;构成查询表地址
       MOV BX,AX
       ADD BX,BX
       CALL TABLE[BX]  ;调用子程序ONE、TWO....NINE
       CALL NEWLINE    ;调用子程序,回车换行
       CALL NEWLINE    ;调用子程序,回车换行
       LOOP TOP        ;循环
       MOV AH,4CH
       INT 21H
NEWLINE  PROC          ;子程序,通过显示回车符形成回车,通过显示换行符形成换行
         PUSH AX
         PUSH DX
         MOV DL,0DH    ;回车符的ASCLL码是0DH
         MOV AH,2      ;回车
         INT 21H
         MOV DL,0AH    ;换行符的ASCLL码是0AH
         MOV AH,2      ;换行
         INT 21H
         POP DX
         POP AX
         RET
NEWLINE  ENDP      
         END TOP
2011-11-23 13:59
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
TOP:   
       MOV AX,@DATA
       MOV DS,AX
       MOV AH,1
       INT 21H
DS没初始化,红色的两句加上,速度结贴

技术问题,请不要以短消息方式提问
2011-11-23 14:12
快速回复:各位大神帮我看一下这error A2105: Expected: instruction or directi ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026947 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved