数据传送指令及算术逻辑运算和移位指令的使用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

1.数据传送指令的使用

一,实验目的;

把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从内存单元、I/O端口中读取数据。

1. 通用传送指令:MOV,PUSH,POP,XCHG,XLAT

2. 输入输出指令指令: IN,OUT

3. 目的地址传送指令: LEA,LDS,LES

4. 标志位传送指令: LAHF,SAHF,PUSHF,POPF

二,实验步骤;

1. 传送指令

1)用A命令在内存100H处键入下列内容:

MOV AX,1234

MOV BX,5678

XCHG AX,BX

MOV AH,35

MOV AL,48

MOV DX,75AB

XCHG AX,DX

2)用U命令检查键入的程序并记录,特别注意左边的机器码。

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。

2. 改变标志寄存器psw中tf标志的状态(0——1或1——0),其余位保持不变。

3. 设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。在DEBUG状态下使用A 命令送入下面程序,并用单步T命令执行的方法,分析每条指令源地址的形成过程?当数据传送每完成一次,试分析AX寄存器中的内容是什么?

程序清单如下:

MOV AX,BX

MOV AX,0304H

MOV AX,[0304H]

MOV AX,[BX]

MOV AX,0001[BX]

MOV AX,[BX][SI]

HLT

4. 使用标志位传送指令,编程序段将标志位寄存器的低八位的值存入内存单元DS:1000H 中或堆栈中,然后将标志位寄存器的低八位置位为10101010。

2.算术逻辑运算和移位指令的使用

一,实验目的;

使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和代码转换运算

1,算术运算:加法指令、减法指令,乘法指令、除法指令以及转换指令;

2. 逻辑运算指令:AND,TEST,OR,XOR,NOT

3. 移位指令:

移位运算可以分为算术逻辑移位和循环移位两类。

(1)算术逻辑移位指令:SHL,SHR,SAL,SAR

(2)循环移位指令:ROL,ROR,RCL,RCR

二,实验步骤;

1. 已知程序段定义如下:

MOV AX,1234

MOV CL,4

SHL AX,CL

INC AX

DEC CL

ROR AX,CL

MOV BX,4

MUL BX

MOV BX,4

DIV BX

INT 20

(1)每条指令执行后,AX寄存器中的内容是什么?

(2)每条指令执行后,标志寄存器的各位标志等于什么?

(3)程序结束时,AX和DX的内容等于什么?

2. 编写一程序求双字数据的绝对值。双字数据保存在DX和AX中,结果保存在BX和CX 中。

3、编制程序,将DX和AX中的双字右移4位。

4. 编制程序,判断DL寄存器的低4位是否全为0?是否有0?判断AL寄存器中的数值是奇数还是偶数?是否为4的倍数?

6、编制程序,用一条指令让AX寄存器清0;用一条指令使DX寄存器高3位为1,其余位保持不变;用一条指令使BL寄存器低4位为0,其余位保持不变;用一条指令,使SI和DI寄存器中对应位不相同的位置均置1;

三,串操作指令的使用

一,实验目的;

所谓串就是内存中一段地址相连的字节或字。串操作就是对串中各项数据进行某种运算,也叫数据块操作。

8086/8088有5种基本串操作:

MOVS(Move string)串传送指令

CMPS(Compare string)串比较指令

SCAS(Scan string)串扫描指令

LODS(Load from string)从串取指令

STOS (Store in to string)存入串指令

可以使用3种重复前缀:

REP(Repeat)无条件重复

REPE/REPZ(Repeat while equal/zero)相等/为零则重复

REPNE/REPNZ(Repeat while not equal/not zero)不相等/不为零则重复

可以只有源操作数,可以只有目标操作数,可能二者都有

源操作数用SI 寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段;目标操作数用DI寻址,隐含ES为段地址

每次串操作指令执行后根据DF标志对SI、DI 自动进行调整:

DF=1,DI、SI自动-1 (字节)或-2(字)

DF=0,DI、SI自动+1(字节)或+2(字)

通过使用串操作时我们对汇编的编写程序可以更简单,更快的写出程序。

二,实验步骤;

1.编写程序段,查找字符串中是否含有字符"&",若有,将字符"&"用空格字符代替。

2.已知在N到N+I的内存单元中有一组ASCII码字符串(共I+1个),编写程序将此字符串传送到NI到NI+I内存单元中,并使字符串的顺序与原来字符串的顺序相反

3.编写程序段:查找TELEPHONE中的电话号码(10位)中有无“-”字符,若有则将程序转向FOUND 处执行;若无则将程序转向NON_FOUND出执行;

4、ds:100开始的内存单元中存放着以“*”结尾的字符串,编写程序段查找该字符串中包含字符’$’的个数,把个数放入CX寄存器中。

实验截屏如下:

三,实验小结;

注意:在数据传送指令中:除SAHF和POPF指令外,所有指令对标志寄存器没有影响。

相关文档
最新文档