ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:776.98KB ,
资源ID:3734903      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3734903.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言程序设计实验篇.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言程序设计实验篇.docx

1、汇编语言程序设计实验篇1. 汇编语言程序设计实验篇1.1. 汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码、汇编/反汇编工具以及debug的模拟器。它能模拟一台虚拟的电脑运行程序,拥有独立的“硬件”, 避免访问真实硬件。该软件兼容的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。1.1.1 创建程序1. COM TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome”对话框中

2、,单击按钮,创建文件。在“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”对话框中,单击按钮,创建文件。在“

3、choose code template”对话框中,选择“EXE template-advanced executable : relocation, checksum.”后,单击按钮。在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。输入全部指令后,单击按钮,保存相应的程序。1.1.2 执行程序在编辑界面中,如图所示,单击按钮,自动完成源程序的编译和链接。在“emulator”对话框中(),左边部分列出了寄存器的当

4、前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指令的CS和IP。单击按钮,可以单步执行一条指令;单击按钮,可以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一个程序。修改“emulator”对话框中文本框的内容,也可以观察其它段的内容,在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为6000H位置处的内存单元内容,可以在文本框中输入0700:6000,显示结果如图所示,中间部分依次列出从该地址开始的所有字节的内容。在“emulator”对话框的底部,单击按钮,可以观察栈的内容;单

5、击按钮,可以观察标志寄存器中标志位的内容。 在“emulator”对话框中,选择“view”菜单中的“memory”菜单项,也可以观察内存的情况。在“Random Access Memory”对话框中,可以修改文本框中的值可以确定所要观察的地址,该值由段基地址:段内偏移地址构成,如图所示,当前要观察的内存地址为(6000:0010)。在显示结果中,左边是逻辑地址,中间是从该地址的开始连续16个字节的内容,右边是每个字节对应的字符。在该对话框中,也可以直接修改存储器单元的值,如图所示,从60010H开始的连续4个字节的内容已经被修改为12H,34H,56H和78H。1.2 基础实验1.2.1 数

6、据传送指令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)创建C

7、OM 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对话框中,单击按钮可以察看栈中内容)以及出栈后数据的变化情况,并把结果填入表 11中。程序

8、段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX第种出栈方式的指令序列:POP DXPOP CXPOP BXPOP AX第二种出栈方式的指令序列(注:替换掉第种出栈方式的指令序列):POP AXPOP BXPOP CXPOP DX第三种出栈方式的指令序列(注:替换掉第二种出栈方式的指令序列):POP CXPOP DXPOP AXPOP BX表 11数据传送实验结果表格寄存器的值第一种出栈方式第二种出栈方式第三种出栈方式(AX)=(BX)=(CX)=(DX)=(3)创建COM TEMP

9、LATE程序,分别输入下列指令,按要求设置各寄存器及内存单元的值(提示:在“emulator”对话框中,可以直接修改寄存器的值;选择“view”菜单中的“memory”菜单项可以设置内存单元的值),其中BX0010H,SI0001H,60010H12H,60011H34H,60012H56H,60013H78H,60120H0ABH,60121H0CDH,60122H0EFH,观察指令执行后AX中的内容。1)MOV AX,1200H2)MOV AX,BX3)MOV AX,0120H4)MOV AX,BX5)MOV AX,0110HBX6)MOV AX,BXSI7)MOV AX,0110HBXS

10、I(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

11、)MOV BX,SI2)MOV AH,BX3)MOV AX,SIDI4)MOV BYTE PTRBX,2000H5)MOV CS,AX6)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)

12、除法指令,如DIV,IDIV。逻辑运算指令包括:AND,OR,NOT,XOR,TEST4. 实验内容(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮察看标志寄存器的值)。程序段及结果表格如表 12。表 12算术逻辑运算实验结果表格标志位程序 CFZFSFOFPFAF程序段1000000MOV AX, 1018HMOV SI, 230AHADD AX, SIADD AL, 30HMOV BX, 3FFHADD AX,BXMOV 20H, 1000HADD 20H, AXPUSH AXPOP BX程序段2000000

