第九课逻辑运算指令&控制转移

逻辑运算指令
逻辑与指令
格式:AND DEST,SRC
功能:目的操作数和源操作数按位进行逻辑与运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是
通用寄存器或存储器操作数

AND指令常用于将操作数中某位清0(称屏蔽),只须将要清0的位与0,其它不变的位与1即可

逻辑或指令
格式:OR DEST,SRC
功能:目的操作数和源操作数按位进行逻辑或运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用
寄存器或存储器操作数。

OR指令常用于将操作数中某位置1,只须将要置1的位或1,其它不改变的位或0即可

逻辑异或指令
格式:XOR DEST,SRC
功能:目的操作数和源操作数按位进行逻辑异或运算,结果送目的操作数。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用
寄存器或存储器操作数。

XOR指令常用于将操作数中某些位取反,只须将要取反的位异或1,其它不改变的位异或0即可。可用于密码设置 于某个数异或两次 即可得到原数

逻辑非指令
格式:NOT DEST
功能:对目的操作数按位取反,结果回送目的操作数。目的操作数可以为通用寄存器或存储器。

NOT指令对标志位无影响。

测试指令
格式:TEST DEST,SRC
功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通
用寄存器或存储器操作数。

TEST指令常用于测试操作数中某位是否为1,而且不会影响目的操作数。如果测试某位的状态,对某位进行逻辑与1的运算,其它位逻辑与0,然后
判断标志位。运算结果为0,ZF=1,表示被测试位为0;否则ZF=0,表示被测试位为1

移位指令
移位指令对操作数按某种方式左移或右移,移位位数可以由立即数直接给出,或由CL间接给出。移位指令分一般移位指令和循环移位指令。
一般移位指令
算术/逻辑左移指令
格式:SAL DEST,OPRD
SHL DEST,OPRD

当中的L 就是代表左

功能:按照操作数OPRD规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0。
如图3 12(a)所示。目的操作数可以为通用寄存器或存储器操作数。
SAL,SHL指令影响标志位OF,SF,ZF,PF,CF。

逻辑左移是一样的 就相当于移多少位 就乘了2的多少次方  

算术逻辑右移的最高位一直保持不变  其他位右移

逻辑右移的就是所有数挨个右移  这里的CF位只保存一位

算术右移指令。
格式:SAR DEST,OPRD   SHR  DEST,OPRD

功能:按照操作数OPRD规定的移位次数,对目的操作数进行右移操作,最低位移至CF中,最高位(即符号位)保持不变。

目的操作数可以为通用寄存器或存储器操作数。

SAR指令影响标志位OF,SF,ZF,PF,CF

无条件转移指令
格式:JMP TARGET
功能:使程序无条件地转移到指令规定的目的地址TARGET去执行指令。转移分为短转移、段内转移(近程转移)和段间转移 (远程转移)

控制转移类指令
条件转移指令包括四类:单标志位条件转移;无符号数比较条件转移;带符号数比较条件转移;测试CX条件转移。
格式:Jcc TARGET
功能:若测试条件‘CC’为真,则转移到目标地址TARGET处执行程序。否则顺序执行。
(1) 单标志位条件转移指令
JZ NEXT;若标志ZF=1则转移到标号NEXT处执行。

(2) 无符号数比较条件转移
JA NEXT;无符号数A与B比较,若A>B则转移到标号NEXT处执行程序

分支程序设计,循环程序设计,子程序结构 1、练习逻辑运算指令、比较指令和条件转移指令的功能、用法以及与标志位的关系和可用的寻址方式 2、用地址表法,完成下面要求的多分支程序的设计。根据MODE单元中的模式字(0-7)分别转向L0-L7标号处执行。L0-L7处分别完成显示‘0’-‘7’字符。 当MODE=0时,转L0标号,完成显示‘0’ 当MODE=1时,转L1标号,完成显示‘1’ 当MODE=2时,转L2标号,完成显示‘2’ 当MODE=3时,转L3标号,完成显示‘3’ 当MODE=4时,转L4标号,完成显示‘4’ 当MODE=5时,转L5标号,完成显示‘5’ 当MODE=6时,转L6标号,完成显示‘6’ 当MODE=7时,转L7标号,完成显示‘7’ 3、编制程序实现如下操作: 设有10个学生成绩,分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并存放于S5、S6、S7、S8、S9、S10单元中。 实验六: 1. 请编写一程序,从附加段中一个未排序的字数组中,找出最大数和最小数分别存放在AX 和BX寄存器中。 2. 以GRADE为首地址的10个字的数组中保存有学生成绩。建立一个10个字的RNAK 数组,并根据GRADE中的学生成绩将学生名次填入RANK数组中(提示:一个学生的名次等于成绩高于等于该学生的人数加1)。 寄存器分配情况说明如下: AX 存放当前被测学生的成绩 BX 存放当前被测学生的相对地址指针 CX 内循环计数值 DX 存放当前被测学生的名次计数值 SI 内循环测试时的地址指针 DI 外循环计数值 3、数组DATAX,其中的数据排列规律是:头三项是0,0,1,以 每项的值均是前三项之和。试将项值小于等于2000以前的各项数据填入数组DATAX中。 算法: n≥ 4时: ① an=an-1+an-2+an-3 ② an=2an-1—an-4 要求:按上述两种算法编程 4、从DATA_BUF(1000H)开始存放50个字节数据,编写程序将这些数据由小到大排序,排序后的数据仍放在该区域中。 要求原始数据在源程序中给出,排序前后的数据以每行10个的格式显示在屏幕上。 5、测量一字符串长度,并用十六进制数显示之
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值