汇编语言程序设计实验篇emu
汇编语言程序设计实验篇emu新
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel 的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
《汇编语言程序设计》实验报告(一)
MESS2 DB 'NO MATCH!’,13,10,’$'
DATA ENDS
对以上源程序重新汇编、连接、运行,结果输出为:MATCH!
七、实验总结
通过这次上机实践,我对汇编程序和连接程序的使用开始有一点了解。但刚开始还是很不顺的,总是出现找不到文件,后来经过同学的指导,终于知道自己的错误,原来是路径错误。所以还需要勤加练习,多多实践。
四、实验材料、工具、或软件
多媒体计算机、WINDOWS XP系统或纯DOS系统、MASM6.11以上版本或汇编语言程序设计实验集成环境。
五、实验要求
1. 编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。
2.完成课堂例题,并用DEBUG运行,观察结果。
六、试验内容与步骤:(附上必要的调试过程及运行结果截图,可加附页)
试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。上机步骤如下:
《汇编语言程序设计》实验报告(一)
姓名
学号
系别
班级
指导教师
实验日期
课程名称
《汇编语言程序设计》
同组实验者
一、实验名称:实验一汇编程序和连接程序的使用
二、实验目的:
1. 熟悉汇编语言的上机环境;
2. 学习EDIT,MASM,LINK程序的使用;3. 掌握建立、汇、链接、运行汇编语言程序的过程。
汇编语言程序设计实验内容(川大微机原理实验资料和内容以及MASM使用方法)
第一部分汇编语言程序设计实验一熟悉、使用DEBUG调试工具一.上机目的:1.了解并逐步熟悉汇编语言的编辑方法及特点.2.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。
3.掌握汇编语言的编辑、汇编及连接的过程。
4.了解并逐步掌握运用DEBUG进行调试汇编语言程序。
二.实验内容:1.运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。
2.运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ 文件。
3.运用LINK.EXE文件进行连接,形成*.EXE文件。
4.仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。
5.运用DEBUG。
EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。
6.再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG 的设置断点,单步执行等功能发现错误所在并加以改正。
程序清单:多字节非压缩型BCD数除法(88754/6=14792)DA TA SEGMENTA DB 8,8,7,5,4B DB 6C DB 5DUP (0)N EQU 5DA TA ENDSCODE SEGMENTASSUME CS:CODE;DS:DATA;ES:DATA,START MOV AX,DA TAMOV DS,AXMOV ES,AXCLDLEA SI,ALEB DI,CMOV CX,NMOV AH,0LP1:LODSBAADDIV BSTOSBLOOP LP1MOV CX,NLEA DI,CLP2:MOV DL,[DI]MOV AH,2INT 21HDEC DILOOP LP2MOV AH,4CHINT 21HCODE: ENDSEND START实验二设计汇编语言程序一.8088提供了一套字符串处理指令,这些指令的特点是:在使用前必须先在指定的寄存器中存入源字符串和目的字符串的首地址及相关字符数,在处理过程中还可以使用REP重复操作前缀。
《汇编语言》实验报告
《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
汇编语言程序设计-实验
3.用连接程序生成可执行程序文件 .
在DOS状态下键入以下命令: D:\MASM> LINK EG1 经汇编以后产生的目标程序文件(.OBJ文件) 并不是可执行程序文件,必须经过连接以后,才能 成为可执行文件(即扩展名为.EXE)。
连接过程如下图所示
提示将要产生的可执行文件名,通 提示将要产生的可执行文件名, 常直接按回车键表示使用默认文件 名 内存映象文件的提示,直接按回车键 内存映象文件的提示, 表示不产生此文件。 表示不产生此文件。 内存映象文件的提示,直接按回车键 内存映象文件的提示, 表示不产生此文件。 表示不产生此文件。
汇编语言程序设计 实验
汇编程序开发过程
建立汇编源程序(即:建立 文件名.asm) 使用EDIT.EXE文本编辑器进行输入 编译目标文件(即:编译为.obj 文件) 使用MASM进行汇编 编译不通过,重新修改(错误类型:源程序语句不合法) 依据MASM汇编过程中给出的行号进行修改 连接为可执行文件(即:连接为.exe 文件) 使用LINK进行连接 运行编译好的可执行文件 用调试工具调试,重新修改(逻辑错误)
参考程序:
要显示字符串必须以“$”为结束符 DATA SEGMENT 数据段定义 BUF DB 'Hello, world !$' 堆栈段的定义最后一定要加上STACK DATA ENDS STACK SEGMENT STACK DW 36 DUP(?) 堆栈段定义 STACK ENDS CODE SEGMENT ;段寄存器声明 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA ;主程序开始 MOV DS,AX MOV DX,OFFSET BUF MOV AH,9 显示字符串的9号DOS功能调用 INT 21H MOV AH,4CH 结束程序的运行,返回DOS INT 21H CODE ENDS ;结束主程序 END START
汇编上机实验报告
汇编上机实验报告实验目的:通过进行汇编语言上机实验,掌握汇编语言的基本语法和编程技巧,培养汇编程序设计能力。
实验内容:实验一:汇编程序的简单输入输出1.编写一个汇编程序,要求从键盘输入两个整数,然后将其相加,并将结果输出到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验二:汇编程序的条件跳转1.编写一个汇编程序,要求从键盘输入一个整数,判断其是否大于10,若是,则将其打印到屏幕上;否则,将其乘以5并打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验三:汇编程序的循环1.编写一个汇编程序,要求计算1到10的累加和,并将结果打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验四:汇编程序的数组操作1.编写一个汇编程序,要求定义一个长度为10的数组,并将数组中的值初始化为0,然后利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验结果:实验一:汇编程序的简单输入输出编写的汇编程序通过键盘输入两个整数,实现了相加并将结果输出到屏幕上的功能。
程序运行正常,输出结果与预期一致。
实验二:汇编程序的条件跳转编写的汇编程序通过键盘输入一个整数,根据条件判断,实现了将输入数大于10时打印在屏幕上,否则将其乘以5并打印在屏幕上的功能。
程序运行正常,输出结果与预期一致。
实验三:汇编程序的循环编写的汇编程序通过循环计算1到10的累加和,并将结果打印在屏幕上。
程序运行正常,输出结果与预期一致。
实验四:汇编程序的数组操作编写的汇编程序通过定义一个长度为10的数组,并将数组中的值初始化为0,利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。
汇编语言程序设计实验报告
汇编语言程序设计报告班级:学号:姓名:目录汇编语言程序设计报告 (1)汇编语言程序设计实验报告 (4)实验一 (4)实验内容 (4)实验目的 (4)实验代码 (4)实验代码整体思路 (5)1.检测所编程序的正确性 (5)实验二 (7)1.实验内容 (7)结果测试: (11)Debug: (11)实验三 (13)实验要求: (13)实验代码: (13)实验代码思路: (15)检测结果,验证正确性 (15)结论 (17)实验四 (17)实验内容 (17)流程图 (18)实验代码: (18)Windbg (21)实验结果测试: (23)输入数据进行测试 (24)实验五 (24)实验内容:多模块程序设计及多语言混合编程。
(24)要求: (24)实验代码: (24)实验代码分析说明: (26)实验数据检测:判断是否成功完成实验任务 (27)实验心得 (28)汇编语言程序设计实验报告实验一实验内容:熟悉DOS编程环境:编写一个DOS环境的汇编语言程序,要求从键盘输入一串字符,去除连续重复的字符后再显示,如:输入一串为“aaawwweerrty”的字符串,输出结果应为‘awerty’实验目的:通过上机实践加深对16位环境下编程的了解学会使用debuge调试程序实验代码:LEA SI, BUFFER + 1LP1:INC SILP2:MOV AL, [SI]CMP AL, 13JZ DISPCMP AL, [SI + 1]JNZ LP1MOV DI, SILP3:INC DIMOV AL, [DI + 1]MOV [DI], ALCMP AL, 13JZ LP2JMP LP3DISP:MOV AL, '$'MOV [SI], ALMOV AH, 9LEA DX, BUFFER + 2INT 21HEXIT:MOV AX, 4C00HINT 21HCODE ENDSEND MAIN实验代码整体思路:定义一个大小为60的缓冲区,用来存储从键盘输入的字符串;调用中断调用,将字符串输入到缓冲区当中;使用取地址符号Lea取得输入字符串的首地址然后后一位与前一位相比,若相同则将其舍弃,否者将其记录在缓冲区中,循环结束之后在其后补上字符“$”即可一次输出,无单个输出1.检测所编程序的正确性:编译所建的1.asm文件:按下回车键之后开始编译,如下图所示,编译结束表明没有错误不存在警告对编译成功之后的文件进行链接,以生成能运行的.exe文件,如下图1-1所示:1-1链接之后发现链接(Link)之后也是成功的,接下来就进行测试的最后一步,即运行1.exe文件,输入一串字符串,看能否达到预期的目的,如达到,则成功,否者重新编译。
汇编程序设计实验
汇编程序设计实验汇编程序设计实验是计算机科学与技术专业中一项重要的实践教学环节,它旨在培养学生对计算机硬件结构和低级语言程序设计的深入理解。
通过实验,学生可以学习到如何使用汇编语言编写程序,以及如何将这些程序转换为机器可以执行的指令。
实验目的1. 理解汇编语言的基本概念和语法结构。
2. 掌握汇编语言程序设计的基本方法和技巧。
3. 熟悉汇编程序的编写、编译、调试和运行过程。
4. 增强对计算机硬件工作原理的认识和理解。
实验环境- 汇编语言开发环境,如MASM、NASM等。
- 汇编器和链接器,用于将汇编源代码转换为可执行文件。
- 调试工具,如调试器,用于检查程序的执行过程。
实验内容1. 汇编语言基础- 学习汇编语言的指令集和操作数。
- 了解汇编语言的基本语法和程序结构。
2. 编写简单的汇编程序- 编写一个程序,实现数据的输入和输出。
- 编写一个程序,实现简单的算术运算。
3. 寄存器和内存操作- 学习如何使用寄存器进行数据存储和操作。
- 编写程序,实现内存地址的数据读写。
4. 循环和条件判断- 学习循环结构和条件判断的实现方法。
- 编写程序,实现循环和条件判断的功能。
5. 子程序调用- 学习子程序的编写和调用方法。
- 编写一个主程序和若干子程序,实现模块化编程。
6. 中断和异常处理- 了解中断和异常的基本概念。
- 编写程序,实现简单的中断服务程序。
7. 汇编与高级语言的接口- 学习如何将汇编程序与C/C++等高级语言程序进行接口。
- 编写程序,实现汇编语言与高级语言的混合编程。
实验步骤1. 环境搭建:安装并配置汇编语言开发环境。
2. 编写代码:根据实验要求编写汇编语言源代码。
3. 编译程序:使用汇编器将源代码编译为机器代码。
4. 链接程序:使用链接器将编译后的代码与其他必要的库链接成可执行文件。
5. 调试程序:使用调试工具检查程序的执行过程,找出并修复错误。
6. 运行程序:在适当的环境下运行程序,验证程序的正确性。
微原软件实验二:汇编语言程序设计
实验二:汇编语言程序设计一、实验目的1)掌握MASM 的操作步骤,能够将源程序编译成可执行文件。
2)掌握简单的汇编语言程序的设计(建立及调试)。
二、实验任务与内容1.实验任务1)编一程序,在显示器上显示256个ASCII代码,要求显示格式为每行显示16个字符,两个ASCII字符间空一格。
2)试编一程序,把地址偏移量为100H 单元开始的256 个单元分别写入:00H,01 H,02H,03H,…,FFH 数据。
统计写入的数据块中0 元素、正元素、负元素的个数,并分别把统计结果送人上述数据块之后的三个单元中。
用DOS功能调用显示上面两题中数据块Yes各单元(包括统计结果)内容。
为了显示清晰明了,要求每行显示16 个数据,两个数据之间用空格分开。
3)编一程序,把键入的十六进制数转换成十进制数并在屏幕上显示出来。
键入的最大数为FFFFH,若键人的不是十六进数字,则显示出错提示。
2.实验内容1) 显示256个ASCII码(1)源程序DA TA SEGMENT ;定义数据段DB 256 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX, DA TA ;数据段赋值MOV DS, AXMOV CX, 256MOV DH, 0LOP:TEST DH, 00001111B ;判断是否显示16个字符换行JNZ NEXTMOV DL, 13 ;换行CALL DISPMOV DL, 10CALL DISPNEXT:MOV DL, DH ;显示字符CALL DISPMOV DL, ' ' ;两字符间加空格CALL DISPINC DH ;使用DH计数LOOP LOPDONE: ;退出程序MOV AH,4CHINT 21HDISP PROC NEAR ;在屏幕上显示字符PUSH AXMOV AH, 2INT 21H ;DOS功能调用POP AXRETDISP ENDPCODE ENDSEND START(2)程序流程图2)写入数据,统计元素个数(1)源程序DA TA SEGMENTHEX DB '0123456789ABCDEF'M1 DB 13,10,'BUFFER DUMP:',13,10,36M2 DB 13,10,'NUMBER OF ZEROES:$'M3 DB 13,10,'NUMBER OF POSITIVE ELEMENTS:$'M4 DB 13,10,'NUMBER OF NEGATIVE ELEMENTS:$'ORG 100H ;从100H处开始BUF DB 256 DUP ('.')ZEROES DB 0POSTVS DB 0NEGTVS DB 0DA TA ENDSSTACK SEGMENT STACKDW 2048 DUP(?)STACK ENDSCODE SEGMENTMAIN: MOV AX,DATAMOV DS,AX ;缓冲区的地址存入DS:SI,清点数据时使用DS:SIMOV ES,AXASSUME DS:DATA,ES:DATAMOV SI,OFFSET BUF ;再存一遍到ES:DI,填充数据时使用ES:DIMOV DI,SIMOV CX,256 ;计数器XOR AX,AX ;AX清零CLD ;清零方向标志;先对BUF按要求1进行填充LP1: STOSB ;AL内容填入ES:[DI]、且DI自动+1 INC AX ;AL也加1LOOP LP1 ;循环;清点0元素、正负元素个数MOV CX,256 ;计数器LP2: LODSB ;从DS:[SI]里读出值到AL,SI自动增1CMP AL,0 ;AL与0比较JZ ISZERO ;是0,转去增加0元素计数器内容JG ISPOS ;是正数转去增加正元素计数器内容INC NEGTVS ;否则增加负元素计数器内容LP2NXT: LOOP LP2 ;继续循环直到CX为0JMP SHOW ;然后转去输出ISZERO: INC ZEROESJMP LP2NXTISPOS: INC POSTVSJMP LP2NXTSHOW: MOV DX,OFFSET M1 ;显示BUFFER DUMPCALL PUTSMOV CX,256MOV SI,OFFSET BUFLP3: JCXZ DONEMOV AX,DS ;显示DS:SI的地址CALL HEXWORDMOV DL,':'CALL PUTCMOV AX,SICALL HEXWORDMOV DL,' ' ;用两个空格把地址和数据分开CALL PUTCCALL PUTCPUSH CX ;下面输出8个数据,内层循环也用CX控制所以保存一下CX MOV CX,16LP4: LODSBCALL HEXBYTE ;读入一个数,按16进制显示出来CALL PUTC ;并且输出一个空格,与下个值分开,DL刚才已经赋值了LOOP LP4 ;一行输出8个CALL CRLF ;换行POP CX ;恢复CXSUB CX,16 ;人工调整CXJNC LP3 ;继续输出下行DONE: MOV DX,OFFSET M2 ;输出0元素统计CALL PUTSMOV AL,ZEROESXOR AH,AHCALL PRINTAXMOV DX,OFFSET M3 ;输出正元素统计CALL PUTSMOV AL,POSTVSXOR AH,AHCALL PRINTAXMOV DX,OFFSET M4 ;输出负元素统计CALL PUTSMOV AL,NEGTVSXOR AH,AHCALL PRINTAXMOV AH,4CH ;退出INT 21HHEXBYTE PROC ;输出AL里的十六进制数(2位)PUSH DXPUSH BXMOV BX,OFFSET HEX ;准备XLAT查表得到每个数位的字符PUSH AXSHR AL,1 ;AL右移4位后原来的高4位到了低4位上SHR AL,1SHR AL,1SHR AL,1XLATMOV DL,ALCALL PUTC ;输出高四位的数字POP AXAND AL,0FH ;清除AL高4位,AL内只剩下低四位了XLATMOV DL,ALCALL PUTC ;输出低四位的数字POP AXPOP BXPOP DXRETHEXBYTE ENDPHEXWORD PROC ;输出AX里的十六进制数(4位)PUSH AXMOV AL,AHCALL HEXBYTE ;先输出AH内容POP AXCALL HEXBYTE ;再输出AL内容RETHEXWORD ENDPPRINTAX PROC ;以10进制输出AX中的无符号整数OR AX,AX ;是0则直接输出JNZ @FPUSH DXMOV DL,'0'CALL PUTCPOP DXRETAA: PUSH AXPUSH CXPUSH DXPUSH BXMOV BX,10XOR DX,DXDIV BXMOV CX,AXOR CX,DX ;若商与余数都为0则结束递归JZ @FPUSH DX ;留存DX中的余数以在递归后输出CALL @B ;递归POP DX ;从最高位开始恢复余数ADD DL,'0'CALL PUTCAA: POP BXPOP DXPOP CXPOP AXRETPRINTAX ENDPPUTC PROC ;输出DL里的字符PUSH AXMOV AH,2POP AXRETPUTC ENDPPUTS PROC ;输出DS:DX指向的字串PUSH AXMOV AH,9INT 21HPOP AXRETPUTS ENDPCRLF PROC ;输出回车换行PUSH DXMOV DL,13CALL PUTCMOV DL,10CALL PUTCPOP DXRETCRLF ENDPCODE ENDSEND MAIN(2)程序流程图3)十六进制数转换成十进制数(1)源程序CODE SEGMENT ;定义代码段MAIN PROC FAR ;定义段间调用子程序ASSUME CS:CODE ;段寄存器关联说明CALL HEXIN ;调用子程序:键盘输入十六进制数并将其转换成二进制数CALL CRLFCALL BINIDECCALL CRLF ;调用子程序,输出一个回车、换行JMP MAINRETMAIN ENDPHEXIN PROC NEARMOV AX,0NEWCHAR:MOV AH,01HINT 21HSUB AL,30H ;al-30h→alJL EXIT ;al<0,转去保存转换结果,结束子程序,返回调用者CMP AL,10D ;al<10?JL ADD_TO ;是则转去转换对应的二进制数SUB AL,27H ;al-27h→alCMP AL,0AH ;al<0ah?(此时,相当于比较输入的字符是否小于'a')JL EXIT ;是则转去保存转换结果,结束子程序,返回调用者CMP AL,10H ;al>=10h?(此时,相当于比较输入的字符是否大于或等于'g')JGE EXIT ;是则转去保存转换结果,结束子程序,返回调用者ADD_TO:MOV CL,4SHL BX,CL ;bx左移4位MOV AH,0ADD BX,AXJMP NEWCHAR ;接受下一个十六进制字符EXIT:RETHEXIN ENDPBINIDEC PROC NEARMOV CX,10000DCALL DEC_DIV ;把bx的内容转换成对应的十进制ASCII码字符并显示MOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVRETDEC_DIV PROC NEAR ;把bx的内容转换成对应的十进制ASCII码字符并显示MOV AX,BXMOV DX,0 ;dx置0,准备做除法(除数是16位)DIV CXMOV BX,DX ;dx→bx,余数赋给bx保存MOV DL,AL ;al→dl,商数赋给dl,准备显示对应的十进制数字符ADD DL,30H ;dl+30h→dl,转换成对应的ASCII码字符MOV AH,02HINT 21HRETDEC_DIV ENDPBINIDEC ENDP ; 子程序,输出一个回车、换行CRLF PROC NEARMOV DL,0AH ;回车符→dlMOV AH,02H ;dos功能调用2号功能:显示一个字符(dl中)INT 21HMOV DL,0DHMOV AH,02HINT 21HRETCRLF ENDPCODE ENDSEND MAIN(2)程序流程图三、实验结果1)显示256个ASCII码2) 写入数据,统计元素个数3)十六进制数转换成十进制数四、实验总结心得体会:通过本次的实验,我对汇编语言的程序有了进一步的了解,加强了汇编语言的使用能力,并通过努力完成了本次试验。
汇编语言程序设计实验报告三(子程序设计实验)
汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
熟练掌握码型变换的程序。
实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。
要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。
数据可循环输入,遇‘00’结束。
实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。
熟悉键盘输入和字符显示的程序段的编制。
实验步骤编辑、汇编源程序,生成可执行文件。
执行程序,检查输入、输出结果,看是否正确。
如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。
用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。
实验报告要求分析近程调用和远程调用的主要区别。
用DEBUG命令观察执行过程有何不同。
分析实验结果及所遇到的问题的解决方法。
程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。
汇编语言编程实验报告
汇编语言编程实验报告实验目的:使用汇编语言编写程序,实现特定功能。
实验过程和结果:1. 程序设计在本次实验中,我们使用汇编语言编写程序,实现了一个简单的计算器功能。
以下是我们设计的程序伪代码:```data segment; 定义数据段operand1 db ?operand2 db ?operator db ?result db ?data endscode segmentassume cs:code, ds:datastart:; 程序入口mov ax, datamov ds, ax; 获取用户输入mov ah, 01hint 21hmov operator, almov ah, 01hint 21hmov operand1, almov ah, 01hint 21hmov operand2, al; 根据运算符进行计算 cmp operator, '+'je addcmp operator, '-'je subcmp operator, '*'je mulje div; 显示结果mov dl, resultadd dl, 30h ; 转换为ASCII码 mov ah, 02hint 21h; 程序结束mov ah, 4chint 21hadd:; 加法运算mov al, operand1add al, operand2mov result, aljmp displaysub:; 减法运算mov al, operand1mov result, aljmp displaymul:; 乘法运算mov al, operand1mul operand2mov result, aljmp displaydiv:; 除法运算mov al, operand1mov ah, 0 ; 清空余数 div operand2mov result, aljmp display display:; 显示计算结果mov dl, resultadd dl, 30h ; 转换为ASCII码mov ah, 02hint 21h; 程序结束mov ah, 4chint 21hcode endsend start```2. 实验结果运行程序后,我们通过键盘输入运算符和操作数,程序能够正确地进行相应的运算并显示结果。
汇编语言程序设计实验报告(韩阳)
汇编语言程序设计实验报告ASSEMBLY LANGUAGE PROGRAMMING班级:计科1103班学号:2011014257姓名:朱楠北京化工大学信息科学与技术学院二〇一三年六月实验一汇编语言源程序的建立、汇编、连接和运行一、实验目的:1.学习汇编语言源程序的编辑、汇编、连接、运行全过程。
2.了解汇编程序、连接程序、DOS系统装入和返回功能。
掌握MASM、LINK的应用。
3.掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言程序的开发过程。
4.掌握DOS系统功能调用的基本方法。
二、实验原理:调用DOS系统功能21h的简单输入输出功能。
三、实验内容:1.从键盘输入一个字符并回显到显示器上。
源程序: code segmentassume cs:codestart:mov ah,1int 21hmov ah,4chint 21hcode endsend start2.显示输出一个字符Q源程序:code segmentassume cs:codestart:mov ah,2mov dl,'Q'int 21hmov ah,4chint 21hcode endsend start3.在屏幕上显示输出“I love DOTA”源程序:data segmentznzn1 db'I LOVE DOTA$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,9hint 21hmov ah,4chint 21hcode endsend start4.编写一个程序,要求从键盘输入一个小写字母,以其大写字母形式显示,否则显示ERROR源程序data segmentstring db 'error!$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,7int 21hcmp al,'a'jnl next1jmp next2next1:cmp al,'z'jg next2mov ah,2sub al,20hmov dl,alint 21hmov ah,4chint 21hnext2:mov ah,9lea dx,stringint 21hmov ah,4chint 21hcode endsend start5.在屏幕上输出10个“T”源程序:code segmentassume cs:codestart:mov cx,10again:mov ah,2mov dl,'t'loop againmov ah,4chint 21hcode endsend start四、结果与分析:按要求输入输出,完成实验要求。
汇编课程设计实验报告
汇编语言程序设计实验报告专业:班级:学号:姓名:日期:湖南科技大学实验报告一实验题目:有两个数(字数据)DATA1和DATA2,把两数之和放在DA TA3中,两数之差放在DA TA4中。
实验目的:1.熟练掌握汇编语言的程序结构,学会如何使用数据定义、符号定义、模块定义等常用的批示性语句。
2.熟悉汇编语言的工作环境;学会使用汇编语言的编辑、汇编、和连接装配程序的方法;熟悉汇编语言程序的编辑-汇编-连接-运行-调试的过程3.熟练掌握用DEBUG来调试程序,掌握调试程序的反汇编、读写寄存器或存储单元、运行程序等简单的调试命令。
4.熟悉汇编语言指令,学会使用数据传送,算术逻辑运算,处理器控制等简单指令。
实验主要原理:先用数据传送指令将DATA1,DA TA2放入AX和BX两个寄存器中,分别用ADD和SUB 两个指令来计算两数之和与两数之差,再用数据传送指令将两数之和放入DA TA3中,将两数之差放入DATA4中。
最后用ret指令返回DOS程序流程图:源程序:datarea segmentDA TA1 dw 5 ;数据定义DA TA2 dw 4DA TA3 dw ?DA TA4 dw ?datarea endsprognam segmentmain proc farassume cs:prognam,ds:datareastart: push ds ;准备工作sub ax,axpush axmov ax,datareamov ds,axmov ax,DATA1mov bx,DATA2add ax,bx ;做加法mov DATA3,axmov ax,DATA1sub ax,bx ;做减法mov DATA4,axretmain endpprognam endsend startDEBUG调试关键步骤:执行mov ax,DATA1(AX)=5,传送成功执行add ax,bx(AX)=9,加法成功执行到最后ret时,查看数据段内容分别为5, 4,9,1 说明加法,减法都成功执行运行结果:(DATA3)=9(DA TA4)=1实验报告二实验题目:数据段中有一个字符串DATA1,串长为3,内容为‘CDE’,还有另一个字符串为DATA2,长度为4,内容为‘ABCD’。
汇编语言编程实验报告
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。
)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。
4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。
如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。
一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。
将包含QE文件的工作磁盘插入驱动器A:。
进入QEA\QE进入全屏幕后可以开始编程。
文件名取为Myprog。
asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
汇编 实验报告
汇编实验报告汇编实验报告引言:汇编语言是一种低级语言,用于编写计算机程序。
在计算机科学领域中,汇编语言是一门重要的学科,它可以帮助我们更深入地了解计算机的内部工作原理。
本实验报告将介绍我在学习汇编语言过程中的实验经历和所学到的知识。
实验一:汇编语言的基本概念在本实验中,我首先学习了汇编语言的基本概念。
汇编语言是一种用于编写机器指令的低级语言,它直接操作计算机的硬件。
通过学习汇编语言,我了解了计算机内存、寄存器、指令和数据的存储方式,并学会了如何编写简单的汇编程序。
实验二:汇编语言的数据表示在这个实验中,我学习了汇编语言中的数据表示方法。
汇编语言中的数据可以用不同的方式表示,例如二进制、十进制和十六进制。
我还学习了如何使用数据寄存器和内存寻址来处理不同类型的数据。
实验三:汇编语言的指令集在本实验中,我学习了汇编语言的指令集。
汇编语言中的指令可以分为数据传送指令、算术运算指令、逻辑运算指令和控制指令等多种类型。
通过学习不同类型的指令,我可以编写更加复杂和功能强大的汇编程序。
实验四:汇编语言的程序设计在这个实验中,我学习了如何使用汇编语言进行程序设计。
通过学习汇编语言的程序设计技巧,我可以编写出高效、精确和可靠的程序。
我还学习了如何使用子程序、循环和条件语句等控制结构来实现不同的功能。
实验五:汇编语言的调试和优化在本实验中,我学习了如何调试和优化汇编语言程序。
调试是指在程序运行过程中发现并修复错误的过程,而优化则是指对程序进行性能提升的过程。
通过学习调试和优化技巧,我可以提高程序的效率和可靠性。
结论:通过这些实验,我对汇编语言有了更深入的了解。
汇编语言虽然复杂,但它可以帮助我们更好地理解计算机的内部工作原理,并且可以编写出高效、精确和可靠的程序。
通过学习汇编语言,我不仅提升了自己的编程能力,还对计算机科学有了更全面的认识。
我相信,在今后的学习和工作中,汇编语言将会发挥重要的作用。
计组实验报告基础汇编语言程序设计实验
基础汇编语言程序设计实验【实验目的】1.了解教学计算机的指令格式、指令编码、选择的寻址方式和每一条指令的具体功能,为进一步学习运算器组成和控制器设计打好基础。
2.了解汇编语言的语句与机器语言的指令之间的对应关系,了解伪指令在汇编过程中的作用。
3.学习教学机监控程序的功能、监控命令的使用方法,体会软件系统在计算机组成中的地位和作用。
【实验内容】1.学习联机使用TH-UNION+教学实验系统和仿真终端软件PCEC.2.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容。
3.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况;【实验内容】1.用R命令查看寄存器内容或修改寄存器的内容1)在命令行提示符状态下输入:R↙;显示寄存器的内容注:寄存器的内容在运行程序或执行命令后会发生变化。
2)在命令行提示符状态下输入:R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格,也可有一个或数个空格2.用D命令显示存储器内容在命令行提示符状态下输入:D 2000↙3. 用E命令修改存储器内容在命令行提示符状态下输入:E 2000↙4.用D命令显示这几个单元的内容D 2000↙可以看到这六个地址单元的内容变为0000 1111 2222 3333 4444 5555。
5. 用A命令键入一段汇编源程序,主要是向累加器送入数据和进行运算,执行程序并观察运行结果。
1)在命令行提示符状态下输入:A 2000↙;表示该程序从2000H(内存RAM区的起始地址)地址开始2)用U命令反汇编刚输入的程序在命令行提示符状态下输入:U 2000↙在相应的地址会得到输入的指令及其操作码3)用G命令运行前面键入的源程序G 2000↙4)用P或T命令,单步执行这段程序,观察指令执行结果在命令行提示符状态下输入:T 2000↙<12020:MVRD R2,00OA2022:MVRD R0,00302024:OUT 802025:DEC R22026:JRZ 202E2027:PUSH R02028:IN 812029:SHR R0202A:JRNC 2028202B:POP R0202C:INC R0202D:JR 2024202E:RET202F:↙<2(2100) MVRD R2,001AMVRD R0,0041(2104) OUT 80DEC R2JRZ 210EPUSH R0(2108)IN 81SHR R0JRNC 2108POP R0INC R0JR 2104(210E)RET【实验结果】<1屏幕上输出'0'到'9'十个数字符<2屏幕上显示“A”~“Z”26个英文字母【实验过程中遇到的问题以及解决办法】在验证例3的实验时,输入语句“JC 2053”,执行时系统一直提示有错误,无法进行运算查表得知语句中没有JC ,只有JRC,所以修改语句即可解决。
汇编语言程序设计实验
汇编语言程序设计实验报告班级姓名学号《汇编语言程序设计》实验一、实验教学目标与基本要求汇编语言实验主要使学生掌握DEBUG调用程序中各命令的使用方法,掌握MASM汇编程序对汇编语言源程序进行编辑、汇编、连接、装配、调试到运行的上机操作方法.要求学生熟练掌握汇编语言指令练习、顺序程序设计、分支程序设计、循环程序设计、子程序设计和中断程序设计.二、实验课程内容实验一 DEBUG(用于测试和调试 MS-DOS 可执行文件的程序)命令的使用(1学时)除了q 命令之外,所有 Debug 命令都接受参数.可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符.实验目的:掌握DEBUG中各命令的使用方法;掌握在DEBUG命令使用后观察内存单元、寄存器、标志位的内容及意义;学会使用DEBUG来调试程序.实验内容:使用以下DEBUG命令,观察并记录结果(所留空间不够,可以附页).1.程序调用命令C>DEBUG [D:] [PATH] [FILENAME[.EXT]] [PARM1] [PARM2]其中,文件名是被调试文件的名字.如未键入文件名.可用DEBUG命令N和L把需要文件装入存储器后再调试.D指定驱动器,PATH为路径,FILENAME为文件名,PARM为命令参数2.显示存储单元命令-D [ADDRESS]或;ADDRESS 地址-D [RANGE] ;RANGE 范围3.修改存储单元内容命令-E ADDRESS [LIST]4.检查和修改寄存器内容命令-R [REGISTER NAME] ;Register name 寄存器名字5.汇编命令-A [ADDRESS]6.跟踪命令-T [=ADDRESS] [VALUE] ;Value 变量值7.运行命令-G [=ADDRESS ] [ADDRESS2 [ADDRESS3]8.反汇编命令-U [ADDRESS]-U [RANGE]9.命名命令-N FILESPECS [FILESPECS]FILESPECS的格式可为[D:][PATH]FILENAME [.EXT]10.装入命令-L [ADDRESS[DRIVE SECTOR SECTOR]] ;DRIVE SECTOR 磁盘扇区11.写命令W ADDRESS DRIVE SECTOR12.退出命令-Q实验二汇编语言实验操作方法(1学时)实验目的:掌握在DEBUG下运行汇编指令或简单小程序;熟悉标准汇编程序上机流程.实验内容:设计实验使用数据,分析得出理论结果;记录实验结果,与理论结果比较.(所留空间不够,可以附页)1.在DEBUG下运行汇编指令或简单小程序(如:实现1+2;0F3A6+0FFFB等)在DEBUG提示符下,用汇编命令A:输入汇编指令或简单小程序,用单步命令T或全程命令G来执行,并检查执行中间结果与最后结果.2.标准汇编程序上机方法 (如:给出一个AL*7的程序,用加法及移位指令实现)A.建立ASM文件,用EDIT .COM全屏幕编辑文件或其他编辑文件建立扩展名为ASM的源程序.B.用MASM(或ASM)产生扩展名为OBJ目标文件.C.用LINK产生扩展名为EXE可执行文件.D.在DEBUG下,把文件调入内存,调试程序.E.在DOS下可直接执行扩展名为EXE的文件.附:汇编语言的工作环境.A.硬件环境IBM-PC及其系列机内存256K字节以上外存:硬盘或至少一个软驱CPU:80586以上显示器:单色或彩色显示器键盘:标准ASCII码键盘B.软件环境编缉程序:或其他编缉程序汇编程序:MASM.EXE 或ASM.EXE连接程序:LINK.EXE调试程序: 或DEBUG.EXE实验三汇编语言指令练习(2学时)实验目的:1.掌握DEBUG中汇编命令A,反汇编命令U,单步命令T,显示存储单元命令D,修改存储器单元命令E,修改与显示寄存器单元命令R,退出Q等命令的用法.2.熟悉汇编中传送、逻辑等指令.3.了解指令不同的寻址方式,注意规定或限制使用的寄存器如:双操作数指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用的寄存器..实验内容:对DEBUG中A,U,T,D,E,R,Q等命令按不同用法进行练习;汇编中传送、逻辑等指令.1:基本题:MOV.PUSH.POP.AND.OR.XOR.TEXT.ADD.SUB.MUL.DIV.2:掌握题:在DEBUG状态下把三个数从大到小排序.3:实验步骤A.在DOS提示符下,在MASM子目录下,按DEBUG及回车.B.在DEBUG提示符下,按A进入小汇编,输入源指令.C.用U反汇编,检查输入源指令是否正确,用T或G,调试与运行指令.D.检查指令运行结果,用E,R检查与修改内存、寄存器内容.E.重复B.C.D过程.实验准备:按实验内容要求,理解指令功能,编写不同寻址方式的指令清单.实验报告:(所留空间不够,可以附页)1.实验目的,要求,内容及算法思想.2.指令的寻址方式,注意规定或限制使用的寄存器.3.指令清单.4.实验心得.实验四顺序程序设计(2学时)实验目的:掌握汇编语言程序设计的基本步骤,分析问题,确立算法,画出程序流程图.说明流程图中各功能的含义和表示法.分配工作单元和存储空间.根据程序算法流程选择合适的指令编制汇编语言源程序.本实验着重掌握顺序程序的设计基本方法和技巧.实验要求:1.程序要结构化:简明、易读和易调试2.执行速度较快3.占用存储空间较少实验内容:1:按实验内容要求,确定算法,画流程图,编写程序2:基本题:计算表达式的值: w=(v-(x*y+z-540))/x3:掌握题:将一字节压缩BCD码转换为二个ASCII码.实验步骤:1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令执行结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.实验报告:(所留空间不够,可以附页)1.目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验五分支程序设计(4学时)实验目的:掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成判断条件而产生的程序段的设计方法和技巧.实验要求:1.如何产生条件2.如何对条件进行判断3.如何实现分支实验内容:1.按实验内容要求,确定算法,画流程图,编写程序2.基本题: 计算函数值: Y=1 X>0Y=0 X=0Y=-1 X<03.掌握题: 多路分支,假定将各分支程序进行编号,若存在0,1,…,N的N+1个分支程序.现根据当前的编号,转入到相应的分支程序.若各分支程序的入口地址分别为:ADDR0,ADDR1,…,ADDRN.1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程序,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果. 实验报告:(所留空间不够,可以附页)1.实验目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验六循环程序设计(4学时)实验目的:掌握循环程序设计的原理和方法,重点掌握循环程序结构的形式和常用循环程序的控制方法和技巧.实验要求:1.置循环参数的初值2.循环体构成3.如何实现循环控制实验内容:1.按实验内容要求,确定算法,画流程图,编写程序2.基本题: 统计某地址中正元素的个数3.掌握题:把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来;假定给出4名学生5门课的成绩,计算每个学生的平均成绩和每门课的平均成绩;冒泡排序.A.认真阅读本实验指导实验步骤:1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程序,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.实验报告:(所留空间不够,可以附页)1.目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验七子程序设计(2学时)实验目的:掌握子程序设计的原理和方法,重点掌握子程序结构的形式和常用子程序的控制方法和技巧.采用子程序设计以增加程序的可读性,有利于程序的模块化和自顶向下的设计方法的实现.实验要求:1.子程序定义及相对应的调用方法.2.子程序设计时需建立子程序的功能说明.3.子程序现场保护和现场恢复.4.子程序的输入参数和输出参数的确定及传递方法,可利用寄存器,内存或堆栈传递参数.5.子程序嵌套调用时,注意任何存放断点和寻找短点进行返回.6.掌握常用DOS系统功能子程序的调用.实验内容:1.按实验内容要求,确定算法,画流程图,编写程序.2.基本题:十进制数到十六进制数转化程序.程序要求从键盘取得一个十进制数,然后以十六进制形式在屏幕上显示出来.3.掌握题: 在屏幕上显示4行“hello!what is your name?”,要求用子程序调用的方法实现;计算N! (N≥0)的程序实验步骤:1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程序,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.实验报告:(所留空间不够,可以附页)1.目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验八中断程序设计(2学时)实验目的:掌握软中断程序设计的原理和方法,重点掌握软中断程序入口、出口地址的产生。
汇编语言程序设计实验报告
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
输入全部指令后,单击按钮,保存相应的程序。
1.1.2执行程序在编辑界面中,如图所示,单击按钮,自动完成源程序的编译和链接。
在“emulator”对话框中(),左边部分列出了寄存器的当前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指令的CS和IP。
单击按钮,可以单步执行一条指令;单击按钮,可以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一个程序。
修改“emulator”对话框中文本框的内容,也可以观察其它段的内容,在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为6000H位置处的内存单元内容,可以在文本框中输入0700:6000,显示结果如图所示,中间部分依次列出从该地址开始的所有字节的内容。
在“emulator”对话框的底部,单击按钮,可以观察栈的内容;单击按钮,可以观察标志寄存器中标志位的内容。
在“emulator”对话框中,选择“view”菜单中的“memory”菜单项,也可以观察内存的情况。
在“Random Access Memory”对话框中,可以修改文本框中的值可以确定所要观察的地址,该值由段基地址:段内偏移地址构成,如图所示,当前要观察的内存地址为(6000:0010)。
在显示结果中,左边是逻辑地址,中间是从该地址的开始连续16个字节的内容,右边是每个字节对应的字符。
在该对话框中,也可以直接修改存储器单元的值,如图所示,从60010H开始的连续4个字节的内容已经被修改为12H,34H,56H和78H。
1.2基础实验1.2.1数据传送指令1.实验目的1)熟悉8086指令系统的数据传送指令及8086的寻址方式。
2)利用emu8086调试工具调试汇编程序。
2.实验设备微型计算机、emu80863.实验原理通用数据传送指令包括:1)通用数据传送指令,如MOV,PUSH,POP,XCHG,CBW,CWD;2)目标地址传送指令,如LDS,LES;3)标志传送指令,如LAHF,SAHF,PUSHF,POPF;4)输入输出指令,如IN,OUT,LEA寻址方式包括:1)立即寻址;2)直接寻址;3)寄存器寻址;4)寄存器间接寻值;5)寄存器相对寻址;6)基址-变址寻址;7)基址—变址—相对寻址;8)隐含寻址4.实验内容(1)创建COM TEMPLATE程序,输入以下程序段,观察程序的执行情况,程序段如下:MOV BL,08H ;BX=?MOV CL,BL ;CL=?MOV AX,03FFH ;AX=?MOV BX,AX ;BX=?MOV DS:[6000H],BX ;DS:[6000H]=?(提示:在emulator对话框中间的文本框中输入段基地址:段内偏移地址,可以观察其它逻辑段相应存储单元的内容)(2)创建COM TEMPLATE程序,用以下程序段将一组数据压入PUSH堆栈区,然后通过三种不同方式出栈。
观察栈的变化情况(提示:在emulator对话框中,单击按钮可以察看栈中内容)以及出栈后数据的变化情况,并把结果填入表 1-1中。
程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH DX第—种出栈方式的指令序列:POP DXPOP CXPOP BXPOP AX第二种出栈方式的指令序列(注:替换掉第—种出栈方式的指令序列):POP AXPOP BXPOP CXPOP DX第三种出栈方式的指令序列(注:替换掉第二种出栈方式的指令序列):POP CXPOP DXPOP AX表 1-1数据传送实验结果表格(3)创建COM TEMPLATE程序,分别输入下列指令,按要求设置各寄存器及内存单元的值(提示:在“emulator”对话框中,可以直接修改寄存器的值;选择“view”菜单中的“memory”菜单项可以设置内存单元的值),其中BX=0010H,SI=0001H,[60010H]=12H,[60011H]=34H,[60012H]=56H,[60013H]=78H,[60120H]=0ABH,[60121H]=0CDH,[60122H]=0EFH,观察指令执行后AX中的内容。
1)MOV AX,1200H2)MOV AX,BX3)MOV AX,[0120H]5)MOV AX,0110H[BX]6)MOV AX,[BX][SI]7)MOV AX,0110H[BX][SI](4)创建COM TEMPLATE程序,试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,将DS:6000H字节存储单元中的内容传送到DS:6020H 单元中。
(5)设AX=1111H,BX=2222H,[DS:6010H]=3333H。
试编写COM TEMPLATE程序,将AX的内容与BX的内容交换,然后再将BX的内容与DS:6010H单元的内容进行交换。
(6)若[DS:6000H]=0EEFFH,[ES:7000H]=0CCDDH,请编写COM TEMPLATE程序,将两个存储单元的内容交换。
5.实验习题指出下列指令的错误并加以改正,并在emu8086中验证。
1)MOV [BX],[SI]2)MOV AH,BX3)MOV AX,[SI][DI]4)MOV BYTE PTR[BX],2000H6)MOV DS,2000H6.实验报告要求1)整理源程序段和运行结果。
2)给出几种在emu8086中察看内存单元的方法。
1.2.2算术逻辑运算指令1.实验目的1)熟悉算术逻辑运算指令的功能。
2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。
2.实验设备微型计算机、emu80863.实验原理算术运算指令包括:1)加法指令,如ADD,ADC,INC;2)减法指令,如SUB,SBB,DEC,NEG,CMP;3)乘法指令,如MUL,IMUL;4)除法指令,如DIV,IDIV。
逻辑运算指令包括:AND,OR,NOT,XOR,TEST4.实验内容(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮察看标志寄存器的值)。
程序段及结果表格如表 1-2。
表 1-2算术逻辑运算实验结果表格(2)用BX作为地址指针,从BX所指的内存单元[0010H]开始连续存入三个无符号数(10H、04H、30H),计算内存单元中这三个数的和,并将和放在0013H单元中,再求出这三个数的乘积,并将乘积存入0014单元中,写出完成此功能的COM TEMPLATE程序。
(3)创建COM TEMPLATE程序,写出完成下述功能的程序段,并指出程序运行后AX=? 1)将15H传送到AL;2)再将AL的内容乘以2;3)将15H传送到BL;4)把AL的内容乘以BL的内容。
(4)创建以下两个程序段的COM TEMPLATE程序并上机验证。
1)给数据段中从偏移地址1000H开始的12个字存储单元的内容赋值,请将第4条比较指令填写完整(划线处)。
MOV SI,1000HNEXT: MOV WORD PTR[SI],1ADD SI,2CMP SI,JNE NEXT2)假定要按高地址到低地址的顺序进行清除操作(高地址从1016H开始),则上述程序段应如何修改?5.实验习题简要说明ADD、SUB、AND、OR指令对标志位的影响。
6.报告要求1)整理源程序段和运行结果,回答实验中的问题。
1.2.3移位指令1.实验目的1)熟悉移位指令的功能。
2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。
2.实验设备微型计算机、emu80863.实验原理移位指令包括:1)非循环移位指令,如SAL,SAR,SHL,SHR;2)循环移位指令,如ROL,ROR,RCL,RCR4.实验内容(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮可以察看标志寄存器的值)。
程序段及结果表格如表 1-3。
表 1-3移位实验结果表格1(2)写出完成下述功能的COM TEMPLATE程序并上机验证,程序运行后的商=?1)传送数据2058H到[DS:1000H]单元中,数据12H到DS:1002H单元中;2)把DS:1000H单元中的数据传送到AX寄存器;3)把AX寄存器的内容算术右移二位;4)再把AX寄存器的内容除以DS:1002H字节单元中的数;5)最后把商存入字节单元DS:1003H中。
(3)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录每一条指令对内存单元的影响结果(提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值),分析结果并说明该程序段的功能是什么。