汇编语言程序设计实验报告学号:*********班级:电气信息类1005******指导老师:***实验一、汇编语言上机的基本过程及环境【实验目的】(1)熟悉汇编语言的编辑、汇编、连接及调试的全过程,重点掌握使用DEBUG调试程序的方法。
(2)了解汇编语言的程序结构。
【实验内容】(1)在数据段中定义两个数(数据自拟,包含有正数和负数),要求编写程序分别计算出这两个数的和、差、积、商,并用Debug的相关命令查询计算结果(包括对CF,OF,SF,ZF的影响)。
(2)首先对AX,BX,CX寄存器赋初值(数据自拟),再将AX寄存器的中间八位,BX的低四位和CX的高四位拼接成一个新的字,并把结果存入偏移地址为0000H的存储单元。
其中BX的低四位作为结果字的高四位,CX的高四位作为结果字的低四位。
并用Debug的相关命令查询内存单元的结果字。
源代码:DA TA SEGMENTval1 DW 1000hval2 DW 2000hmaxv DW ?DA TA ENDSSTACK SEGMENT STACK 'STACK'DB 100H DUP(?)STACK ENDSCODE SEGMENT 'CODE'ASSUME CS:CODE, DS:DATA,SS:STACK.386MAIN:MOV AX, DATA;MOV DS, AXPUSH val1PUSH val2CALL MAX ;POP maxv ;栈顶返回值出栈MOV AX, 4c00HINT 21HMAX PROCPUSH BP ;执行该指令前堆栈情况MOV BP, SP ;执行后堆栈情况MOV AX, [BP+4]CMP AX, [BP+6]JA EXITMOV AX, [BP+6]EXIT: MOV [BP+6], AX ;用栈顶返回值POP BPRET 2 ;执行后堆栈情况MAX ENDPCODE ENDSEND MAIN【实验步骤】(1)用编辑软件(记事本、UltraEdit等)编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序MASM汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序LINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)(4)用DEBUG32调试可执行文件,观察执行结果,以验证其正确性。
【实验要求】(1)在程序的调试过程中,有意识地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。
(2)实验报告编写要规范,应包括:实验名称、目的、内容、实验步骤、实验原始记录(采用的实验数据及得到的结果,对Debug的显示截图)和实验总结。
实验报告还要附有源程序清单。
实验总结主要包括上机调试的情况、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
【实验总结】第一次做汇编实验,主要是要熟悉汇编语言的编辑、汇编、连接及调试的全过程,重点掌握使用DEBUG调试程序的方法。
由于是第一次,我没有准备好,对汇编语言的一系列命令不懂,让我很难做,但在可后通过复习和同学的帮助,我慢慢的清楚了汇编语言的编辑和汇编,以及调试的全过程。
下次我会在实验前做好充足的准备。
实验二、分支及循环程序设计【实验目的】(1)掌握分支及循环结构程序设计的方法。
(2)进一步熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
【实验内容】(1)在数据段中定义若干个有符号字数据(初始值自拟)存放在以BUF为首址的存贮区中,编写程序求最大值和最小值,并保存到MAX,MIN变量中。
源代码:DA TA SEGmentBUF DW 0E34AH,1432,1945H,0FFFFH,-32768,3344COUNT EQU ($-BUF)/2MAX DW 8000HMIN DW 7FFFHDA TA ENDSCODE SEGMENTassume CS:CODE, DS:DA TAMAIN:MOV AX, DATAMOV DS, AXMOV CX, COUNTMOV BX, 0MOV AX, MAXMOV DX, MINLP:CMP AX, BUF[BX]JG BRA0MOV AX, BUF[BX]BRA0:CMP DX, BUF[BX]JL BRA1MOV DX, BUFbra1:add BX, 2LOOP LPMOV MAX,AXMOV MIN,DXMOV AX, 4C00HIN T 21HCODE endsend MAIN【实验步骤】(1)用编辑软件(记事本、UltraEdit等)编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序MASM汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序LINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)(4)用DEBUG32调试可执行文件,观察执行结果,以验证其正确性。
【实验要求】(1)在程序的编写过程中,有意识地学习掌握各种分支和循环跳转方法。
(2)实验报告编写要规范,应包括:实验名称、目的、内容、实验步骤、实验原始记录(采用的实验数据及得到的结果,对Debug的显示截图)和实验总结。
实验报告还要附有源程序清单。
实验总结主要包括上机调试的情况、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
【实验总结】这次做实验主要是掌握分支及循环结构程序设计的方法,还有进一步了解汇编语言的调试方法。
在实验中调试要使用debug,先可进行反汇编用—U,在用单步执行用t,多步执行用-g.经过这次实验学会了汇编语言的debug调试,下次我会继续努力。
实验三、子程序设计【实验目的】(1)掌握子程序设计的方法及堆栈参数传递方法。
(2)进一步熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
【实验内容】(1)在数据段中定义两个有符号字变量(初始值自拟),用函数实现求两个字变量中大的值,并使用堆栈传入参数和返回结果,并保存到maxv变量中。
源代码:DA TA SEGMENTval1 DW 1000hval2 DW 2000hmaxv DW ?DA TA ENDSSTACK SEGMENT STACK 'STACK'DB 100H DUP(?)STACK ENDSCODE SEGMENT 'CODE'ASSUME CS:CODE, DS:DATA,SS:STACK.386MAIN:MOV AX, DATA;MOV DS, AXPUSH val1PUSH val2CALL MAX ;POP maxv ;栈顶返回值出栈MOV AX, 4c00HINT 21HMAX PROCPUSH BP ;执行该指令前堆栈情况MOV BP, SP;执行后堆栈情况MOV AX, [BP+4]CMP AX, [BP+6]JA EXITMOV AX, [BP+6]EXIT: MOV [BP+6], AX ;用栈顶返回值POP BPRET 2 ;执行后堆栈情况MAX ENDPCODE ENDSEND MAIN【实验步骤】(1)用编辑软件(记事本、UltraEdit等)编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序MASM汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序LINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)(4)用DEBUG32调试可执行文件,观察执行结果,以验证其正确性。
【实验要求】(1)在程序的编写过程中,有意识地学习掌握各种分支和循环跳转方法。
(2)实验报告编写要规范,应包括:实验名称、目的、内容、实验步骤、实验原始记录(采用的实验数据及得到的结果,对Debug的显示截图)和实验总结。
实验报告还要附有源程序清单。
实验总结主要包括上机调试的情况、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
【实验总结】本次实验主要是掌握子程序设计的方法及堆栈参数传递方法,还有进一步熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
由于以前堆栈学的不是很好,所以对这次的程序比较难理解,但总的来说,还是很顺利。
实验四、系统调用与中断处理【实验目的】(1)掌握DOS 提供的有关输入/输出的系统功能调用。
(2)进一步熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
【实验内容】(1)编程实现在给定的字符串查找一字符,待找字符从键盘输入,找到时提示’Yes,found !’,找不到时提示’N o found !’。
源代码:DA TA SEGMENT public USE16 'DA TA'tipmsg db 'Enter the char:$'string db 'abcdefg1234567890$'succstr db 'Yes, found!$'failstr db 'No, found!$'return db 13,10, '$'DA TA ENDSstack segment stack USE16 'STACK'DB 1024 dup(?)stack endsCODE SEGMENT public USE16 'CODE'ASSUME CS:CODE, DS:DATA, SS:stack.386MAIN:mov ax, data;mov ds, ax; 显示提示字符串MOV dx, offset tipmsgMOV AH, 9INT 21H;输入一个字符MOV AH, 1INT 21HMOV CL, AL;输出回车换行MOV dx, offset returnMOV AH, 9INT 21H;查找MOV BX, 0FIND: CMP string[BX], '$' ;判断是否结束符JZ NO;CMP string[BX], CLJZ YESINC BXJMP FINDYES: MOV dx, offset succstr ;显示Yes,Found!MOV AH, 9INT 21HJMP EXITNO: MOV dx, offset failstr ;显示No found!MOV AH, 9INT 21HEXIT:mov ax, 4c00hINT 21HCODE ENDSEND MAIN【实验步骤】(1)用编辑软件(记事本、UltraEdit等)编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序MASM汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序LINK连接目标代码文件,形成可执行文件。