组成与汇编实验指导书(6)

2018-11-18 21:38

计算机组成原理与汇编语言实验指导书

★ SAHF

格式:SAHF

功能:寄存器AH中内容送入标志寄存器低八位。 说明:

(1)默认规定了AH寄存器和标志寄存器PSW的低8位; ★ PUSHF 格式:PUSHF

功能:把标志寄存器PSW中内容放入堆栈,同时SP=SP+2。 说明:

(1)默认规定了标志寄存器和和当前堆栈栈顶空间; ★ POPF 格式:POPF

功能:把当前堆栈栈顶的内容弹出送入标志寄存器PSW中,同时SP=SP-2。 说明:

(1)默认规定了标志寄存器和和当前堆栈栈顶空间; 三、数据传送指令的有关说明

1. MOV指令的源操作数和目的操作数必须同时为字节或字操作数;若指令中给出的两个操作数一个为立即数操作数,另一个为内存操作数,则不能确定内存操作数为字节操作数还是字操作数,必须使用PTR伪指令进行说明;若指令中有一个操作数为寄存器操作数,则由寄存器规定操作数是字节还是字操作数;例如:

MOV NEM1,AX;

把AX寄存器中字数据传送到地址为NEM1字内存单元中,高字节AH中内容传送到地址为NEM1+1内存单元中,低字节AL中的内容传送到地址NEM1内存单元中;从指令中可以看出,在内存中存放一个字数据需要两个内存单元;内存单元中字数据的地址使用低字节的地址表示; MOV NEM1,12H

把12H传送到地址为NEM1的内存单元。上面的指令是错误的,原因是NEM1可以表示内存单元中一个字节数据的地址或者是一个字数据的地址,那么12H到底应该传送到字内存单元中还是字内存单元中呢?不能由12H的大小而断定上面的语句是字节传送指令。正确语句应该表示如下: MOV WORD PTR NEM1,12H 把12H传送到字内存单元NEM1中 MOV BYTE PTR NEM1,12H

把12H传送到字节内存单元NEM1中

2. PUSH、POP指令只需要一个操作数,必须为字操作数;另一个默认的操作数是SS:SP所指向的字内存单元操作数。POPF和PUSHF指令的操作数也必须为字操作,而且默认为标志寄存器PSW和SS:SP所指向字内存单元;SAHF和LAHF指令的操作数必须为字节操作数,而且默认为AH寄存器和PSW寄存器的低8位。 3. LEA、LDS和LES是用来取源操作数的地址的指令,则目的操作数必须为16位的通用寄存器;

- 6 -

计算机组成原理与汇编语言实验指导书

四、例题讲解

1. 使用数据传送指令,把标志寄存器中的OF标志清0其余位保持不变;

PUSHF ;把PSW中的内容传送到堆栈中 POP AX ;把PSW的内容从堆栈中弹出,传送到AX寄存器中

AND AX,0F7FF H PUSH AX POPF

;把AX中第11位置0,其余位保持不变 ;把AX中内容压入堆栈 ;把堆栈中内容弹出到PSW中

思考:采用SAHF和LAHF能否实现上面的功能,为什么?

2. 下列ASCII码字符串(包括空格符)依次存放在起始地址为xwang的内存单元中:

xwang

db??wang?xiao?software?college‘

使用XLAT指令,从ASCII码字符串中取第0个和第5个字符的ASCII码传送到DX寄存器中。

MOV BX,OFFSET xwang

MOV AL,0H XLAT MOV AH,AL MOV AL,5H XLAT

MOV DX,AX

思考:若不采用XLAT指令,如何实现上面的功能?

3. 在当前数据段偏移地址为2000H开始的4个内存单元中,存放着某个内存空间的地址指针,高字存放段地址指针,低字存放偏移地址指针,试把该地址指针指向的内存空间的内容读出放入AX寄存器中。

MOV SI,2000H MOV AX,[SI] MOV BX,AX MOV AX,[SI+2] MOV DS,AX

MOV AX,[BX] 五、练习

1. 传送指令

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

MOV AX,1234

MOV XCHG MOV MOV MOV XCHG

BX,5678 AX,BX AH,35 AL,48 DX,75AB AX,DX

- 7 -

计算机组成原理与汇编语言实验指导书

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。 5. 使用xlat命令,完成小写字母a~z的ascii码的转换。

6. 将bx寄存器中的16位二进制数分为4组,每组4位分别压入堆栈进行保护。 7. 数组xwang定义如下:

xwang db 1,2,3,4,5,6,7,8,0

zero db ?

(1) 把内容为0的内存单元的偏移地址和段地址分别送入AX和ES寄存器

