汇编语言 实验3 串操作 (含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一串操作
一、实验预习要求
1、复习8086指令系统中的串操作指令。
2、复习汇编程序的建立、连接、执行和调试的全过程。
3、根据本实验的编程提示及题目要求编写试验中的程序段。
二、编程提示
1、定义逻辑段时,所定义的数据段或附加段的缓冲区大小及缓冲区起始地
址应与实际的操作需要一致。;例如定义如下附加段:
<附加段名> SEGMENT ;定义附加段
ORG 1000H ;定义缓冲区从该逻辑地址为1000H处开始BUFFER DB 10H DUP(?) ;定义缓冲区大小为10H个字节单元
<附加段名> ENDS
2、任何程序都需要定于代码段。在代码段中需要初始化所定义的除代码段
寄存器之外其他段寄存器,程序代码的最后需要有正常返回DOS的指令。
如下:
<代码段名> SEGMENT
ASSUME CS :<代码段名> ,DS:<数据段名>,ES:<附加段名>
START: MOV AX , <数据段名>
MOV DS, AX
MOV AX, <附加段名>
MOV ES,AX
【串操作程序代码】
MOV AH,4CH
INT 21H
<代码段名> ENDS
三、实验内容
1、在代码段中输入以下程序段并运行之,回答问题。
CLD
MOV DI,1000H
MOV AX,55AAH
MOV CX,10H
REP STOSW
上述程序生成EXE文件,执行后:
(1)从ES:1000H开始的16个字单元的内容是什么?
(1)DI=?,CX=?解释原因。
DI=1020H CX=0000H REP的功能是重复执行操作至CX=0,而
STOSW是每次执行指令都是(DI)←(DI)+2
DI=2020 CX=0000 REP的功能是重复执行操作至cx=0,而stosw是每次执行指令都是(DI)<-(DI)+2
2、在上题的基础上,在代码段中再输入以下程序段并运行,回答下面的问题:
MOV SI,1000H
MOV DI,2000H
MOV CX,20H
REP MOVSB
程序执行后:
(1)从ES:2000H开始的16个字单元的内容是什么?(2)SI=?,DI=?,CX=?分析原因。
SI=1020H DI=2020H CX=0000 原因:REP的功能是重复操作至CX=0,而
MOVSB=是每次执行指令都是(DI)<-(DI)<-(SI)+1
3、在以上两题的基础上,再输入以下三个程序段并依次运行。
程序段1:
MOV SI,1000H
MOV DI,2000H
MOV CX,10H
REPZ CMPSW
程序段1执行后:
(1)ZF=?,根据ZF的状态,你认为两个串是否比较完了?ZF=1 两个串比较完了。
(2)SI=?,DI=?,CX=?分析原因。SI=1020H DI=2020H CX=0000H
原因:REPZ的功能是重复执行操作至CX=0,而CMPSW是每次
执行指令都是(DI)<-(DI)+2,(SI)<-(SI)+2
程序段2:
MOV WORD PTR [2008H],4455H
MOV SI,1000H
MOV CX,10H
REPZ CMPSW
程序段2执行后:
(1)ZF=?,根据ZF的状态,你认为两个串是否比较完了?
ZF=0,两个串没有比较完
(2)SI=?,DI=?,CX=?分析原因。
SI=100AH DI=200AH CX=000BH
程序段3:
MOV AX,4455H
MOV DI,2000H
MOV CX,10H
REPNZ SCASW
程序段3执行后:
(1)ZF=?,根据ZF的状态,是否在串中找到了数据4455H?
ZF=1在串中找到了数据4455H。
(2)SI=?,DI=?,CX=?分析原因。
SI=100AH DI=200AH CX=000BH
4、从DS:1000H开始存放有一个字符串“This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中,编写程序并验证。