资源描述
实验一 汇编语言上机环境及基本操作一、实验目的及要求1学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。2学会使用EDIT、MASM、LINK、DEBUG等软件工具。 3熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。二、实验内容 1汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。设定源程序的文件名为ABC。DATASEGMENT BUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUF DATAENDSSTACKSEGMENT STACK STACK STA DB 10 DUP(?) TOP EQU $-STA STACKENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DS XOR AX,AX PUSH AXMOV AX,DATA MOV DS,AX MOV BX,OFFSET BUF MOV CX,CN DEC CX MOV AL,BX INC BX LP:CMP AL,BX JBE NEXT MOV AL,BX NEXT:INC BX DEC CX JNZ LP MOV AH,4CH INT 21H CODEENDS END START 键入以下命令:C:EDIT ABC.ASM此时屏幕的显示状态如图1所示。图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。2 将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。(3)若程序中使用了宏指令,则汇编程序将展开宏指令。源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。图2 MASM宏汇编程序工作窗口汇编过程的错误分警告错误(Warning Errors)和严重错误(Severe Errors)两种。其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。3用连接程序生成可执行程序文件经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE)。连接过程如图3所示。图3 LINK连接程序工作窗口上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。连接以后,便可以产生可执行程序文件(.EXE文件)。4程序的执行当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。如:C:ABC 本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果。我们可以采用调试程序DEBUG来进行检查,相关内容请参见实验二。三、实例分析下面通过一个汇编语言源程序的实际例子,来了解汇编语言源程序的建立、汇编、连接、运行的完整过程。给出的程序是从键盘输入10个字符,然后以与键入相反的顺序将10个字符输出到显示屏幕上。设定源程序名为STR.ASM。1用EDIT建立汇编语言源程序在DOS状态下,调用EDIT编辑程序建立文件名为STR.ASM的汇编源程序,如图4所示。图4 用EDIT建立汇编语言源程序2用MASM汇编生成目标文件源程序文件建立完毕后,调用宏汇编程序MASM对STR.ASM进行汇编,如图5所示。图5 用MASM汇编生成目标文件3用LINK进行连接生成可执行文件汇编完毕,程序正确,则可调用LINK进行连接,以生成可执行文件STR.EXE,连接过程如图6所示。图6 用LINK连接生成可执行文件4程序的运行在DOS状态下,直接键入可执行的程序文件名STR,然后从键盘输入“0123456789”10个数字,输入回车键后,计算机将10个数字倒序排列输出,即“9876543210”。再次键入可执行的程序文件名STR,从键盘输入“abcdefghIj”10个字符,输入回车键后,计算机将10个字符倒序排列输出,即“jihgfedcba”。运行过程及其结果如图7所示。图7 程序的运行状态及结果参考程序:显示字符串data segmentmsg db hello world!,0dh,0ah,24hdata endsstack segment stack stackdb 16 dup(stack)stack endscode segmentassume cs:code,ds:data,ss:stackmain proc farstart:mov ax,data ;初始化数据段mov ds,ax mov dx,offset msg ;字串首地址送DX mov ah,09h;调用DOS系统功能int 21h ;显示字串mov ax,4c00h ;返回DOSint21hmain endpcode endsend start实验2 分支程序的设计一、实验目的1) 熟悉分支程序的编写。2) 学习DOS系统功能调用(INT 21H/08H,AL=ASCII字符)从键盘接收单个字符的用法。3) 掌握数据的输入与输出方法。二、实验内容1) 用DOS系统功能调用INT 21H的08H功能接收键盘字符(AL=字符),若是 F,显示“This is the first word string.,若是S,显示“This is the second word string.,否则退出。2) 设计一数据块间的搬移程序三、实验要求1) 实验前准备好汇编语言源程序,阅读实验指导书关于调试方法与步骤的内容。2) 实验要求在PC机上进行。四、编程提示1) 用DOS系统功能调用INT 21H的09H功能显示字符串。2) 用P命令执行程序,可看出结果。3) 显示字符串参考程序data segmentstr1 db this is the first word string.,$str2 db this is the second word string.,$data endsstack segmentsta db 50 dup (?)top1 equ length stastack endscode segmentassume cs:code,ds:data,ss:stackmain proc farstart: push ds ;将DS入栈mov ax, 00h ;AX置零push ax ; 将0入栈mov ax, data ;初始化DSmov ds, axmov ah, 08h ;键盘输入一个字符int 21h ;字符在AL中cmp al, fjz disp1cmp al, sjz disp2jmp dodisp1: mov dx, offset str1 ;显示字符串mov ah, 09hint 21hjmp dodisp2: mov dx, offset str2mov ah, 09hint 21hdo : mov ax, 4c00h ;返回DOSint 21hmain endpcode endsend start实验3 循环程序设计实验一、 实验目的1) 学习将一个十六位二进制数数转换成四位十六进制数显示的编程方法。2) 熟悉循环程序的设计方法。1) 学习乘法指令的用法。二、 实验内容 实现两个字节相乘的程序,并转换成十六进制数显示出结果。 23H20H=?三、实验要求1) 分析题目,确定算法,画出程序框图。2) 实验前准备好汇编语言源程序。3) 实验要求在PC机上进行。四、编程提示1) 两个数据放在数据段的DAT1和DAT2 中。 2) 计算结果转换成ASCII码显示,因此结果的高四位要拼成3,用INT 21H的02H功能(DL=显示字符)显示结果。3) 参考程序DATA SEGMENTDAT1 DB 25H ; 25HDAT2 DB 30H ; 30HSUM1 DW ?,?SUM2 DB 10 DUP (0)TABLE DB 0,1,2,3,4,5,6,7,8,9 DB A,B,C,D,E,F DATA ENDSSTACK SEGMENT ST1 DB 100 DUP (SA) TOP1 EQU ST1 LENGTH ST1STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARSTART: MOV AX, DATA ;初始化数据段 MOV DS, AX MOV AX, STACK ;初始化堆栈段 MOV SS, AX MOV AX, 100 MOV SP, AX XOR AX, AX MOV BL, DAT1 ;取乘数 MOV AL , DAT2 ;取被乘数 MOV SI , OFFSET TABLE ;取ASCII码表首地址 MOV DI , OFFSET SUM2 ;取结果地址 MUL BL MOV SUM1, AX ;存乘积二进制结果 ; convert binary number in bx to hex 转换成16进制 mov BX, AX ;结果送BX MOV CX, 4 ;转换4位数HEX16:PUSH CX ;保护CX MOV CL, 4 ;循环左移4位 ROL BX, CL MOV AL, BL AND AL, 0FH ;保留低四位 PUSH BX ;保护BX MOV BX, SI ;ASCII码表首地址送BX XLAT ;转换成ASCII码 MOV DI, AL ;存结果的ASCII码 INC DI ;地址加一 POP BX ;恢复BX中待转换的数 POP CX ;弹出CX的计数值 LOOP HEX16 ;未转换完,继续; display results on screen MOV AH, 02H ;调用DOS的02H功能显示 MOV CX, 04H ;显示数据的位数 MOV DI, OFFSET SUM2 ;送出待显示数据的首地址 DON2: MOV DL, DI ;显示数据送DL INT 21H ;显示 INC DI ;显示数据所在存储单元加一 LOOP DON2 ;未显示完,继续 MOV AH, 4CH ;返回DOS INT 21H RETMAIN ENDP CODE ENDS END START 五、实验报告1) 说明程序结构及功能。2) 说明入口参数与出口参数,参数的输人与输出方法。3) 说明调试过程中遇到的问题及解决的方法。4) 画出程序框图,打印源程序清单与执行结果。
展开阅读全文