华科汇编第一次实验报告.docx
- 文档编号:29854114
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:16
- 大小:635.13KB
华科汇编第一次实验报告.docx
《华科汇编第一次实验报告.docx》由会员分享,可在线阅读,更多相关《华科汇编第一次实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
华科汇编第一次实验报告
汇编实验报告
姓名:
班级:
CS1209学号:
一、实验目的
(1)掌握汇编源程序开发的过程:
编译、汇编MASM、连接LINK、用TD调试。
(2)编写简单的汇编代码,加强对汇编语言的理解。
二、实验内容及要求
(1)、《80X86汇编语言程序设计》P299中的程序实例。
要求:
重复7.4.3节中的整个过程,初步掌握TD的使用方法。
(2)、《80X86汇编语言程序设计》P31中的1.14题。
要求:
直接在TD中输入指令进行求和(如MOVAH,x1、MOVAL,x2、ADDAH,AL),记录执行指令后标志位SF、OF、CF、ZF的值(验证自己的作业情况)。
(3)、编写程序
缓冲区BUF中有若干个有符号短整数(2个字节),找出其中的绝对值最大的数并存放到变量RESULT中。
要求:
在BUF中定义不同的正负数,用TD查看变量RESULT的值是否正确。
三、实验步骤
题目一,从键盘中输入一个字符,若该字符为‘1’,则在下一行输出字符串‘11111111111!
’后返回DOS;若该字符为‘2’,则在下一行输出字符串‘22222222222!
‘后返回DOS;若该字符为其他字符,则在下一行输出字符串’OtherCharacter’后返回DOS。
通过TD调试找出下面代码的错误并改正。
1、用记事本建立汇编源程序文件WAN.ASM
.386
STACKSEGMENTUSE16STACK
DB200DUP(0)
STACKENDS
DATASEGMENTUSE16
BUF1DB0AH,0DH,'1111111111!
$'
BUF2DB0AH,0DH,'2222222222!
$'
BUF3DB0AH,0DH,'OtherCharacter!
',0AH,0DH
DATAENDS
CODESEGMENTUSE16
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAH,1
INT21H;等待从键盘输入一个字符
CMPAL,'1'
JEA1
CMPAL,'2'
JEA2
JMPA3
A1:
LEADX,BUF1
MOVAH,9
INT21H
A2:
LEADX,BUF2
MOVAH,9
INT21H
A3:
LEADX,BUF3
MOVAH,9
INT21H
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.编译连接该程序
3.运行程序中出现了如下问题。
第一次运行:
输入字符‘1’的显示结果
第二次运行:
输入字符‘2’的显示结果
第三次运行:
输入字符‘@’的显示结果
4.调试过程
(1)调入TD
(2)单步执行第一二条语句,并将调试界面恢复成标准形式
(3)将光标移到动A1A2A3的最后一句设置断点
(4)将光标移至指令“CMPAL,‘1’”处,让程序从IP指示处开始进行,并在DOS界面中输入1,可检查寄存器操作区中AX的内容,(AL)为31,说明前面执行正确。
(5)按F9键使程序继续执行,中断在断点1处;再按F8键单步执行该指令,则会在DOS屏幕上显示字符串‘11111111111!
‘。
如图:
(7)再按F8键单步执行,就会发现它继续执行“LEADX,BUF2”指令而不是返回DOS的指令”MOVAH,4CH”,说明少了转移指令“JMPEXIT”。
由于顺序执行才将两个不应显示的字符串也显示出来了。
(8)仔细查看第二个分支,错误也是一样的,也需要转移指令“JMPEXIT”。
(9)退出TD再进入编辑程序中修改,重新汇编,连接,运行,若有问题,则需再用TD调试,重新运行的结果如下:
当输入为‘1‘或’2‘时无误,输入其他字符时有错误,再用TD调试
(10)现在再开始调试第三个分支,先打开执行WAN.EXE文件
(11)重复之前的2,3,5步骤,但输入的字符不能是1’或‘2’继‘续执行,执行结果如下:
(12)重复执行2,3,5步骤,在执行断点2处的指令前用TD修改数据域的数据。
修改步骤如下:
将鼠标移至数据操作区中“OtherCharacter”行中最后一个数0DH的下一个字节(DS:
2EH)处,按鼠标右键显示菜单,选择CHANGE,屏幕出现输入框,输入$修改成功后按OK按钮
(13)再按F9键从断点执行,即可得到正确结果。
题目二,已知8位二进制数X1和X2的值,求[X1]补+[X2]补,并指出结果的符号,判断是否产生溢出和进位。
要求:
直接在TD中输入指令进行求和(如MOVAH,x1、MOVAL,x2、ADDAH,AL),记录执行指令后标志位SF、OF、CF、ZF的值(验证自己的作业情况)。
(1).X1=+0110011B(51)X2=+1011010B(90)
(2).X1=-0101001B(-41)X2=-1011101B(-93)
(3).X1=+1100101B(101)X2=-1011101B(-93)
经验证与理论一致
题目三:
编写程序:
缓冲区BUF中有若干个有符号短整数(2个字节),找出其中的绝对值最大的数并存放到变量RESULT中。
要求:
在BUF中定义不同的正负数,用TD查看变量RESULT的值是否正确。
一.分析
对于BUF中的负数采用取补运算得到其绝对值,然后俩俩比较得到绝对值最大的数,将其绝对值存放在result中。
二.数据定义
BUF存放原始数据,result存放绝对值最大的数的绝对值,AX作为中间值,方便比较和赋值,CX作为循环计数器,SI作为指针指向BUF。
三.流程图
N
Y
N
Y
N
Y
四.源码
.386
DATASEGMENTUSE16
BUFDW1,2,-5,3,16H
RESULTDW0
DATAENDS
STACKSEGMENTUSE16STACK
DB200DUP(0)
STACKENDS
CODESEGMENTUSE16
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVCX,5
LEASI,BUF
MOVAX,[SI]
CMPAX,0
JGEA4
NEGAX
A4:
MOVRESULT,AX
DECCX
A1:
INCSI
INCSI
MOVAX,[SI]
CMPAX,0
JGEA2
NEGAX
A2:
CMPRESULT,AX
JGEA3
MOVRESULT,AX
JMPA3
A3:
LOOPA1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
四.实验心得
通过这次实验大致了解了编译链接和调试汇编程序的整个过程,对汇编程序的理解有了进一步的加深,实验中对TD调试过程还不熟练,总体而言有很大的收获。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 第一次 实验 报告