上课的时候没有讲这方面的知识,但是现在要用了。我就看了一些书和网页,找到一个创建一个文本文档的程序,编译和链接都通过了,但是运行的时候出现了问题。
系统是WIN7 64位 ,用DOSBOX0.74跑的 MASM6.0.
执行生成的应用程序的时候,会一直卡住。然后DOSBOX就崩了。没有输出的“Data.txt”文本文件。
- Assembly code
.386DATA SEGMENT Error1 DB "Create file fail.",13,10,"$" Error2 DB "Open file fail.",13,10,"$" Error3 DB "Write file fail.",13,10,"$" FileName DB "Data.txt",0 Msg DB "Hello World!",13,10DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENTAssume DS:DATA,SS:STACK,CS:CODEStart: Mov AX,DATA Mov DS,AX Mov AX,3c00H Mov CX,20H ;文件属性为归档 Mov DX,Offset FileName Int 21H ;建立文件 Jc Err1 Mov BX,AX Mov AX,3e00H Int 21H ;关闭文件 Mov AX,3d02H Mov DX,Offset FileName Int 21H ;按读写方式打开文件 Jc Err2 Mov BX,AX Mov AX,4000H Mov CX,14 ;要写的字节数 Mov DX,Offset Msg Int 21H ;写数据到文件 Jc Err3 Mov AX,3e00H Int 21H ;关闭文件Exit: Mov AH,4CH Int 21HErr1: Mov DX,Offset Error1 Jmp ShowErrErr2: Mov DX,Offset Error2 Jmp ShowErrErr3: Mov DX,Offset Error3 Jmp ShowErrShowErr:Mov AX,900H Int 21H Jmp ExitCode EndsEnd Start
------解决方案--------------------------------------------------------
用的什么汇编软件啊?Masm 的话需要在 .386 语句前加上 .model small 或类似的语句如下面的样子以说明这个是 dos16 类的程序,否则会以 win32 类的程序创建了错误的指令。用 debug 载入各自的 exe 程序文件看下就明白区别了。
- Assembly code
.model small.386DATA SEGMENT Error1 DB "Create file fail.",13,10,"$"