13、MOV AX, 0A0AHADD AX, 0FFFFHMOV CX, 0FF00HADC AX, CXSUB AX, AXINC AXOR CX, 0FFHAND CX, 0F0FHMOV 10H, CX程序段3000000MOV BL, 25HMOV BYTE PTR10H, 4MOV AL, 10HMUL BL程序段4000000MOV WORD PTR10H,80HMOV BL, 4MOV AX, 10HDIV BL(2)用BX作为地址指针,从BX所指的内存单元0010H开始连续存入三个无符号数(10H、04H、30H),计算内存单元中这三个数的和,并将和放在0013H单元中,再求出这三

14、个数的乘积,并将乘积存入0014单元中,写出完成此功能的COM TEMPLATE程序。(3)创建COM TEMPLATE程序,写出完成下述功能的程序段,并指出程序运行后AX1)将15H传送到AL;2)再将AL的内容乘以2;3)将15H传送到BL;4)把AL的内容乘以BL的内容。(4)创建以下两个程序段的COM TEMPLATE程序并上机验证。1)给数据段中从偏移地址1000H开始的12个字存储单元的内容赋值,请将第4条比较指令填写完整(划线处)。MOV SI,1000HNEXT: MOV WORD PTRSI,1ADD SI,2CMP SI, JNE NEXT2)假定要按高地址到低地址的顺序进

15、行清除操作(高地址从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程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulat

16、or对话框中,单击按钮可以察看标志寄存器的值)。程序段及结果表格如表 13。表 13移位实验结果表格1标志位程序CFZFSFOFPFAF程序段000000MOV AX, 0DEC AXADD AX, 3FFFHADD AX, AXNOT AXSUB AX, 3OR AX, 0FBFDHAND AX, 0AFCFHSHL AX,1RCL AX,1(2)写出完成下述功能的COM TEMPLATE程序并上机验证,程序运行后的商1)传送数据2058H到DS:1000H单元中,数据12H到DS:1002H单元中;2)把DS:1000H单元中的数据传送到AX寄存器;3)把AX寄存器的内容算术右移二位;4)

17、再把AX寄存器的内容除以DS:1002H字节单元中的数;5)最后把商存入字节单元DS:1003H中。(3)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录每一条指令对内存单元的影响结果(提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值),分析结果并说明该程序段的功能是什么。程序段及结果表格如表 14。表 14移位实验结果表格2程序段字单元1A00H=字单元1A02H=MOV 1A00H, 0AA55HMOV 1A02H, 2AD5HSHL WORD PTR1A02H,1CMP 1A00H, 8000HCMCRCL WORD

18、 PTR1A02H,1RCL WORD PTR1A00H,15. 实验习题简要说明一般移位指令与循环移位指令之间的主要区别。6. 实验报告要求整理源程序段和运行结果,回答实验中的问题。1.2.4 串操作指令1. 实验目的1)熟悉串操作指令的功能。2)了解串操作指令的使用方法。2. 实验设备微型计算机、emu80863. 实验原理串操作指令包括:1)串传送指令MOVS;2)串比较指令CMPS;3)串扫描指令SCAS;4)串装入指令LODS;5)串存储指令STOS。4. 实验内容(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并根据结果回答后面的问题。CLDMOV DI,1000H

19、MOV AX,55AAHMOV CX,10HREP STOSW上述程序段执行后:1)从ES:1000H开始的16个字单元的内容是什么(提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值)2)DI= CX= 解释其原因。(2)在上题的基础上,再输入以下程序段并执行,回答后面的问题。MOV SI,1000HMOV DI,2000HMOV CX,20HREP MOVSB程序段执行后:1)从ES:2000H开始的16个字单元的内容是什么2)SI= DI= CX= 并分析之。(3)在以上两题的基础上,再分别输入以下三个程序段并运行之。程序段1:MOV

20、 SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段1执行后:1)ZF= 根据ZF的状态,两个串是否比较完了(提示:在emulator对话框中,单击按钮可以察看标志寄存器的内容)2)SI= DI= CX= 并分析之。程序段2:MOV 2008H,4455HMOV SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段2执行后:1)ZF= 根据ZF的状态,两个串是否比较完了 2)SI= DI= CX= 并分析之。程序段3:MOV AX,4455HMOV DI,2000HMOV CX,10HREPNZ SCASW程序段3执行后:1

21、)ZF=根据ZF的状态,在串中是否找到了数据4455H2)SI= DI= CX= 并分析之。(4)从DS:6000H开始存放有一个字符串This is a string,把这个字符串从后往前传送到DS:6100H开始的内存区域中(即传送结束后,从DS:6100H开始的内存单元的内容为gnirts a si sihT),试编写COM TEMPLATE程序并上机验证。(提示:可以在数据区中直接输入字符串)5. 实验习题1)简要说明执行串操作指令之前应初始化哪些寄存器和标志位。2)总结串操作指令的用途及使用方法。6. 实验报告要求整理源程序段和运行结果,对结果进行分析。1.2.5 DOS功能调用1.

22、 实验目的1) 掌握简单的DOS系统功能调用。2. 实验设备微型计算机、emu80863. 实验原理本节要用到的DOS功能命令包括:从键盘输入单个字符的语句如下:MOV AH,1INT 21H以上两条指令执行后,(AL)=从键盘输入的字符在屏幕上显示单个字符的语句如下:MOV DL,MOV AH,2INT 21H注意:源程序中所有语法符号都必须是半角符号,而且不允许汉字字符。在屏幕上显示字符串的语句如下:LEA DX,MOV AH,9INT 21H从键盘上输入字符串的语句如下:LEA DX,MOV AH,0AHINT 21H4. 实验内容(1)字符的输入和输出从键盘读入一个小写字母,输出字母表

23、中倒数与该字母序号相同的那个字母。例如输入首字母a,则输出最后一个字母z,输入第4个字母d则输出倒数第4个字母w。程序流程图如图 17所示。开始z AL + a AL返回DOS显示AL中的内容从键盘输入字符到AL图 17字符输入输出的程序流程图程序框架如下:data segment pkey db press any key.$endsstack segment dw 128 dup(0)endscode segmentstart:; set segment registers: mov ax, data mov ds, ax mov es, ax从键盘输入一个字符的指令序列根据流程图中转换算

24、法编制的指令序列用于显示结果的指令序列 lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key. mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h endsend start ; set entry point and stop the assembler.编写EXE TEMPLATE程序(提示:计算z-al+a时,需要用sub指令),观察执行结果。(2)字符串的输入和输出从键盘输入一个字符串(以下说明中,假定键盘缓

25、冲区的名字为KBUF,要显示的字符串变量名为STR),将输入的字符串传送给STR变量,在屏幕上显示STR变量中的内容。程序流程图如图 18所示。开始将KBUF中的字符串传送到变量STR中:1.字符串长度传送到CX+2的偏移地址SI,STR的偏移地址DI3.循环传送字符串中的每个字符(循环次数在CX中)显示INFO中的内容返回DOS从键盘输入字符串到KBUF图 18字符串输入输出的程序流程图程序框架如下:data segmentKBUF db 20, 0, 20 dup(20h)STR db 20 dup(20h), $ pkey db press any key.$endsstack segm

26、ent dw 128 dup(0)endscode segmentstart:; set segment registers: mov ax, data mov ds, ax mov es, ax从键盘输入字符串的指令序列将KBUF传送到STR的指令序列显示STR内容的指令序列 lea dx, pkey mov ah, 9h int 21h ; output string at ds:dx ; wait for any key. mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h endsend start ;

27、 set entry point and stop the assembler.编写EXE TEMPLATE程序(提示:CX的初始值不为0),观察执行结果。5. 实验习题1)对实验内容1,在程序中增加显示提示字符串Please input a lowercase letter和 The inverse letter is:,修改程序并上机验证。2)对实验内容2,在程序中增加显示提示字符串Please input a string和The string you input is:,修改程序并上机验证。6. 实验报告要求1)整理源程序段和运行结果。2)说明DOS系统功能调用的10号功能对键盘缓冲区格式上有何要求。3)DOS系统功能调用中的1、2、9、10号功能的输入输出参数有哪些分别放在什么寄存器中4)总结汇编语言程序中如何实现字符和字符串的输入输出。1.2.6 顺序程序1. 实验目的1)了解8086汇编程序的基本结构;2)掌握顺序程序的基本设计方法。2. 实验设备微型计算机、emu80863. 实验原理顺序程序是控制流仅有一个走向的程序,它主要用于解决一些无需进行判断分支,也无需循环执行的简单问题。本节的实验内容与乘法和除法运

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1