汇编语言 实验3 串操作 (含答案)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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开始的内存区域中,编写程序并验证。

相关文档
最新文档