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

我找不出错误,能帮我找一下吗

as改变自己 发布于 2015-05-29 12:40, 4860 次点击
.MODEL SMALL
.DATA
yellow EQU OEH
MSG1 DB"Welcome..."
Count EQU $-MSG1
.CODE
.STARTUP
MOV    AX,0B800H
MOV    ES,AX
MOV    DI,5
IMUL   DI,160
MOV    CX,10
SHL    CX,1
ADD    DI,CX
MOV    CX,Count
LEA    SI,MSG1
MOV    AH,Yellow
.REPEAt
LODSB
STOSW
.UNTILCXZ
.EXIT 0
END
10 回复
#2
取名字2015-05-29 19:18
简单看了一下,楼主的程序有以下问题:
1、DS段寄存器未初始化,可添加指令"mov ax,@data","mov ds,ax";
2、".STARTUP"前面不应该有点,改为"STARTUP:";
3、".EXIT"这一指令可以不要;
另外最好在end后面指明程序的入口。
#3
取名字2015-05-29 19:57
补充前面所说,刚用masm6.15编译了一下,后面的".exit 0"不能去掉,去掉,就提示遇到无效的指令。下面是修改后的程序,在masm6.15上编译成功并运行成功。
.MODEL SMALL
.DATA
yellow EQU 0EH
MSG1 DB "Welcome..."
Count EQU $-MSG1
.CODE
STARTUP:
mov    ax,@data
mov    ds,ax
mov    ax,0B800H
mov    es,ax
mov    al,5
mov    cl,160
mul    cl
mov    di,ax
mov    cx,10
shl    cx,1
add    di,cx
mov    cx,Count
lea    si,MSG1
mov    ah,yellow
.repeat
lodsb
stosw
.untilcxz
.exit 0
end STARTUP
楼主原程序中“IMUL DI,160”在masm6.15编译器编译时提示"DI"不能为第一个操作数,所以就修改为上述程序中的样子。

[ 本帖最后由 取名字 于 2015-5-29 19:59 编辑 ]
#4
取名字2015-05-29 20:43
再次修改并编译楼主的程序,只要修改2处就可以正确运行:
1、DATA段中"yellow EQU OEH"这句中楼主可能粗心将"0"(零)敲成了"O"(字母O);
2、"IMUL DI,160"我用MASM6.15编译时提示"DI"不能为第一个操作数;
下面是改动后的程序:
.MODEL SMALL
.DATA
yellow EQU 0EH
MSG1 DB "Welcome..."
Count EQU $-MSG1
.CODE
.STARTUP
MOV    AX,0B800H
MOV    ES,AX
MOV    AL,5
MOV    CL,160
MUL    CL
MOV    DI,AX
MOV    CX,10
SHL    CX,1
ADD    DI,CX
MOV    CX,Count
LEA    SI,MSG1
MOV    AH,yellow
.REPEAt
LODSB
STOSW
.UNTILCXZ
.EXIT 0
END
希望以上的分析能帮到楼主!
#5
hu9jj2015-05-29 21:13
编译一下不就知道那里有错了么?
#6
wmf20142015-05-30 11:10
回复 4楼 取名字
恭喜荣升版主!点赞一个。
#7
取名字2015-05-30 12:25
谢谢wmf2014版主,也谢谢大家的信任。
第一次做版主,请各位前辈多多指点,我会尽我所能为大家解疑!
#8
取名字2015-05-30 12:37
谢谢wmf2014版主,也谢谢大家的信任。
第一次做版主,请各位前辈多多指点,我会尽我所能为大家解疑!
#9
取名字2015-05-30 12:43
在手机上不小心又点错了,昨天也是,导致重复发帖。
请大家原谅。
#10
wp2319572015-06-01 14:46
对16位汇编一点兴趣都没有
#11
zhulei19782016-05-07 05:54
那只能说你不懂编程
1