⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shangji.txt

📁 微机原理课程设计_打字计时练习_汇编课程设计说明:这是一个打字计时练习的程序,在缓冲区中预放了一些字母,运行时,可按照屏幕上 显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
Object filename [error.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
End of file encountered on input file
error.ASM(23): warning A4085: End of file, no END directive
Open segments: DATA
error.ASM(3): warning A4016: Reserved word used as symbol: AX
error.ASM(4): error A2105: Expected: instruction or directive
error.ASM(16): error A2105: Expected: instruction or directive
error.ASM(19): error A2049: Illegal use of register
End of file encountered on input file
error.ASM(23): warning A4085: End of file, no END directive

51566 + 406450 Bytes symbol space free

2 Warning Errors
4 Severe Errors

说明这个程序有错误,并在第3,4,16,19,23行有错,
我们再执行PROCEDURE c去逐一检查
第三行:3 ax db 'My name is DJX'
它的错误在于AX不能作为变量名,更正:
3 out2 db 'My name is DJX'
注意刚才我们定义AX为变量时在后面的程序中用过'变量AX'在第19行
19 lea dx,ax
在出错报告中也报第19行错,因为不能将AX的有效地址赋给DX,更正:
19 lea dx,out2
这样一下就解决了两个错误
第四行:4 data ens
这行为一个段的结束,但语句漏打了字母,更正:
4 data ends
第十六行:16 moo ah,2
这行也是语句打错,更正:
16 mov ah,2
第二十三行:
出错信息:error.ASM(23): warning A4085: End of file, no END directive
说明本程序没有结束伪操作,更正:
加入:在第七、八行加入地址标志: start:
原23 end start

执行PROCEDURE a将源程序修改如下:

data segment
out1 db 'Hello world'
out2 db 'My name is DJX'
data ends

code segment
assume cs:code;ds:data
start:
lea dx,out1
mov ah,2
int 21h

mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h

lea dx,out2
mov ah,9
int 21h
code ends
end start

再次进行PROCEDURE b进行编译,屏幕显示:

Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.

Object filename [error.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
51524 + 406492 Bytes symbol space free

0 Warning Errors
0 Severe Errors

本程序在语句上已无错误。
再执行PROCEDURE d连接为可执行文件(link error回车),屏幕显示:

Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.

Run File [ERROR.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment

这时error.exe可执行文件已存在,可以执行PROCEDURE e来运行看一看是否正确
在dos提示符下键入:error回车(小心!!!)
屏幕显示:乱码,并死机。reset My computer!
说明程序在逻辑上有错误,并且严重。
这是就要用PROCEDURE f,用调试工具调试,查找错误。
在DOS提示符下键入:debug error.exe回车
屏幕出现 - 提示符,这时就可以用DEBUG的命令来找错误了,
我首先用d命令来查看数据区和内容,发展所定义的两个字符串并不在数据段的段首,而在数据段内的100h位置上,这时才想起masm有一个不成文的规定,那就是在定义完数据段后,所定义的变量均向后100h个单元,需要我们将ds段寄存器置位,在程序的start:后面加上如下指令:(执行 PROCEDURE a)
mov ax,data
mov ds,ax
再执行PROCEDURE b,PROCEDURE d,PROCEDURE e来运行程序,
屏幕显示:
换行
My name is DJX及乱码,并死机。(又要重新启动!)
再次执行PROCEDURE a检查程序,发现:
1.汇编语言有规定每个字符串应由$结尾
2.在输出第一个串的语句中的AH子功能号应为09H
将以上两点改正。
再执行PROCEDURE b,PROCEDURE d,PROCEDURE e来运行程序,
屏幕显示:
Hello world
My name is DJX并死机,不能返回DOS
原因分析,在程序中没有返回DOS的指令,更正:
用PROCEDURE a来进行编辑:
用DOS 21H中断的4cH子功能便可返回DOS,在code ends前加:
mov ah,4ch
int 21h
再执行PROCEDURE b,PROCEDURE d,PROCEDURE e来运行程序,
屏幕显示:
Hello word
My name is DJX
并返回DOS
成功!
这样一个程序就调试完成,并正确。
下面是正确的源程序:

data segment
out1 db 'Hello world$'
out2 db 'My name is DJX$'
data ends

code segment
assume cs:code;ds:data
start:
mov ax,data
mov ds,ax

lea dx,out1
mov ah,9
int 21h

mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h

lea dx,out2
mov ah,9
int 21h

mov ah,4ch
int 21h
code ends
end start

以上这个程序很简单,只是为了说明实现汇编语言的上机编程及调试过程,汇编语言须多练习才能掌握它的特点,以便顺利通过考试

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -