汇编实验一

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西安邮电大学(计算机学院)课内实验报告实验名称:汇编实验一专业名称:网络工程班级:1201学生姓名:司联波学号(8位):04122007(07)实验日期:2015年5月14日寻址方式与程序设计实验一、实验目的(1)熟悉80x86寻址方式及基本指令的功能。(2)掌握汇编语言程序设计上机过程和汇编语言源程序结构,为后续汇编语言程序设计打好基础。(3)熟悉Microsoft的DEBUG使用方法。二、实验内容1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。(1)程序装入后,代码段寄存器CS的内容为_1516____H,代码段第一条可执行指令MOVAX,DATA对应的机器代码为b811515__H,它是一个_3__字节指令,注意观察执行该指令时IP值的变化情况,该指令源操作数DATA的寻址方式是___直接寻址___,其值为__1515__。(2)执行完MOVDS,DATA指令后,数据段寄存器DS的内容为_1515___H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为___15150__H、15151__H和____15152____H。(3)程序中第一条ADDAL,[BX]指令对应的机器代码为_____8a07_____H,它是一个_2_字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为__间接寻址___,该操作数所在存储单元的逻辑地址(DS):(BX)为_1515:000b___,其物理地址为_15150___H;执行完该指令后(AL)=____0001__H,CF=_0_____,OF_0_____,ZF___1___,SF__1____,AF0______,PF_0_____;若两操作数为无符号数,计算结果是否正确___是____?若两操作数为带符号数,计算结果是否正确__是______?若计算结果正确,结果是正数还是负数__负____?(4)执行完第二条ADDAL,[BX]指令后(AL)=_0002_____H,CF=__1____,OF_1_____,ZF__1____,SF_0_____,AF__1____,PF_1_____;若两操作数为无符号数,计算结果是否正确___是____?若两操作数为带符号数,计算结果是否正确___否_____?(5)指令MOVSUM,AL中目的操作数的寻址方式为__寄存器间接寻址__。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为72_H。DATASEGMENTNUMDB82H,68H,88HSUMDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETNUMMOVAL,[BX]INCBXADDAL,[BX]INCBXADDAL,[BX]MOVSUM,ALMOVAH,4CHINT21HCODEENDSENDSTART2、读懂下列源程序;编辑、汇编、连接生成EX12.ASM、EX12.OBJ、EX12.LST、EX12.EXE文件;使用DEBUG单步执行EX12.EXE文件,并回答以下问题。(1)代码段的前三条指令MOVAX,STACK、MOVSS,AX和MOVSP,LENGTHSTL的功能为堆栈初始化,试问执行完这三条指令后,堆栈栈底所在单元的逻辑地址(SS):(SP)为__0790:000b__;执行PUSHAX指令后堆栈指针寄存器(SP)=_00fe__H,此时,(SS):(SP+1)和(SS):(SP)单元的值为0790:000f___H;执行完PUSHBX后(SP)=00fe__H,此时,(SS):(SP+1)和(SS):(SP)单元的值为0790:0010__H;执行完POPAX后(SP)=__00fe____H;执行完POPBX后(SP)=_0100__H;此时(AX)=___4ca3___H,(BX)=_5b0a_H。请读者通过对堆栈操作指令执行情况的观察,进一步掌握进、出栈操作过程。(2)执行ADDAX,BX指令后(AX)=__4802___H,CF=__0____,OF___1___,ZF__1____,SF__1____,AF_0_____,PF___0___(注意考虑PF值与计算结果高8位有无关系);若两操作数为无符号数,计算结果是否正确__否_____?若两操作数为带符号数,计算结果是否正确___否_?(3)执行ANDAX,BX指令后(AX)=_4802___H,CF=_0_____,OF_0_____,ZF____1__,SF_0_____,AF___0___,PF_0_____。STACKSEGMENTstackSTLDW100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVAX,STACKMOVSS,AXMOVSP,LENGTHSTL;表达式“LENGTHSTL”的功能为计算STL中定义的变量的个数,;汇编后其值为100H,详见教材5.2.2MOVAX,0101101100001010BMOVBX,0100110010100011BPUSHAXPUSHBXADDAX,BXPOPAXPOPBXANDAX,BXMOVAH,4CHINT21HCODEENDSENDSTART三、实验过程1.使用记事本编写源代码,保存为asm为后缀的源程序;2.运行CMD,打开dos命令,进入汇编环境所在目录;3.masm文件名.asm回车此时目录下生成obj后缀的目标文件。4.link文件名,回车,此时目录下生成exe后缀的可执行文件。使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序四、实验总结通过本次实验,我熟悉了80x86寻址方式及基本指令的功能,掌握了汇编语言程序设计上机过程和汇编语言源程序结构。对实验前做错或做不出来的问题,我通过本次试验操作对这些问题有了进一步的认识,如:操作数的寻址方式。但还有一些问题尚待解决,这是学习上的不做,这些将会在查阅一些资料后得到解决。字符及字符串输入输出与顺序程序设计一.实验目的及实验环境1、学习和掌握字符及字符串的输入输出方法。2、掌握顺序程序设计方法。3、进一步掌握调试工具的使用方法。二.实验预习要求1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。2、复习BCD码运算调整指令。3、根据“2.2.3实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。4、从“2.2.4实验习题”中任选一道题目,编写源程序,以便上机调试。三.实验内容1、从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。四.方案设计1.问题分析考虑到与用户进行交互,则需要使用dos功能调用1)从键盘获取一个字符并显示MOVAH,01HINT21H;调用21号软中断,等待用户输入一个字符,并将该字符保存在AL中SUBAL,30H;将ASCII码转换为对应的数值2)显示一个字符MOVDL,2ORDL,30H;将数值转换为ASCII码MOVAH,02HINT21H;将字符’A’显示到显示器上3)显示一个以’$’结尾的字符串LEADX,INFOR;或者MOVDX,OFFSETINFORMOVAH,09HINT21H4)计算两个一位十进制数的加法MOVBL,NUM1MOVAL,NUM2ADDAL,BL;将两个数加起来AAA;非压缩性BCD码加法调整指令,调整AX寄存器中的内容。5)计算两个一位十进制数的乘法MOVBL,NUM1MOVAL,NUM2MULAL,BL;将两个数相乘结果放在AL寄存器中AAM;非压缩型BCD码乘法调整指令,调整AX寄存器中的内容。五.测试数据及运行结果1.两个一位十进制数之和程序运行结果2.求两个一位十进制数的积1.输入第一个数2后,AL=38H2.输入第二个数6后,AL=36H3、乘法指令执行后,AL=30H4、乘法调整后,AX=01026*8=12,与实际计算结果一致5、最终结果图七.实验总结通过本次试验,我学习了dos功能调用中用于字符输入(功能号01H),字符输出(功能号02H),字符串输入(功能号02H)以及字符串输出(功能号09H)等的调用方法。掌握汇编语言程序设计上机过程和汇编语言源程序结构,为后续汇编语言程序设计打好了基础。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功