1、实验内容
编写程序,判断一个年份是否是闰年。
2、实验步骤
汇编语言程序设计上机过程如图1.1所示。
图1.1 汇编语言程序上机过程
(一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件)
例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows 2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:
C> EDIT ABC.ASM
进入EDIT的程序编辑画面时,输入汇编语言源程序如下:
DATA SEGMENT
INFON DB 0DH,0AH,'Please input a year: $'
Y DB 0DH,0AH,'This is a leap year! $'
N DB 0DH,0AH,'This is not a leap year! $'
W DW 0
BUF DB 8
DB ?
DB 8 DUP(?)
DATA ENDS
STACK SEGMENT 'stack'
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
LEA DX,INFON
MOV AH,9
INT 21H
LEA DX,BUF
MOV AH,10
INT 21H
MOV CL, [BUF+1]
LEA DI,BUF+2
CALL DATACATE
CALL IFYEARS
JC A1
LEA DX,N
MOV AH,9
INT 21H
JMP EXIT
A1: LEA DX,Y
MOV AH,9
INT 21H
EXIT: MOV AH,4CH
INT 21H
DATACATE PROC NEAR
LEA SI,BUF+2
MOV BX,0
X3:
MOV AL ,[SI]
SUB AL ,30H
MOV AH,0
XCHG AX,BX
MOV DX,10D
MUL DX
XCHG AX,BX
ADD BX,AX
INC SI
LOOP X3
MOV W,BX
RET
DATACATE ENDP
IFYEARS PROC NEAR
PUSH BX
PUSH CX
PUSH DX
MOV AX,W
MOV CX,AX
MOV DX,0
MOV BX,4
DIV BX
CMP DX,0
JNZ LAB1
MOV AX,CX
MOV BX,100
DIV BX
CMP DX,0
JNZ LAB2
MOV AX,CX
MOV BX,400
DIV BX
CMP DX,0
JZ LAB2
LAB1: CLC
JMP LAB3
LAB2: STC
LAB3: POP DX
POP CX
POP BX
RET
IFYEARS ENDP
CODE ENDS
END START
(二)用汇编程序MASM将ASM文件汇编成目标程序文件(OBJ文件)
当源程序建立以后,仍以ABC.ASM程序为例,我们用汇编程序MASM对ABC.ASM源程序文件进行汇编,以便产生机器码的目标程序文件ABC.OBJ,其操作步骤如下:
C>MASM ABC
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981–1985,1987. All rights reserved.
Object filename [ABC.OBJ]:
Source listing [NUL.LST]:ABC
Cross-reference [NUL.CRF]:ABC
50674 + 450574 Bytes symbol space free
0 Warning Errors
0 Severe Errors
由此可知,汇编程序调入后,首先显示版本号,然后出现三个提示行。
第一个提示行为:Object filename [ABC.OBJ]:
这是询问目标程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名(如上所示),这是我们汇编的主要目的。
第二个提示行为: Source listing [NUL.LST]:
这是询问是否建立列表文件。若不建立,直接回车;若要建立,可以输入文件名ABC再回车,表示要建立名为ABC的列表文件。列表文件中同时列出源程序和机器语言程序清单,并给出符号表,有利于程序调试。
第三个提示行为:Cross-reference [NUL.CRF]:
这是询问是否要建立交叉索引文件。若不建立,则直接回车;若要建立,可以输入文件名ABC,表示要建立ABC.CRF文件。由于.CRF是非文本文件,为了建立交叉索引文件,还必须调用CREF.EXE程序,即输入:
C>CREF ABC
Microsoft (R) Cross-Reference Utility Version 5.00
Copyright (C) Microsoft Corp 1981–1985,1987. All rights reserved.
listing [ABC.REF]:
17 Symbols
这时首先显示版本号,然后出现一个提示行:Listing [ABC.REF]:
这是询问交叉索引文件名。这时可用回车承认方括号内机器默认的文件名,如上所示。这样就建立了ABC.REF文件。其内容是用户定义的所有符号(包括变量),并给出每个符号定义所在的行号(附以#)以及引用的行号。如下是ABC.REF文件的内容:
Microsoft Cross-Reference Version 5.00 Sat Dec 01 18:49:42 2007
Symbol Cross-Reference (# definition, + modification) Cref-1
A1 . . . . . . . . . . . . . . . 42 47#
BUF. . . . . . . . . . . . . . . 15# 35 38 39 55
CODE . . . . . . . . . . . . . . 28# 29 111
DATA . . . . . . . . . . . . . . 1# 21 29 30
DATACATE . . . . . . . . . . . . 40 53# 80
EXIT . . . . . . . . . . . . . . 46 50#
IFYEARS. . . . . . . . . . . . . 41 82# 110
INFON. . . . . . . . . . . . . . 2# 32
LAB1 . . . . . . . . . . . . . . 92 103#
LAB2 . . . . . . . . . . . . . . 97 102 105#
LAB3 . . . . . . . . . . . . . . 104 106#
N. . . . . . . . . . . . . . . . 10# 43
STACK. . . . . . . . . . . . . . 22# 22 27 29
START. . . . . . . . . . . . . . 30# 112
W. . . . . . . . . . . . . . . . 14# 76+ 86
X3 . . . . . . . . . . . . . . . 60# 73
Y. . . . . . . . . . . . . . . . 6# 47
17 Symbols
调入汇编程序,当我们回答了上述各提示行的询问之后,汇编程序就对源程序进行汇编。若汇编过程中发现源程序有语法错误,则列出有错误的语句和错误的代码。错误分警告错误(Wraning Errors)和严重错误(Severe Errors)。警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数及行号、错误的性质等。这时,就要对错误进行分析,找出问题和原因,然后再调用编辑程序加以修改,修改后重新汇编,直到汇编后无错误为止。
(三) 用连接程序LINK生成可执行程序文件(EXE文件)
经汇编后产生的二进制的目标程序文件(OBJ文件)并不是可执行程序文件(EXE文件),必须经连接以后,才能成为可执行文件。连接程序并不是专为汇编语言程序设计的。如果一个程序是由若干个模块组成的,也可通过连接程序LINK把它们连接在一起。这些模块可以是汇编程序产生的目标文件,也可以是高级语言编译程序产生的目标文件。
连接过程如下:
C>LINK ABC
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
Run File [ABC.EXE]:
List File [NUL.MAP]:ABC
Libraries [.LIB]:
在连接程序调入后,首先显示版本号,然后出现三个提示行。
第一个提示行为:Run File [ABC.EXE]:
这是询问要产生的可执行文件的文件名。一般直接回车采用方括号内规定的隐含文件名。
第二个提示行为:List File [NUL.MAP]:
这是询问是否要建立连接映象文件。若不建立,则直接回车;若要建立,则输入文件名再回车。如果要建立该文件,可以输入文件名ABC。
第三个提示行为:Libraries [.LIB]:
这是询问是否用到库文件。若无特殊需要,则直接回车即可。
上述提示行回答后,连接程序开始连接。若连接过程中有错,则显示错误信息,错误分析清楚后,要重新调入编辑程序进行修改,然后重新汇编,再经过连接,直至无错为止。连接以后,便产生了可执行程序文件(EXE文件)。
(四) 程序的执行
当我们建立了可执行文件ABC.EXE后,就可直接在DOS下执行该程序:
C>ABC
根据程序提示,输入一个年份,计算机会输出是否闰年的结果。