福建农林大学东方学院信息工程类实验报告
系:计算机系专业:电子信息工程年级: 10 姓名:廖少兵学号: 1050302103 实验课程:汇编语言
实验室号:_______ 实验设备号:实验时间:
指导教师签字:成绩:
实验一汇编程序的汇编及运行
1.实验目的和要求
1、熟悉汇编程序的汇编、连接、执行过程
2、生成LST文件,查看LST文件
3、生成OBJ文件,修改语法错误
4、生成EXE文件
5、执行
2.实验的原理和主要仪器设备
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录
1、将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?
DA TA SEGMENT
ORG 20H
NUM1=8
NUM2=NUM1+10H
DA1 DB ‘IBM PC’
DA2 DB 0AH, 0DH
COUNT EQU $-DA1
DA TA ENDS
END
2、输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连
接、运行。
)
DA TA SEGMENT
V AR1 DB 0, 25, ODH, 300
V AR2 DB 12H, A4H, 6BH
V AR3 DB ’ABCDEF’
V AR4 DW 1234H, 5678H
V AR5 DW 10H DUP(?)
DA TA ENDS
CODE SEGMENT
ASSUME CS: CODE, DE: DA TA
BEING MOV AX, DA TA
MOV DS, AX
LEA SI, V AR5
MOV BX, OFFSET V AR2
MOV [SI], 0ABH
MOV AX, V AR1+2
MOV [BX], [SI]
MOV V AR5+4, V AR4
MOV AH, 4CH
INT 21H
CODE ENDS
END START
3、输入正确的程序,汇编、连接、运行
STACKS SEGMENT STACK
DW 128 DUP(?)
STACKS ENDS
DA TAS SEGMENT
STRING DB ‘WELCOME!’, 13, 10, ‘$’
DA TAS ENDS
CODES SEGMENT
ASSUME CS: CODES, DS: DA TAS
START:MOV AX, DA TAS
MOV DS, AX
LEA DX, STRING
MOV AH, 9
INT 21H
MOV AH, 4CH
INT 21H
CODES ENDS
END START
4.操作方法及实验步骤
编写各代码并存储为源程序asm文件,对其进行汇编、连接。
1、Dos进入masm目录
2、masm 文件名(对文件进行编译)
3、link 文件名(对生成OBJ目标文件进行连接)
4、由dos加载连接后生成的可执行文件来执行程序
5.实验数据处理和分析
(1)
(2)如图输入代码编译未能通过,提示出错有9处
其中2、3、9行均为符号未定义错误,其中修改ODH中O在十六进制中未定义(不存在)、而A4H以字母开头必须添上数字0)、寄存器中没有DE故而修改之。
第十行我们暂且放着,第十四行提示说操作数必须指定大小空间由代码可知,立即数ABH传给内存单元时,必须指定内存大小空间,所以可修改该句为MOV BYTE PTR 0ABH。
而15行的错误提示与17行一样均不能找到段寄存器所分配的地址,15行从代码格式上看除了位数不一致外并不是如是的所提错误,而17行是错在两个立即数作为MOV指令的操作数,我们先跳过。
下面16行的错误是非法错误的操作数格式,这里两个操作数均是内存单元里的数据,可修改【BX】为BX。
由21行错误可知START未定义,之前程序入口中出现了标识符BEING,因此这里改为BEING。
同时可知刚刚第十行错误就显而易见了,标识的格式错了。
应该为BEING:。
部分修改后代码如下:
重新编译得如下错误提示第2行中300超出了所分配的看空间字节大小,
这里把它改为30,比较之前的出错提示17行和15行的均改变了,这才具体指出了出错原因。
这里15行我们就修改AX为AL,匹配两操作数位数。
17行中我们为不改变原意可以用如下指令替代:MOV CX,VAR4; MOV VAR5+4,CX;
(3)编辑源程序后编译未能通过,提示如图:
我们打开源程序看到如图所示:
我们之前定义的是DA TAS而不是DATAX,修改之。
编译通过,我们link进行连接如图:
已生成可执行文件3.exe。
6. 实验结果
(1)编辑源程序后编译生成list文件提示时输入文件名得到1.list文件。
打开如图得知:DA1、DA2的偏移量分别是0020H和0026H。
(2)通过以上调试分析,最终修正代码,如图已能通过编译。
(3)运行3.exe文件,结果如图:
7. 总结,质疑,建议,问题讨论
通过此次上机实验进行从编辑源程序到最终的可执行文件的生成并运行。
加深了我对程序编译连接运行程序的整个过程的理解,而其中的编译过程让我看到了一个不显眼list文件对之后查错,核实各个指令运行的正确性应该说是程序员的理解与系统处理是否存在出入的重要性,其次让我更加懂得去读懂出错提示,根据提示定位代码的错误之处并修正,再者从实验中发现了重要的一点,要让编译器给出正确或说是更确切的指示,我们应该先保证自己编写的代码语法上的严谨与规范,如17行与15行的错误提示由于程序入口标识符的错误定义而受影响的情况。