《汇编语言程序设计》第二次上机2-1实验报告院系:计算机科学与技术专业:信息安全班级:0903班姓名:学号:时间:2011-6-6地点:南一楼808一、实验目的 (3)二、题目与实验要求 (3)三、寄存器分配和变量定义说明: (3)四、流程图 (5)五、源程序及注释 (7)六、实验步骤 (13)七、实验记录 (13)八、体会 (16)一、实验目的1、加深对一些常用的汇编指令的理解;2、加深对常用DOS功能调用指令的理解;3、进一步熟悉TD的使用。
二、题目与实验要求1、《80X86汇编语言程序设计》教材中 P95的 3.7 题。
要求:(1)将该题改成一完整的程序(可以省略实验报告中的程序框图)。
(2)请事先指出依次执行每条程序指令后(AX)的内容。
(3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。
(4)记录上机执行后与(2)、(3) 中对应的内容。
2、《80X86汇编语言程序设计》教材中 P94的 3.3 题。
要求:(1)将该题改成一完整的程序,其中数据段的定义为习题3.1中的数据段(可以省略实验报告中的程序框图)。
(2)请事先画出数据段中数据的存储形式。
(3)请事先指出依次执行每条程序指令后相应寄存器中的内容。
(4)请事先给出各调指令在汇编后的形式。
(5)比较上机执行后,看到的各项内容是否与(2)、(3) ,(4)内容一致。
不一致的应分析错误原因。
3、《80X86汇编语言程序设计》教材中 P96的 3.11 题。
要求:(1)请事先指出程序运行结束后,显示器显示的内容。
(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)指出程序运行后看到的结果,若不一致,分析产生错误的原因。
4. 从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,相等显示“MATCH !”, 不相等显示“NO MATCH !”。
要求:(1) 使用10号功能调用输入字符串;(2) 使用9号功能调用输出提示信息;提示:先比较长度是否相等。
5 选做题输入一个无符号的数字串,然后以16进制形式显示出串的值。
例如:INPUT A NUMBER : 59RESULT : 3BH其中下划线上的内容(59)为程序运行时输入的串。
三、寄存器分配和变量定义说明:题目31. 存储单元分配:NUM为一个定义在数据段中的字节变量,存储一个二进制数BUF为一个定义在数据段中的字节变量,存储回车换行与提示信息BUF0为一个定义在数据段中的字节变量,存储一个十六进制数2.寄存器分配:DI存储BUF0中某个字节的地址,用于寄存器间接寻址AL存储NUM中二进制数高四位与低四位对应的数字的ASCII码题目41. 存储单元分配:BUF1、BUF2为两个定义在数据段中的字节变量,存储输入的字符串信息 BUF3为一个定义在数据段中的字节变量,回车换行BUF4、BUF5为两个定义在数据段中的字节变量,存储提示信息2.寄存器分配:BX作为变址寻址寄存器使用题目5(选做题)1. 存储单元分配:STR1、STR2为两个定义在数据段中的字节变量,存储提示信息BUF1为一个定义在数据段中的字节变量,存储输入的字符串信息BUF2为一个定义在数据段中的字节变量,回车换行2. 寄存器分配:AX存储输入的字符串对应的数字CX用作计数器,控制循环次数DI用作变址寻址的变址寄存器四、流程图题目4题目5(选做题)五、源程序及注释题目1.386DATA SEGMENT USE16BUF DB ?DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME DS:DATA, SS:STACK, CS:CODE START:MOV AX, DATAMOV DS, AXMOV AX, 0DEC AXADD AX, 07FFFHADD AX, 2NOT AXSUB AX, 0FFFFHADD AX, 8000HOR AX, 0BFDFHAND AX, 0EBEDHXCHG AH, ALSAL AX, 1RCL AX, 1MOV AH, 4CHINT 21HCODE ENDSEND START题目2.386DATA SEGMENT USE16STR1 DB 0,1,2,3,4,5STR2 DB '012345'COUNT EQU 30NUMB DB 3 DUP(2)NUMW DW 10H,-60HPOIN DW 0DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME DS:DATA, SS:STACK, CS:CODE START:MOV AX, DATAMOV DS, AXMOV BX, OFFSET STR1+3MOV SI, OFFSET STR2MOV CL, COUNTMOV DX, WORD PTR NUMBMOV BP, NUMW+2MOV AL, 3[SI]MOV AH, [SI+BX+1]MOV CH, BYTE PTR NUMW+3MOVSX EAX,AXMOV AH, 4CHINT 21HCODE ENDSEND START题目3.386A1 SEGMENT USE16NUM DB 00111001BBUF DB 0AH,0DH,'(NUM)='BUF0 DB 4 DUP(?)A1 ENDSB1 SEGMENT USE16 STACKDB 200 DUP(0)B1 ENDSC1 SEGMENT USE16ASSUME DS:A1, SS:B1, CS:C1 BEGIN:MOV AX, A1MOV DS, AXLEA DI, BUF0MOV AL, NUMSHR AL, 4OR AL, 30HMOV [DI],ALINC DIMOV AL, NUMAND AL, 0FHOR AL, 30HMOV [DI],ALINC DIMOV BYTE PTR [DI],'H'INC DIMOV BYTE PTR [DI],'$'LEA DX, BUFMOV AH, 9INT 21HMOV AH, 4CHINT 21HC1 ENDSEND BEGIN题目4.386DATA SEGMENT USE16BUF1 DB 60DB ?DB 60 DUP(?)BUF2 DB 60DB ?DB 60 DUP(?)BUF3 DB 0DH,0AH,'$'BUF4 DB 'MATCH !$'BUF5 DB 'NO MATCH !$'DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME DS:DATA, CS:CODE, SS:STACKSTART:MOV AX, DATAMOV DS, AXLEA DX, BUF1MOV AH, 10INT 21HLEA DX, BUF3MOV AH, 9INT 21HLEA DX, BUF2MOV AH, 10INT 21HLEA DX, BUF3MOV AH, 9INT 21HXOR BH, BHMOV BL, BUF1[1] ;BUF1中的字符串长度存入BLMOV CL, BUF2[1] ;BUF2中的字符串长度存入CLCMP BL, CL ;比较两字符串长度JNE NOINC BLLOOP1: MOV CL, BUF1[BX]CMP CL, BUF2[BX] ;比较相同位置的字符是否相同JNE NODEC BLCMP BL, 1 ;判断字符串是否比较完毕JNE LOOP1LEA DX, BUF4MOV AH, 9INT 21HJMP EXITNO: LEA DX, BUF5MOV AH, 9INT 21HEXIT: MOV AH, 4CHINT 21HCODE ENDSEND START题目5(选做题).386DATA SEGMENT USE16STR1 DB 'INPUT A NUMBER: $'STR2 DB 'RESULT: $'BUF1 DB 60DB ?DB 60 DUP(0)BUF2 DB 0DH,0AH,'$'DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE, SS:STACK, DS:DATASTART:MOV AX, DATAMOV DS, AXLEA DX, STR1MOV AH, 9INT 21HLEA DX, BUF1INT 21HLEA DX, BUF2MOV AH, 9INT 21HLEA DX, STR2MOV AH, 9INT 21HXOR AX, AXXOR CH, CHXOR DX, DXMOV CL, BUF1[1] ;数字字符串长度存入CLMOV BX, 10MOV DI, 2LOOP1: MUL BX ;开始将字符串转化为十进制数存入AX MOV DL, BUF1[DI]SUB DX, 30HADD AX, DXXOR DX, DXINC DILOOP LOOP1MOV BX, 16LOOP2: INC CXDIV BXCMP DX, 10 ;判断是否小于10JL JMP1ADD DX, 7JMP1: ADD DX, 30H ;转化为对应的十六进制数PUSH DXXOR DX, DXCMP AX, 0JNE LOOP2LOOP3: POP DXMOV AH, 2INT 21H ;从高位至低位依次输出十六进制数LOOP LOOP3MOV AH, 2 ;输出字母HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND START六、实验步骤1. 存盘文件名依次为1-1.ASM、1-2.ASM、1-3.ASM、1-4.ASM、1-5.ASM。
2. 使用MASM5.0汇编源文件。
3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。
4. 使用连接程序LINK.EXE将汇编生成的OBJ文件连接成执行文件。
5. 若连接时报错,则依照错误信息修改源程序。
之后重新汇编和连接,直至不再报错并生成EXE文件。
6. 执行该程序,观察执行现象。