|
主题 : : ******缓冲区输入问题,错误类型A2009,自认为牛的进来指教 [待解决] |
回复[ 10次 ]
点击[ 208次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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貌似也悲剧。。。。求解 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-04-06 17:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28 |
1 .我就觉得奇怪了,8086的你非要写个.586做什么,不好好看书,搞这些有啥用,王老师书上有这么讲?
2. 这问题是个人都能解答,没啥提醒和怀疑的.
3. 要学就学踏实点,别东搞些西搞些.先认真看完一本书再说. | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-04-06 21:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40 |
回复:[第1楼]
------------------
1、.586是指实模式,不是你想象中的
2、这问题你没有实在的解答,除开.586这个问题,还有0AH的问题,你等于没有回答问题
3、看完一本书而缺少实践,这就是你所认为正确的学习方式吗?而且这也不是东搞西搞,这是在测试缓冲区输入 | | |
|
|
|
|
[第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. 诶,就你这基础,发贴问问题还这么牛,多看看书再来问问题可以不? | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-04-07 10:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40 |
回复:[第3楼]
1、我承认看了你的第二个回答后确实解决了一些问题,特别是第二条,我确实写错了,以前也代码也有这个问题,所以还是感谢
2、我只是抱着探讨的思想过来,并不是觉得牛,而且你不觉得你自己的口气太傲了吗?
要是我觉得自己牛,我还需要问你吗?
3、;.586是注释屏蔽,假如你要用.586实模式怎么办? | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-04-07 11:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28 |
<<<自认为牛的进来指教>>>
这个不算挑衅么,我奇怪了 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-04-07 20:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40 |
|
|
|
|
|
[第7楼]
[ 回复时间:2011-04-07 22:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28 |
|
|
|
|
|
[第8楼]
[ 回复时间:2011-04-07 23:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-03 22:40 |
回复:[第7楼]
你到现在还是没有说明什么问,你做的仅仅是屏蔽了.586,治标不治本的策略,而且我这里不是需要你这种喷子,要喷到别处去 | | |
|
|
|
|
[第9楼]
[ 回复时间:2011-04-08 09:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28 |
额,你这里?asmedu是你开的?我去问下王爽先
你代码居然能写成这样,还这么拽,是来踢馆的么? | | |
|
|
|
|
[第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 月发布 | | |