|
主题 : : 第4章实验3的问题 [待解决] |
回复[ 5次 ]
点击[ 493次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-02-18 03:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-10 01:48 |
本人把源文件放在F盘的A文件夹里,文件名为t1.asm
用masm5编译时结果出现
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rig
Source filename [.ASM]: f:\a\t1
Object filename [t1.OBJ]: f:\a\
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
f:\a\t1.ASM(13): error A2107: Non-digit in number
50942 + 450258 Bytes symbol space free
0 Warning Errors
1 Severe Errors
发现错误了,
可是我都是照书上的写的呀
assume cs:codesg
codesg segment
mov ax,2000
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00
int 21
codesg ends
end | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-02-18 03:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-02-10 01:48 |
大家帮帮忙看看,错在哪里?
谢谢大家了~~~~~~~~~~~~~~~~ | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-02-18 11:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
f:\a\t1.ASM(13): error A2107: Non-digit in number
---------------
要学会看编译错误,这是你程序用masm.exe编译提示的编译错误,提示在13行有错误,原因是后面的信息,可以简单翻译一下结合实际语句很容易找出错误来。
找到相应的行数,这里的指令是:mov ax,4c00
---------------------
这里少了H了,所以当计算机把4c00当作十进制数的时候会报错Non-digit,即不是数字。
debug下默认十六进制
.asm下默认十进制 | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-02-22 22:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-06 21:37 |
assume cs:codesg
codesg segment
mov ax,2000
mov ss,ax
mov sp,0
楼上的朋友,我也看到这跟楼主出了同样的问题
如果是10进制的话,那mov ax,2000这个也没带H...又是为什么呢? | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-02-22 22:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-06 21:37 |
|
|
|
|
|
[第5楼]
[ 回复时间:2009-03-16 20:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-03-16 13:06 |
如果是10进制的话,那mov ax,2000这个也没带H...又是为什么呢?
回复:mov ax,2000 这里确是是一个数.但他是十进制的,编译过程不会出错,但在debug下调试会变成
mov ax,07d0H (十六进制)因为2000(十进制)=7d0H(十六进制)
而mov ax,4c00 ,很明显,十进制数中是没有4c00的,所以asm报错,因为他不是数 | | |