《王晓冬汇编.doc》由会员分享,可在线阅读,更多相关《王晓冬汇编.doc(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除实验一 汇编语言程序设计的实验环境及实验步骤第一部分 DOS环境下的汇编语言编程环境使用一、实验要求和目的1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握宏汇编程序MASM的使用;3、熟练掌握连接程序LINK的使用。二、实验内容与步骤1、实验内容编写程序,判断一个年份是否是闰年。2、实验步骤(1)用编辑程序EDIT建立汇编语言源程序文件(ASM文件) DATA SEGMENT INFON DB 0DH,0AH,Please input a year: $ Y DB 0DH,0AH,This is a leap year! $ N DB 0D
2、H,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
3、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 P
4、USH 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(2)用汇编程序MASM将ASM文件汇编成目标程序文件(OBJ文件)(3) 用连
5、接程序LINK生成可执行程序文件(EXE文件)(4) 程序的执行输入年份1990,得到输出结果如下图:三、思考与练习(1)汇编过程中 MASM ABC和 MASM ABC.ASM的结果是否一致?答:一致(2)连接过程中 LINK ABC和LINK ABC.OBJ的结果是否一致?答:一致第二部分 Debug的使用一、实验要求和目的熟练掌握动态调试程序DEBUG的使用1、实验内容(1)进入和退出Debug程序(2)学会Debug中的D命令、E命令、R命令、T命令、A命令、G命令、U命令等的使用。 (3)使用Debug调试程序调试汇编程序(4)现有一个双字加法源程序如下,其中存在错误。现假设已汇编、
6、连结生成了可执行文件HB.EXE,存放在d:MASM目录下。请使用Debug对其进行调试。Code SEGMENT ASSUME CS:code,DS:code ORG 100H ;从100H处开始存放下列指令Start:MOV AX,code ;将DS置成code段的首地址 MOV DS,AX MOV SI,200H ;取第一个数的首地址 MOV AX,SI ;将第一个数的低16位取到AX MOV DI,204H ;取第二个数的首地址 ADD AX,DI ;第一个数和第二个数的低16应相加 MOV SI+8,AX ;低16位相加的结果送到208H和209H单元 MOV AX,SI+2 ;取第
7、一个数的高16位送到AX中 ADD AX,DI+2 ;两个数的高16位相加 MOV SI+0AH,AX ;高16位相加的结果送到20AH,20BH单元 MOV AX,4C00H ;使用DOS的4CH号功能调用 INT 21H ;进入功能调用,返回DOS ORG 200H ;从200H处开始存放下列数据 DD 12345678h,654387A9h,0h ;被加数、加数、和Code ENDS END start2、实验步骤(1)利用宏汇编对源程序a.asm进行汇编连接,生成可执行文件a.exe(2)在DOS提示符下进入debug程序并装入可执行文件a.exe。(3)用R命令观察寄存器初始状态,如
8、下图:(4)用T命令以单步工作方式执行程序前两条指令,装入DS,如下图:(5)用D命令观察用户初始段内容,如下图:(6)用U命令对程序进行反汇编,如下图:(7)以连续工作方式将程序执行到返回DOS前,即执行到011B处并用G命令观察数据段内容,如下图:(8)用E命令修改数据段200-208为CD,AB,78,56,90,EF,34,12用D命令观察并用G命令执行程序到返回DOS前,所得结果再用D命令查看数据段如图:程序运行结果不对(9)将断点设置在完成低位加法后(112)处,查看运行结果,如图:低位和为9B5D,正确。说明错误可能出在后面(10)使用T命令从刚才断点处向后单步调试并查看运行结果
9、,如图:AX寄存器的结果为68AC,而应为68AD。可见是本条加法指令使用错误,该指令应为ADC,错误应用为ADD(11)用A装入正确指令并运行查看结果,如图:(12)用Q指令退出DEBUG,如图:二、思考与练习(1) 如何启动和退出Debug程序?答:启动:debug 文件名.exe 退出:用Q命令(2) 用Debug调试程序时,如何设置断点?答:用G命令(3)编写计算下面函数值的程序:设输入数据为X、输出数据Y,且皆为字节变量,程序代码:DATASEGMENTX DB 12Y DB ?DATAENDSCODESEGMENTASSUME DS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX CMPX,0 ;与0进行比较 JGE PART1 ;X0转PART1 MOVY,-1 ;X 0时,-1Y JMP EXITPART1: JG PART2 ;X0转PART2 MOVY,0 ;X=0时,0Y JMP EXITPART2: MOVY,1 ;X0,1Y EXIT: MOVAH, 4CH INT21H CODE ENDS ENDSTART【精品文档】第 5 页
限制150内