中; (2) 若SI寄存器指向数组xwang的初试地址,编制程序段将数组xwang

中数据0传送到zero内存单元中;

(3) 若SI寄存器包含数据0在数组xwang中的位移量,编制程序段将数据

0传送到zero内存单元中;

- 8 -

计算机组成原理与汇编语言实验指导书

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

一、算术逻辑运算和移位指令概述

使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和代码转换运算。具体说来,可以分为如下几类:

1. 算术运算指令:加法指令、减法指令,乘法指令、除法指令以及转换指令; 对于算术运算指令来说,

?

大部分都影响标志位,不同指令影响不同:

(1) 加、减法指令影响 SF,ZF,AF,PF,CF,OF; (2) 加1和减1指令不影响CF; (3) 乘法指令影响CF,OF;

(4) 除法指令使大部分标志位的状态不确定; (5) 对BCD码调整指令对标志位的影响不同;

(6) 转换指令对标志位无影响

? 都可以用于字节、字的运算;

? 双操作数指令除源为立即数外,其余必须有一个操作数为寄存器;单

操作数指令不能为立即数。

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

对于逻辑运算指令来说,逻辑运算是按位操作,操作数应该是位串而不是数;

在8086/8088中,可以使用的操作数可以为8位或16位二进制数,即可以是一个字节或字数据;NOT指令不允许使用立即数,其它4条指令除非源操作数是立即数,至少有一个操作数必须放在寄存器中,另一个操作数则可以使用任意的寻址方式;NOT指令不影响标志位,其它4条指令对标志位的影响规定如下: CF=0F=0, AF未定义 ,SF 、ZF、PF 根据运算结果进行设置。

3. 移位指令:

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

(1)算术逻辑移位指令:SHL,SHR,SAL,SAR (2)循环移位指令:ROL,ROR,RCL,RCR 对于移位指令来说,

(1) 所有的移位指令都可以用来对字节或字数据进行移位运算; (2) 移位指令的目的操作数可以使用寄存器或储存器寻址方式; (3) 若移位次数大于1次,则移位次数应先放在CL寄存器; 移位指令对标志位的影响规定如下:

(1)算术逻辑移位指令影响:

执行多次移位指令后对CF、OF的影响:CF=从目标操作数移出的最后一位;

OF不定。

执行一次移位指令后对CF、OF的影响:OF用于判断移位后最高有效位是否发生变化:最高位与CF不等,OF = 1;无变化时,OF = 0;CF根据各条指令的规定设置;对于SF、ZF、PF,AF无定义。

- 9 -

计算机组成原理与汇编语言实验指导书

(2)循环移位指令的影响:

SF、ZF、PF、AF不影响。OF、CF见指令说明。 二、算术逻辑运算和移位指令详解 1. 加法指令 ★ADD 加法指令 格式:ADD dest,src

功能:源操作数src和目的操作数dest相加,结果保存在目的操作数中,根据运算结果设置AF、CF、OF、PF、SF、ZF标志位。 说明:

(1)可以进行8位、16位的无符号数和带符号数的加法运算; (2)源操作数和目标操作数不能同时为存储器, 不能为段寄存器; (3)指令影响标志位的情况:

OF=1,8位带符号数相加,和超出范围(-128~+127); 16位带符号数相加,和超出范围(-32768~+32767); CF=1,8位无符号数相加,和超过255, 16位无符号数相加,和超过65535,

其他条件标志(SF,AF,PF,ZF)根据定义设定。

MOV AL,7EH MOV BL, 5BH

;(AL)=7EH ;(BL)=5BH

ADD AL,BL ;(AL)=7EH+5BH=D9H 运算后,对标志位影响的结果是:

SF=1 ZF=0 AF=1 PF=0 CF=0 OF=1

, 结果最高位=1 ,结果不等于0

,D3 位向D4 有进位 ,‖1‖的个数为奇数 ,无进位 ,和超过+127

★ADC 带进位加法指令

格式:ADC dest,src

功能:源操作数src和目的操作数dest以及当前的CF标志(上条指令的结果)相加,结果保存在目的操作数中,根据运算结果设置AF、CF、OF、PF、SF、ZF标志位。 说明

(1) 与ADD指令相比较,运算的结果受上条指令运算结果CF标志的影响,可

用于实现多字节的加法运算; 完成两个多字节数相加运算: 3B74AC60F8H+20D59E36C1H=?两个多字节数存放在DATA1,DATA2开始的内存单元中。

MOV CX, 5

MOV SI, 0

- 10 -


组成与汇编实验指导书(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:在财务报表审计中应如何进行风险评估

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: