. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->自由讨论区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  ******缓冲区输入问题,错误类型A2009,自认为牛的进来指教  [待解决] 回复[ 10次 ]   点击[ 208次 ]  
liuconggang
[帖 主]   [ 发表时间:2011-04-05 16:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40
代码如下:
.586
STACK SEGMENT USE16 STACK
    DB 256  DUP(0)
STACK ENDS

DATA SEGMENT USE16
N  EQU 20
BUF DB  N+1
COUNT DB  0
CHAR DB  N+1 DUP(0)
ABC DB  'PLEASE INPUT:',13,10,'$'
DATA ENDS

CODE SEGMENT  USE16
     ASSUME CS:CODE,DS:DATA,SS:STACK
START:  MOV AX,DATA
        MOV DS,AX
        LEA DX,abc
        MOV AH,9                  
        INT 21H              
        LEA DX,BUF             
        MOV AH,OAH            
        INT 21H              
        MOV AH,4CH                  
        INT 21H
CODE ENDS
END START              


编译结果如下:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987.  All rights reserved.

Source filename [.ASM]: b
Object filename [b.OBJ]:
Source listing  [NUL.LST]: b
Cross-reference [NUL.CRF]: b
b.ASM(1): error A2105: Expected: instruction or directive
b.ASM(2): error A2025: Improper align/combine type
b.ASM(6): error A2025: Improper align/combine type
b.ASM(14): error A2025: Improper align/combine type
b.ASM(22): error A2009: Symbol not defined: OAH

  49128 + 434264 Bytes symbol space free

      0 Warning Errors
      5 Severe  Errors

求大能指教。。。顺便提醒:本人怀疑是编译器问题,版本5.0百度搜索过了,.586这伪指令貌似这版本不支持,还有0AH貌似也悲剧。。。。求解
zaixuexi
[第1楼]   [ 回复时间:2011-04-06 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
1 .我就觉得奇怪了,8086的你非要写个.586做什么,不好好看书,搞这些有啥用,王老师书上有这么讲?
2. 这问题是个人都能解答,没啥提醒和怀疑的.
3. 要学就学踏实点,别东搞些西搞些.先认真看完一本书再说.
liuconggang
[第2楼]   [ 回复时间:2011-04-06 21:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40
回复:[第1楼]
------------------
1、.586是指实模式,不是你想象中的
2、这问题你没有实在的解答,除开.586这个问题,还有0AH的问题,你等于没有回答问题
3、看完一本书而缺少实践,这就是你所认为正确的学习方式吗?而且这也不是东搞西搞,这是在测试缓冲区输入
zaixuexi
[第3楼]   [ 回复时间:2011-04-06 22:07 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
;.586 
STACK SEGMENT
    DB 256  DUP(0) 
STACK ENDS 

DATA SEGMENT
N  EQU 20 
BUF DB  N+1 
COUNT DB  0 
CHAR DB  N+1 DUP(0) 
ABC DB  'PLEASE INPUT:',13,10,'$' 
DATA ENDS 

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA,SS:STACK 
START:  MOV AX,DATA 
        MOV DS,AX 
        LEA DX,abc 
        MOV AH,9                   
        INT 21H               
        LEA DX,BUF              
        MOV AH,0AH             
        INT 21H               
        MOV AH,4CH                   
        INT 21H 
CODE ENDS 
END START    

1. 额,我1分钟就改完了
2. 0AH,大哥,你写的是字母O吧,我改成0就对了
3. 诶,就你这基础,发贴问问题还这么牛,多看看书再来问问题可以不?
liuconggang
[第4楼]   [ 回复时间:2011-04-07 10:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40
回复:[第3楼]
1、我承认看了你的第二个回答后确实解决了一些问题,特别是第二条,我确实写错了,以前也代码也有这个问题,所以还是感谢
2、我只是抱着探讨的思想过来,并不是觉得牛,而且你不觉得你自己的口气太傲了吗?
要是我觉得自己牛,我还需要问你吗?
3、;.586是注释屏蔽,假如你要用.586实模式怎么办?
zaixuexi
[第5楼]   [ 回复时间:2011-04-07 11:10 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
<<<自认为牛的进来指教>>>
这个不算挑衅么,我奇怪了
liuconggang
[第6楼]   [ 回复时间:2011-04-07 20:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40
回复:[第5楼]
吸引牛人进来啊!
zaixuexi
[第7楼]   [ 回复时间:2011-04-07 22:06 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
这种问题需要牛人?你这是笑话么?
liuconggang
[第8楼]   [ 回复时间:2011-04-07 23:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40
回复:[第7楼]
你到现在还是没有说明什么问,你做的仅仅是屏蔽了.586,治标不治本的策略,而且我这里不是需要你这种喷子,要喷到别处去
zaixuexi
[第9楼]   [ 回复时间:2011-04-08 09:28 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
额,你这里?asmedu是你开的?我去问下王爽先
你代码居然能写成这样,还这么拽,是来踢馆的么?
zaixuexi
[第10楼]   [ 回复时间:2011-04-08 10:19 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
实在是不用你去怀疑,网上一堆介绍,连GOOGLE都不会用的人,跑来这怀疑?提醒?
MASM 4.00 
 这是最先广泛使用的一个 MASM 版本,适用于 DOS 下的汇编编程。它很精巧,但使用起来不是很智能化,需要用户自己一板一眼地写出所有的东西。很多教科书上讲的 8086 汇编语法都是针对这个版本的,对程序员来说。它只比用 Debug 方便一点点 
 
MASM 5.00 
 MASM 5.00 比 4.00 在速度上快了很多,并将段定义的伪指令简化为类似 .code 与 .data 之类的定义方式,同时增加了对 80386 处理器指令的支持,对 4.00 版本的兼容性很好 
 
MASM 5.10 
 对程序员来说,这个版本最大的进步是增加了对 @@ 标号的支持。这样,程序员可以不再为标号的起名花掉很多时间。另外, MASM 5.10 增加了对 OS/2 1.x 的支持 
 
MASM 5.10B 
 1989 年推出,比上一个版本更稳定、更快,它是传统的 DOS 汇编编译器中最完善的版本 
 
MASM 6.00 
 1992 年发布,有了很多的改进。编译器可以使用扩展内存,这样可以编译更大的文件,可执行文件名相应从 Masm.exe 改为 Ml.exe 。从这个版本开始可以在命令行上用 *.asm 同时编译多个源文件,源程序中数据结构的使用和命令行参数的语法也更像 C 的风格。最大的改进之一是开始支持 .if/.endif 这样的高级语法,这样,使用复杂的条件分支时和用高级语言书写一样简单,可以做到几千行的代码中不定义一个标号;另外增加了 invoke 伪指令来简化带参数的子程序调用。这两个改进使汇编代码的风格越来越像 C ,可读性和可维护性提高了很多 
 
MASM 6.00A 
 未发售的版本 
 
MASM 6.00B 
 最后一个支持 OS/2 的 MASM 版本,修正了上一版本中的一些错误 
 
MASM 6.10 
 修正了一些错误,同时增加了 /Sc 选项,可以在产生的 list 文件中列出每条指令使用的时钟周期数 
 
MASM 6.10A 
 1992 年发布,修正了一些内存管理方面的问题 
 
MASM 6.11 
 1993 年 11 月发布,支持 Windows NT ,可以编写 Win32 程序,同时支持 Pentium 指令,但不支持 MMX 指令集 
 
MASM 6.11C 
 1994 年发布,增加了对 Windows 95 VxD 的支持 
 
MASM 6.12 
 1997 年 8 月发布,增加 .686 , .686P , .MMX 声明和对相应指令的支持 
 
MASM 6.13 
 1997 年 12 月发布,增加了 .K3D 声明,开始支持 AMD 处理器的 3D 指令 
 
MASM 6.14 
 这是一个很完善的版本,它在 .XMM 中增加了对 Pentium III 的 SIMD 指令集的支持,相应增加了 OWORD ( 16 字节)的变量类型 
 
MASM 6.15 
 2000 年 4 月发布
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved