3.2.2算逻指令

合集下载

第三章 A3 逻辑运算指令

第三章 A3  逻辑运算指令

例 MOV A,#80H RL A ;A=01H = 例 MOV A,#80H RR A 例 MOV A,#80H RLC A ;CY=0, A=00H = ;CY=1, A=01H ;A=40H =
例 MOV A,#80H RRC A ; CY=0, A=01000000B (40H) = ; CY=1, A=11000000B (C0H) =
例1 请看如下程序 PC→ 2000H LJMP 4000H ;4000H→PC ┇ 4000H MOV A,#11H , ┇ 程序执行完第一条无条件转移指令后,马上跳转到 4000H地址,执行该地址程序。 地址, 地址 执行该地址程序。
例2 程序 2000H:MOV R0,#1BH ;1BH→R0 : , 2002H:SJMP 03H ;PC+2+rel=2002H+2+03H : ;=2007H→PC ;= ┇ ┇ 2006H: : 2007H: : 执行SJMP 03H指令后,跳转到 指令后, 地址执行程序。 执行 指令后 跳转到2007H地址执行程序。 地址执行程序 说明: 说明:实际编写程序时最好把偏移量和转移地址都用符 号表示,机器汇编时自动计算出偏移字节数, 号表示,机器汇编时自动计算出偏移字节数,不容易出 同时也便于修改程序。 错,同时也便于修改程序。
无条件转移类指令(4条 一、 无条件转移类指令 条)
LJMP addl6 ;addl6→PC无条件跳转到 无条件跳转到addl6 无条件跳转到 地址,可在64KB范围内转移, 范围内转移, ;地址,可在 范围内转移 ;称为长转移指令 AJMP add11 ;add11→PC,无条件转向 ,无条件转向add11 地址,只能在2KB范围内转移 ;地址,只能在 范围内转移 SJMP rel ;PC+2+rel→PC相对转移,rel是偏移量, 相对转移, 是偏移量 是偏移量, 相对转移 它是8位有符号数 范围-128~+127 位有符号数, ;它是 位有符号数,范围 ~ 即向后跳转128B,向前可跳转 ;即向后跳转 ,向前可跳转127B JMP @A十DPTR ;A+DPTR→PC,属散转指令, 十 ,属散转指令, 无条件转向A与 ;无条件转向 与DPTR内容相加后 内容相加后 ;形成的新地址

3.3.2 算术运算类指令

3.3.2 算术运算类指令

1. 加法指令(s 代表源操作数,d 代表目标操作数)(1)不带进位的加法指令add d,ss和d相加的结果存入d。

(2)带进位的加法指令adc d,sS和d相加后再加上标志位CF,结果存入dAdd主要用来计算低位字加法,adc用来计算高位字加法,实现32位加法比如一个32位数,高16位存在dx中,低16位存在ax中另一个32位数,高16位置存在cx中,低16位存在bx中计算加法add ax,bxAdc dx,cx(3)加1指令inc d 则d=d+1Inc axInc bl2. 减法指令(1)不带借位的减法sub d, sd-s结果存入d(2)带借位的减法sbb d,sd-s-CF,结果存入d比如一个32位数,高16位存在dx中,低16位存在ax中另一个32位数,高16位置存在cx中,低16位存在bx中计算减法,第一个数减第二个数sub ax,bxsbb dx,cx(3)减1指令dec d 则d=d-1dec axdec bl(4)求补NEG d将d包括符号位在内各位取反,末位加1相当于d=0-d比如字节型-5计算机中存的是11111011求补后是00000101,即5比如字节型+7计算机中存的是00000111求补后是11111001即-7 (5)比较cmp d,s类似做减法sub,但不保存结果,只用来影响标志位,主要通过执行后的标志位来判断两个数的大小关系比如cmp ax,bx (类似做ax-bx)Jz label1 (JZ意思是两数相等则跳转, jmp if zf=1)3. 乘法指令(1)无符号数乘法(用于正数)Mul s (该指令隐含了操作数ax或al)s为无符号word型,将s与AX相乘,结果存入DX,AX;s为无符号byte型,将s与AL相乘,结果存入AX(2)有符号数乘法(用于负数)imul s (该指令隐含了操作数ax或al)s为有符号word型,将s与AX相乘,结果存入DX,AX;s为有符号byte型,将s与AL相乘,结果存入AX乘法指令影响of位和cf位,乘积结果用到高字(节)寄存器,则of=1,cf=1;没用到高字(节)寄存器(结果在8位或16位范围内) 则of=0,cf=0 书p974. 除法指令(隐含被除数在ax或dx,ax中)(1)无符号数除法Div sS为无符号byte型,则用ax/s ,商存在al中,余数存在ah中S为无符号word型,则用dx,ax/s,商存在ax中,余数存在dx中(2)有符号数除法idiv s和无符号数除法类似,用于有符号数假设用30001/2 ,代码如下Mov ax, 30001Mov bl, 2Div bl得到的是divide override,这样的情况暂不考虑,只考虑结果能够存放到相应寄存器中的情况(3)字节转换成字(隐含操作数为al)CBW将al中的符号位扩展到ah中,比如-5,mov al,-5<=> mov al, 11111011bal中的11111011b经cbw扩展后AX中为1111111111111011b;al存的如果是正数,直接在ah中存入00000000b(4)字转换成双字(隐含操作数为ax)Cwd (convert word to dword)和cbw类似,将ax中的符号位扩展到dx中。

423 计数器指令

423 计数器指令

4.2.3 计数器指令S7中的计数器用于对RLO正跳沿计数。

加计数器计数器的种类减计数器可逆计数器在CPU中保留一块存储区作为计数器计数值存储区,每个计数器占用两个字节,称为计数器字。

计数器字中的第0至11位表示计数值(二进制格式),计数范围是0到999。

当计数值达到上限999时,累加停止。

计数值到达下限0时,将不再减小。

累加器1低字的内容计数值127LAD指令STL指令功能说明C no.-(SC) <预置值> SC C no.计数器置初始值该指令为计数器置初始值,其中no.为计数器编号,数据类型为COUNTER;<预置值>的数据类型为WORD,可用存储区为I、Q、M、D、L,也可为常数;STL指令的初始值在累加器1中.C no. --(CU) CU C no. 加计数执行指令时,RLO每有一个正跳沿计数值加1.若达上限999,则停止累加.C no. --(CD) CD C no. 减计数执行指令时,RLO每有一个正跳沿计数值减1.若达下限0,则停止减。

FR C no. 允许计数器再启动若RLO为1,则初始值再次装入,它不是计数器正常运行的必要条件。

当计数大于0时在输出Q上的1信号状态检查产生结果1;当计数等于0时,信号状态检查产生结果0。

3. 计数器的梯形图方块指令参数数据类型存储区说明N0. COUNTER 计数器标识号CU BOOL I,Q,M,D,L 加计数输入CD BOOL I,Q,M,D,L 减计数输入S BOOL I,Q,M,D,L 计数器预置输入PV WORD I,Q,M,D,L 计数初始值(0至999)R BOOL I,Q,M,D,L 复位计数器输入Q BOOL I,Q,M,D,L 计数器状态输出CV WORD I,Q,M,D,L 当前计数值输出(整数格式)CV_BCD WORD I,Q,M,D,L 当前计数值输出(BCD格式)例一计数器扩展为定时器钟存储器,设置MB100为时钟存储器,则M100.0的变化周期为0.1s。

计算机组成原理CPU设计实验报告

计算机组成原理CPU设计实验报告

计算机组成原理CPU设计实验报告课程设计题目:16位CPU设计学院: 信息学院班级:电子A班学号:1115102015姓名:方茹1目录1 实验方法 ..................................................................... . (4)2 总体说明 ..................................................................... ................................................. 5 2.1指令系统: .................................................................... .......................... 5 2.1.1指令格式分类(按指令字长和操作数不同): ...................................................... 5 2.1.2具体指令汇总表: .................................................................... .......................... 6 2.1.3相关指令流程图: .................................................................... .......................... 6 2.1.4指令数据通路的构建: .................................................................... ................... 8 2.1.5指令的分组及节拍: .................................................................... ..................... 12 2.1.6指令执行状态图:(见下页)..................................................................... ........... 13 2.1.7具体微指令: .................................................................... ............................... 13 2.2 系统整体介绍 ..................................................................... .................. 16 2.2.1系统基本模块划分 ..................................................................... ....................... 16 2.2.2总体结构图:(见下页)..................................................................... (17)3 CPU的控制逻辑与具体数据通道设计 ..................................................................... ......18 3.1取指令逻辑的设计 ..................................................................... .. (19)3.1.1指令地址的保存 ..................................................................... (19)3.1.2指令存储器 ..................................................................... .................................. 20 3.1.3下一条指令地址的计算 ..................................................................... ................ 20 3.2指令译码逻辑的设计...................................................................... ...................... 21 3.3指令执行逻辑的设计...................................................................... ...................... 22 3.4存储器访问逻辑的设计 ..................................................................... ................... 23 3.5结果写回逻辑的设计...................................................................... ...................... 24 3.6单周期CPU的总成...................................................................... (25)4各部分说明 ..................................................................... .............................................26 4.1ALU .................................................................................................................... 26 4.2数据选择器BUS_MUX ................................................................ ........................ 28 4.3器件T1 ..................................................................... .......................................... 30 4.4标志寄存器FLAG_REG ............................................................... ........................ 31 4.5T2: .................................................................... ................................................ 33 4.6程序计数器PC ..................................................................... ............................... 33 4.7地址寄存器AR和指令寄存器IR: .................................................................... .. 34 4.8寄存器、寄存器组和寄存器的选择.......................................................................36 4.9一位控制信号/WR .................................................................... ........................... 37 4.10 节拍发生器 ..................................................................... .................................. 37 4.11控制逻辑 ..................................................................... ...................................... 39 4.12T3...................................................................... ................................................ 42 4.13REG_OUT ......................................................................................................... 43 4.14存储器 ..................................................................... .......................................... 44 4.15总线选择器 ..................................................................... .. (45)24.16REG_TEST ............................................................... .. (46)5附录: .................................................................... .. (47)附录A:组员分工: .................................................................... .. (47)附录B:组员设计总结: .................................................................... . (47)31 实验方法实验要完成的工作主要包括:指令系统的设计,FPGA-CPU的整体结构设计及其细化,逻辑设计的具体实现(VHDL语言程序的编写),软件模拟,以及硬件调试。

二算术逻辑运算指令

二算术逻辑运算指令

三、逻辑运算指令
⑵移位指令
• 累加器A循环左移指令: • RL A ; • 累加器A连同进位位循环左移指令: • RLC A ; • 累加器A循环右移指令: • RR A ; • 累加器A连同进位位循环右移指令 • RRC A ;
三、逻辑运算指令
• 例3-18:若(A)=10111101B=BDH, Cy=0
• 注:执行结果只影响PSW的奇偶校验位P (以A为操 作数时 )
二、算术运算指令
3.乘、除法指令
• MUL AB ; (A)←[(A)×(B)]7-0

(B)←[(A)×(B)]15-8
• 如果积大于255(FFH),则溢出标志OV置1,否则清0。进
位标志位Cy总为0。
二、算术运算指令
• 例3-17:设(A)=50H(80),(B) =0AH(160) 执行指令:MUL AB;
• 执行“ RLC A”的结果为 • (A)=01111010B=7AH,Cy=1 • A的内容扩大2倍
三、逻辑运算指令
2 .双操作数的逻辑运算指令
• ⑴逻辑“与”指令
• ANL A,Rn ;(A) ←(A)∧(Rn) • ANL A,direct ;(A) ←(A)∧(direct) • ANL A,@Ri ;(A) ←(A)∧((Ri)) • ANL A,#data ;(A) ←(A)∧data • ANL direct, A ;(direct)←(direct)∧(A) ANL direct,#data;(direct)←(direct)∧data
• 本指令不能简单的把累加器A中的16进制数变换成 BCD码
二、算术运算指令
• 例3-13:设累加器A内容为压缩BCD码56 (即01010110B),寄存器R3的内容为 压缩BCD码67(即01100111B),Cy内 容为1。执行下列的指令:

3.3.2算术运算指令

3.3.2算术运算指令

例如: (A)=4EH,(B)=5DH 执行指令: MUL AB 结果: (B)=1CH, (A)=56H,
表示积(BA)=1C56H,OV=1。
§3.3 89C51单片机的指令系统
• 3.3.2
汇编指令格式
INC A INC Rn INC direct INC @Ri INC DPTR
算术运算指令
若(A4~7)>9或CY=1,则(A4~7)+6 → A4~7
注释
调整累加 器内容为 BCD码
1101 0100
*这条指令是对压缩BCD码加法运算时,跟在ADD和ADDC指
令之后,根据A的原始值和PSW的状态,对相加后存放在累
加器中的结果进行十进制调整,完成十进制加法运算功能。
§3.3 89C51单片机的指令系统
(A)=0101 1101
再执行DA A;
因为A中的高四位值为5,小于9,低四位值为13,大于9,所以
内部调整自动进行加06H的操作:
0101 1101 调整+) 0000 0110
0110 0011 BCD:63
• 3.3.2 算术运算指令
8、十进制调整指令(1条)
例如: 设累加器A内容为: 0010 0110B (即为26的BCD码),
寄存器R3的内容为: 0011 0110B (即36的BCD码),
CY内容为1。
执行指令: ADDC A,R3;
DA A;
§3.3 89C51单片机的指令系统
• 3.3.2 算术运算指令
结果: (A)=4FH, Cy=1,Ac=0,P=1 (累加器A中1的个 数) OV=0 (位6、位7同时有进位)
§3.3 89C51单片机的指令系统

第二章基本逻辑指令说明及应用

第二章基本逻辑指令说明及应用

第二章基本逻辑指令说明及应用第二章:基本逻辑指令说明及应用在计算机科学中,逻辑指令是一类用于判断和控制程序流程的指令。

它们基于一组逻辑规则,通过对不同条件的判断来决定下一步的执行路径。

本章将介绍一些常见的基本逻辑指令及其应用。

1. 条件判断指令条件判断指令是最基本的逻辑指令之一。

它通过判断某个条件是否为真来决定程序的执行路径。

常见的条件判断指令包括if 语句和switch语句。

if语句基本格式如下:if (条件) {// 条件为真时执行的代码} else {// 条件为假时执行的代码}switch语句基本格式如下:switch (表达式) {case 值1:// 当表达式的值等于值1时执行的代码break;case 值2:// 当表达式的值等于值2时执行的代码break;...default:// 当表达式的值与所有case都不匹配时执行的代码}这些条件判断指令可以根据不同的条件来执行不同的代码块,从而实现对程序流程的控制。

2. 循环指令循环指令用于重复执行某个代码块,直到满足一定的条件才跳出循环。

常见的循环指令包括for循环、while循环和do-while 循环。

for循环基本格式如下:for (初始化语句; 条件表达式; 更新语句) {// 循环体代码}while循环基本格式如下:while (条件) {// 循环体代码}do-while循环基本格式如下:do {// 循环体代码} while (条件);这些循环指令通过判断条件是否为真来决定是否继续执行循环体代码,从而实现重复执行的功能。

3. 断言指令断言指令用于在程序中插入一些条件判断,如果条件不满足,则在运行时抛出一个异常。

它常用于调试和测试阶段,可以帮助程序员在开发过程中发现问题。

断言指令的基本格式如下:assert 条件;如果条件为假,则程序会抛出一个AssertionError异常,停止继续执行。

总结:基本逻辑指令是在计算机程序中进行条件判断和控制程序流程的重要指令。

S7-300 S7-400语句表(STL)编程手册1-50

S7-300 S7-400语句表(STL)编程手册1-50

1.6
X “异或” ........................................................................................... 1-7
1.7
XN “异或非”........................................................................................ 1-8
传真:+1 (0) 770 740 3699
E-Mail: adsupport@
E-Mail:isd-callcenter@sea.
GMT: +1:00
GMT: -5:00
SIMATIC 热线和授权热线的使用语言一般为德语和英语。
亚洲/澳大利亚(北京) 技术支持和授权
订货号 为 STEP 7 标准软件包 的一部分
为 STEP 7 标准软件包 的一部分
iv
前言
在线帮助
集成在软件中的在线帮助是本手册的补充。
在线帮助的目的是为你提供详细的软件使用帮助。
帮助系统通过多个界面集成在软件中:
• 上下文相关帮助可以提供关于当前的文本信息,例如,一个打开的对话框或 一个激活的窗口。你可以按动 F1 或使用工具栏中的“?”,通过菜单命令 Help > Context-Sensitive Help,打开文本相关的帮助。
14
附录
所有语句表指令一览
A
编程举例
B
索引
安全指南
本手册包括应该遵守的注意事项,以保证人身安全,保护产品和所连接的设备免受损坏。 这些注意事项都使用符号明显警示,并根据严重程度使用下述文字分别说明: 危险 表示若不采取适当的预防措施,将造成死亡、严重的人身伤害或重大的财产损失。

算术及逻辑运算类指令

算术及逻辑运算类指令
调整后,辅助进位位AC表示十进数中个位向十位的进位,进位标志Cy表示十位向百位的进位。
DA指令不影响溢出标志OV,MCS-51指令系统中没有给出十进制的减法调整指令,不能用DA指令 对十进制减法操作的结果进行调整。借助Cy可实现多位BCD数的加法运算。
一.加减指令
2.减法指令
SUBB A,源操作数;带借位减法指令
逻辑与指令
• ANL A,Rn ;A与Rn中的值按位'与',结果送入A中。 • ANL A,direct ;A与direct中的值按位'与',结果送入A中。 • ANL A,@Ri ;A与间址寻址单元@Ri中的值按位'与',结果送入A中。 • ANL A,#data ;A与立即数data按位'与',结果送入A中。 • ANL direct,A ;direct中值与A中的值按位'与',结果送入direct中。 • ANL direct,#data ;direct中的值与立即数data按位'与',结果送入direct中。
在知道了逻辑与指令的功能后,逻辑或和逻辑异或的功能就很简单了。 逻辑或是按位“或”,即有“1”为1,全“0”为0。

10011000 或 01100001 结果 11111001
而异或则是按位“异或”,相同为“0”,相异为“1”。
10011000 异或 01100001 结果 11111001 而所有的或指令,就是将与指仿中的ANL 换成ORL,
谢谢观看!
单片机原理及应用
除法一般会出现小数,但计算机中可没法直接表达小数,它用的是我们小学生还没接触到小数 时用的商和余数的概念,如13/5,其商是2,余数是3。除了以后,商放在A中,余数放在B中。 CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么0指令 (A累加器为操作数)

3.2.3算术运算指令

3.2.3算术运算指令

2.DATA1与DATA2字节单元内容相加,将结果送 至DATA3中。
3.WORD1与WORD2字单元相加,结果送至 WORD3中。
2.带进位的加法指令
目标操作数 源操作数
语法:ADD DST,SRC 功能: ←(DST)+(SRC)+ CY DST
操作数的类型:与加法指令相同。
累加器 通用寄存器 存储器 通用寄存器 通用寄存器 存储器 存储器 通用寄存器 立即数
3.2.3 算术运算指令
授课者:曹玉红
一、算术运算指令
1.数据类型: 无符号二进制数、 有符号二进制数、 压缩BCD数、 非压缩BCD数。
加法指令、减法指令、 乘法指令、除法指令
操作数的类型:
目标操作数 累加器 通用寄存器 立即数 源操作数
2.分类:
存储器
通用寄存器 通用寄存器 存储器 存储器 通用寄存器
1.MOV AL,34H ADD AL,89H (AL)=____ (PSW)=___ 2.MOV AL,98H ADD AL,74H (AL)=____ (PSW)=____ 3.MOV AL,12H ADD AL,78H MOV BL,AL (BL)=______
三、编写指令序列
1.完成AX+BX,将结果送至AX.
(3)加1指令
语法:INC DST
操作数的类型:通用寄存器、存储器
注意:INC 指令不影响CF标志位
思考:
ADD指令与INC指令的区别。
(一)加法指令: 1.语法:ADD DST,SRC 功能描述:DST ←(DST)+(SRC)
知识巩固
一、判断指令正误:
二DD BX,CL 3.ADD AL,23 4.ADD 12H,34H 5.ADD AX,4578H 6.ADD DATA1,DATA2 7.ADD [DI],[SI] 8.ADD DS,AX

3-2算术运算指令

3-2算术运算指令
结果为( ) 结果为(A)=6CH,CY=1,AC=0,OV=1,P=0 , , , ,
带进位加法指令 将源操作数和累加器A的内容以及CY的内容相 加,其结果放在累加器中
ADDC A,Rn ADDC A , direct ADDC A , @Ri ADDC A , #data ;(A) ; (A) ;(A) ;(A) (A)+( Rn)+CY (A)+( direct)+CY (A)+((Ri))+CY (A)+ data+CY
注意: 指令结果影响PSW中的 OV CY P CY 总是被清零 OV 积超过0FFH时置1,否则为0 P 当1的个数为奇数个,P=1;否 则P=0。
3.除法指令 3.除法指令 DIV A B 功能: 功能:(B)(A) 余数 商 (A)/(B)
A中的被除数除以B中的除数,商存入 累加器A中,余数存入寄存器B中。
带进位左环移指令 :RLC CY A7 A0
例:(A)=35H,CY=1 :( ) , 执行指令后的结果: 执行指令后的结果: RL A 1 00110101 • RLC A 01101010 •(A)=6AH
5. 减1指令 将操作数减1 将操作数减1后送回操作数 DEC A ;(A) (A)-1 ) DEC Rn ;(Rn ) ( Rn )-1 DEC direct ;(direct ) (direct)-1 ) DEC @Ri ;(( Ri )) ((Ri))-1
!无 DEC
DPTR指令 指令
以上指令除第一条指令结果影响PSW中 以上指令除第一条指令结果影响PSW中 PSW 的P标志外,其他指令结果均不影响PSW 标志外,其他指令结果均不影响PSW 中的CY、AC、 标志。 中的CY、AC、 OV 、P标志。 CY

第3章 8086的指令系统—3.2.2算术运算指令

第3章 8086的指令系统—3.2.2算术运算指令

影响标志
OF、CF OF、
结果超过16位或32位时, 结果超过16位或32位时, CF(OF)=1
除法运算指令
DIV:无符号除法 DIV:无符号除法 IDIV:有符号除法 IDIV:有符号除法 隐含寄存器
MOV AX,1234H MOV BL,21H DIV BL
被除数默认为(AX)或 被除数默认为(AX)或(DX)(AX) 商默认为(AL)或 商默认为(AL)或(AX) 余数默认为(AH)或 余数默认为(AH)或(DX)
1 CF 0 存储器数据段
低地址
1000H SI
SI+2
41H DCH 86H FEH 57H 34H 23H 12H

MOV DI,2000H AX ADD AX,[DI] ADD AX,[DI] MOV [SI],AX MOV [SI],AX MOV AX,[SI+2] MOV AX,[SI+2] ADC AX,[DI+2] ADC AX,[DI+2] MOV [SI+2],AX MOV [SI+2],AX
比较指令通过减法运算影响状态标志 , 用 比较指令通过减法运算影响 状态标志, 状态标志 于比较两个操作数的大小关系
cmp AX,BX cmp AL,100
CMP指令
不保存结果, 影响标志位,用于转移 不保存结果,只影响标志位,用于转移 判断相等: ZF标志,1 判断相等:用ZF标志,1表示相等 判断大小 判断大小
例题5 例题 符号扩展
MOV AL,64H
机器数) 表示10进制数 进制数100(真值) ;AL=64H (机器数) ,表示 进制数 = (真值)
CBW
扩展, = 将符号 扩展 ,仍然表示100 ;将符号0扩展,AX=0064H,仍然表示

第3章MCS51单片机指令系统1PPT课件

第3章MCS51单片机指令系统1PPT课件

返回目录
43.1 指令系统简介------指令的两种格式
要让计算机工作,就得向计算机发出指令。
指令的格式是机器码指令格式, 如:75905B ,即数字格式。
另一种指令格式,即汇编指令格式, 如:MOV P1, #5BH
2020/9/26
张兴忠制作:
返回目录
5
3.1 指令系统简介
-----MCS-51汇编语言指令格式
地址的存储单元的内容。 →:表示数据传送方向。
2020/9/26
张兴忠制作:
返回目录
15
3.1.4 寻址方式
如何找到参与运算的操作数据或数据所在的 地址称为寻址方式。所以寻址方式是在地址范围 内如何找到所需要的操作数的地址。
MCS-51指令系统的寻址方式主要有立即寻址、 直接寻址、寄存器寻址、寄存器间接寻址、基址 加变址寻址、相对寻址和位寻址等七种。
单片机原理与接口技术
第3章 MCS-51单片机 指令系统
2020/9/26
张兴忠制作:
返回目录
1
本章教学要求
第3章 MCS-51单片机指令系统
熟悉MCS-51单片机指令系统的分类、格式; 熟悉MCS-51指令系统的七种寻址方式; 掌握MCS-51指令系统的数据传送、算术运算、逻
辑运算、转移操作、布尔运算等指令的功能;
1) 指令执行时间短。只需1个机器周期的指令有64 条,2个机器周期的指令有45条,而4个机器周 期的指令仅有2条(既乘法和除法指令)。
2) 指令字节少。单字节指令有49条,双字节指令 有46条,三字节指令有16条。
3) 位操作指令极为丰富,这体现了MCS-51单片机 具有面向控制的特点。
2020/9/26
Rn:表示当前工作寄存器R0~R7中的一个。 @Ri:表示寄存器间接寻址,常作间接寻址的地

单片机学习05(算逻指令)

单片机学习05(算逻指令)

非指令
NOT(非)指令用于对一个操 作数进行逻辑非运算,如果操 作数为1,则结果为0,如果操
作数为0,则结果为1。
NOT指令常用于取反操作, 如翻转一个变量的状态或反
转一个条件。
例如,在程序中判断一个变 量是否不等于某个值,可以 使用NOT指令将等于条件取 反后进行比较。
异或指令
XOR(异或)指令用于将两个操作数进 行逻辑异或运算,如果两个操作数不同, 则结果为1,如果两个操作数相同,则 结果为0。
将目标寄存器中的值除以另一个操作数,并将商存储在目标寄存器中。
DIVA
将目标寄存器中的16位值除以另一个16位操作数,并将商存储在目标寄存器中。
02
逻辑指令
与指令
01
AND(与)指令用于将两个操 作数进行逻辑与运算,如果两个 操作数都为1,则结果为1,否 则结果为0。
02
AND指令常用于组合两个条件 ,只有当两个条件都满足时, 才执行相应的操作。
SUB
从目标寄存器中的值减去另一个 操作数,并将结果存储在目标寄 存器中。
SUBA
从目标寄存器中的值减去另一个 16位操作数,并将结果存储在目 标寄存器中。
乘法指令
MUL
将两个8位操作数相乘,并将结果存 储在目标寄存器中。
MULA
将两个16位操作数相乘,并将结果存 储在目标寄存器中。
除法指令
DIV
单片机学习05(算逻指令)
目录
• 算术指令 • 逻辑指令 • 移位指令 • 程序控制指令
01
算术指令
加法指令
ADD
将两个操作数相加,并将结果存储在目标寄存 器中。
ADDC
将两个操作数相加,并将进位值加到低8位中。

逻辑运算指令

逻辑运算指令

逻辑运算指令逻辑运算指令1.ANL类指令(6条)ANL类是逻辑与指令,其功能是将源操作数作数内容和目的操作数内容按位相“与”,结果存入目的操作数指定单元中,源操作数不变。

ANL A, Rn ;A∩Rn→AANL A, direct ;A∩(direct) →AANL A, @Ri ;A∩(Ri) →AANL A, #data ;A∩data→AANL direct, A ;(direct)∩A→(direct)ANL direct, #data ;(direct)∩data→(direct)例设A=F6H,(30H)=0FH执行 ANL A, 30H ;A∩ (30H) →A操作如下:11110110 (F6H)∩ 00001111 (0FH)注意:按位相“与”00000110 (06H)结果:A=06H, 30H地址内容不变,即(30H)=0FH若执行ANL 30H, A ;(30H)∩ A→(30H)操作同上,结果放在30H地址中,A中内容不变,即(30H)=06H, A=F6H。

2.ORL类指令(6条)ORL类指令是逻辑或指令,其功能是将源操作数作数内容和目的操作数内容按位逻辑“或”,结果存入目的操作数指定单元中,源操作数不变。

ORL A, Rn ;A∪Rn→AORL A,direct ;A∪(direct) →AORL A, @Ri ;A∪(Ri) →AORL A, #data ;A∪data→AORL direct, A ;(direct)∪A→(direct)ORL direct, #data ;(direct)∪data→(direct)“或”运算和“与”运算过程类似,这里不再举例。

3.XRL类指令(6条)XRL类是异或指令,其功能是将两个操作数指定内容按位“异或”,结果存于目的操作数指定单元中。

“异或”原则是相同为“0”,相异为“1”。

XRL A, Rn ;A⊕Rn→AXRL A, direct ;A⊕(direct) →AXRL A, @Ri ;A⊕(Ri) →AXRL A, #data ;A⊕data→AXRL direct, A ;(direct)⊕A →(direct)XRL direct, #data ;(direct)⊕data→(direct)例(50H)=05H执行 XRL 50H, #06H ;(50H)⊕06H→(50H)操作如下:00000101 (05H)⊕ 00000110 (06H)00000011 (03H)结果:(50H)=03H4.循环移位指令(4条)循环移位指令的功能是将累加器A中内容循环位移或者和进位位一起移位。

算术与逻辑运算指令PPT课件

算术与逻辑运算指令PPT课件

第2页/共45页
算术与逻辑运算指令
次高位进位 • 溢出O:当进行8位或16位数的加法或减法运算时,O = 最高位进位(借位) (借位)
• 49H + 6DH = 0100 1001B + 0110 1101B = 1011 0110B • 最高位(8th)无进位,次高位(7th)有进位 • O=1,有溢出
第9页/共45页
加法、减法与比较指令
• 带进位(借位)加法(减法)指令 • 指令形式:ADC/SBB REG/MEM, REG/MEM/imm • 目的操作数=目的操作数±源操作数±C(进位标志位) • 与ADD/SUB指令形式一致 • 实现位宽大于16位的加法/减法 • BX-AX+DX-CX
ADC
LEA SI, DATA2; 装载DATA2 MOV CX, [SI] MOV DX, [SI+2]
ADD AX, CX;计算BX-AX+DX-
CX|DATA1+DATA2
ADC BX, DX
• STACK SEGMENT • DW 128 DUP(0) • ENDS • CODE SEGMENT
LEA SI, RESULT;存储结果 MOV [SI], AX MOV [SI+2], BX ENDS END 代ST码ART
第8页/共45页
加法、减法与比较指令
• 寄存器加法/减法
• 操作数均为寄存器 • ADD/SUB AX, BX; AX = AX ± BX
• 立即数加法/减法
• 源操作数为立即数 • ADD/SUB AX, 100H • ADD/SUB WORD PTR[DI], 100H • 内存与寄存器加法/减法 • ADD/SUB AX, [DI] • ADD/SUB AX, NUM • ADD/SUB AX, [DI+2]

算术与逻辑运算指令

算术与逻辑运算指令

[D]:KnY、KnM、KnS、T、C、D、V,Z
❖ 梯形图
X0
[S1] [S2] [D]
MUL D0 D2 D4
X1
[S1] [S2] [D]
DDIV D10 D12 D14
被乘数 乘数 (D0)×(D2)
积 (D5D4)
被除数
除数

余数
(D11D10)÷(D13D12) (D15D14)···(D17D16)
一、二进制加减运算指令
❖ 说明 ➢ 该指令可以进行连续/脉冲执行方式。
注意连续与脉冲方式的区别: 连续方式:则每个扫描周期都加/减1; 脉冲方式:当X1=ON时,只加/减一次1.
二、二进制乘除运算指令
乘法 FNC22 MUL
减法 FNC23 DIV
❖ 操作数
[S1]、[S2]:K、H、KnX、KnY、KnM、KnS、T、C、D、 V,Z
FNC29 NEG
算术与逻辑运算指令
一、二进制加减运算指令
加法 FNC20 ADD
减法 FNC21 SUB
❖ 操作数
[S1]、[S2]:K、H、KnX、KnY、KnM、KnS、T、C、D、 V,Z
[D]:KnY、KnM、KnS、T、C、D、V,Z
❖ 梯形图
X0
X1
[S1] [S2] [D]
ADD D0 D2 D4
(D10) ∨ (D12) →(D14)
(D14) →(D14)
四、逻辑运算指令
❖ 说明 ➢ 各数据的对应位进行二进制与、或、异或运算。 ➢ 32位数据运算时,助记符为DAND、DOR、DXOR。 ➢ 指令运算规则如下:
逻辑与 1 ∧1= 1 1 ∧0= 0 0 ∧1= 0 0 ∧0= 0

算术与逻辑运算指令具体解释

算术与逻辑运算指令具体解释

算术与逻辑运算指令具体解释算术与逻辑运算指令具体解释前⾔上⼀次解说了数据传送指令,⾹型⼤家肯定对此有了⼀定的认识了.这些简单的汇编指令,却能够将复杂的程序井然有序的运⾏完成,实在是让⼈惊叹.算术与逻辑运算指令算术逻辑运算包含⾮常多种,各级⼤家应该能⾮常快想出来,⽐⽅常见的加减乘除,与或⾮,左移右移等等另⼀个区地址运算符,⼤家可能想不到,可是看完以下这⼀部分之后,就会认为这个取地址运算符是个精妙的指令.先说⼀下各个指令,见下图:这⾥⾯⽐較特别的指令就是leal(取地址指令),其余的指令都是⽐較常规的算术和逻辑运算,相⽐之下⾮常好理解,因此在这⾥咱们重点是介绍leal指令.leal指令leal指令时很奇妙的⼀个指令,他能够去⼀个存储器操作数的地址,⽽且将其赋给⽬的操作数.假设⽤C语⾔其中来相应的话,就相当于&运算符.⽐⽅对于leal 4(%edx,%edx,4),%eax这条指令来说,我们如果%edx寄存器的值为x的话,那么这条指令的作⽤就是将4+x+4x=5x+4赋给%eax寄存器.他和mov指令的差别就在于,如果是movl 4(%edx,%edx,4),%eax这条指令,它的作⽤是将内存地址为5x+4的内村区域的值赋给%eax寄存器,⽽leal指令仅仅是将5x+4这个地址赋给⽬的操作数%eax⽽已,它并不正确寄存器进⾏引⽤的值的计算.为了更好的表⽰这条指令的效果,咱们⽤⼀个图来简单的表⽰这⼀过程.我们如果下图是运⾏指令之前,寄存器和存储器的状态.能够看到,此时在寄存器中,地址为5x+4的区域的值为1000.那么此时若是进⾏movl 4(%edx,%edx,4),%eax操作,⾮常显然,%eax的值应该为1000,也就是下图:可是假设进⾏leal 4(%edx,%edx,4),%eax操作的话,%eax的值就不是1000,由于leal指令不回去取存储器其中的值,因此寄存器%eax的值应该是5x+4.试想⼀下,倘若在地址为5x+4的位置存储的是变量i,那么事实上这条指令就相当于&i操作,也就是C语⾔其中的&取地址操作的汇编级做法.⼀个案例:因为其它的指令⾮常easy,因此咱们就不⼀⼀介绍了,咱们使⽤⼀个⼩程序来做⼀个实例,顺道看⼀下上⾯的算术与逻辑运算指令都是被怎样使⽤的.我们考虑这样⼀个C语⾔程序:int arith(int x, int y , int z){int t1 = x+y;int t2 = z*48;int t3 = t1&0xFFFF;int t4 = t2*t3;return t4;}这⾥⾯包括了加,乘,与运算,我们使⽤GCC -O1 -S sum.c这条命令,然后使⽤cat sum.c这条命令查看,就会得到例如以下的汇编代码:.file "sum.c".text.globl arith.type arith, @functionarith:pushl %ebpmovl %esp, %ebp //以上为栈帧建⽴movl 16(%ebp), %eaxleal (%eax,%eax,2), %edxsall $4, %edxmovl 12(%ebp), %eaxaddl 8(%ebp), %eaxandl $65535, %eaximull %edx, %eax //下⾯为栈帧完毕popl %ebpret.size arith, .-arith.ident "GCC: (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3".section .note.GNU-stack,"",@progbits这⾥⾯还有leal指令,能够看到程序其中并没有取地址&操作,所以这⾥的leal指令不是⽤来取地址的,咱们使⽤⼀个图来演⽰这个程序的执⾏过程.⾸先是栈帧的建⽴过程,栈帧建⽴好以后,寄存器和存储器的状态例如以下:以上便是建⽴好的栈帧,通上⼀次⼀样,栈指针和帧指针都指向了⼀个新的位置,在帧指针偏移量为8,,12,16的地⽅存储着传递进来的參数x,y,z.接下来我们就開始分析,在汇编代码层次,是怎样完毕上述C语⾔程序其中的⼀些列动作的.⾸先是⼀个mov指令,他的作⽤⾮常easy,就是将參数z取⼊寄存器,以下是它的汇编代码以及图⽰:movl 16(%ebp),%eax上⾯的指令⽐較简单,接下来的这条指令就有点特别了,是⼀条leal指令.这⾥的leal指令不是⽤来取地址的,⽽是⽤来进⾏乘法运算的,他的⽬的是将%eax寄存器其中的值乘以3,然后发送⾄%edx寄存器.⽽採⽤的⽅式则是2*x+x的⽅式,这正是我们之前讲过的乘法优化算法,使⽤移位和加法来计算乘法.leal (%eax,%eax,2),%edx上⾯计算3z的⽬的,在接下来的这⼀条指令就看出来了.接下来的⼀条会令是sal左移操作,位数为4,左移4位事实上就相当于16,因此接下来的⼀条指令事实上就相当于将寄存器%edx当值的值乘以16,这事实上刚好是在计算48*z.从这⾥也能够看出来,在运⾏C程序的时候,并不⼀定依照程序其中的顺序去计算.下⾯是sal指令的内容与图⽰sall $4,%edx接下来的指令依旧是简单的取參数y,因此咱们就不解释了,看指令和图⽰movl 12(%ebp),%eax以下的⼀条指令是add加法指令,它是将左边操作数的值加到右边的⽬的操作数.也就是将内存地址为8(%ebp)的值加到%eax寄存器,⽽8(%ebp)这个位置存放的刚好是x,因此这⾥计算的便是x+y的值,⽽结果会存⼊%eax寄存器.以下是指令的内容和图⽰:addl 8(%ebp),%eax接下来是⼀条运算指令and,他计算的则是t1与0xFFFF(⼗进制就是65535)的与运算,t1的值为x+y,此时就存在%eax寄存器.接下来看这条指令和图⽰:andl $65535 ,%eax接下来是最后⼀个计算过程的指令imul乘法指令,它的作⽤也是将左边操作数的值乘到右边的⽬的操作数上.也就是将%edx寄存器的值乘到%eax寄存器上⾯去,⽽%edx此时的值为48*z(也就是t2),⽽%eax的值为(x+y)&0xFFFF(也就是t3),两者相乘得到t4的值,结果将存放在%eax寄存器,⽽且作为返回值返回,下⾯是指令和图⽰:imull %edx,%eax⾄此,我们整个计算过程就结束了,当中⽤到了⼀些算术与逻辑运算指令,事实上他们并没有什么难度,图例已经说得⾮常清楚了.最后则是栈帧的完毕部分,下⾯为当前帧释放后的状态:不知道打击注意到了没有,每次在%ebp偏移量为4的位置都是空着的,⽽參数都在8,12,16这种位置,难道偏移量为4的位置是空的吗?当然不是,地址不会跳着来,事实上他存储的是返回地址,这⼀点在此不做过多的说明,以后遇到了再具体的说明.⼩⼩的结⼀下本章内容是认识⼀下⼀些常见的算术和逻辑运算指令.事实上没有什么难度.。

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

ADC指令用于多字节加法运算中
例:两个无符号数相加:2C56F8AC+309E47BE=?
设被加数、加数分别存放在BUFFER1及BUFFER2开 始的两个存储区内,结果放回BUFFER1存储区。
MOV AX,BUFFER2 ADD BUFFER1,AX ;低字相加 MOV AX,BUFFER2+2 ADC BUFFER1+2 ,AX ;高字相加,包括低字的进位
XOR DH,18H
总结:
•AND指令可用于复位某些位(同0相与),不影响
其他位:将BL中D3和D0位清0,其他位不变
and bl,1111 0110B
•OR指令可用于置位某些位(同1相或),不影响其
他位:将BL中D3和D0位置1,其他位不变
or bl, 0000 1001B
•XOR指令可用于求反某些位(同1相异或),不影
3.2.2 算术运算指令
算术运算

对数据进行加减乘除


基本的数据处理方法
加减运算有“和”或“差”的结果外,还有进借
位、溢出等状态标志,也是结果的一部分
注意算术运算类指令对标志的影响
数据传送类指令不影响(=不改变)状态标志 加法和减法指令根据结果按定义改变状态标志
1 加法指令
加法指令
ADD 带进位加法指令 ADC 增量指令 INC
MINUS:
类似CMP
2.移位指令
(1)非循环移位指令
算术左移指令 算术右移指令 逻辑左移指令 逻辑右移指令 SAL(Shift SAR(Shift SHL(Shift SHR(Shift
Arithmetic Left)
Arithmetic Right) Left)
Right)
这4条指令的格式相同,以SAL为例: SAL mem/reg, CL 1 ;移位位数大于1时 ;移位位数等于1时
响其他位:将BL中D3和D0位求反,其他不变 xor bl, 0000 1001B
(5) 测试指令TEST
操作与AND指令类似,但不将”与”的结果送 回,只影响标志位。
TEST指令常用于位测试,与条件转移指令一起用。
例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;转MINUS ……
BUFFER1 BUFFER1+2
ACH F8H 56H
被 加 数
CLC MOV ADC MOV ADC
AX,BUFFER2 BUFFER1,AX AX,BUFFER2+2 BUFFER1+2 ,AX
2CH
数 据 段
BUFFER2
BUFFER2+2
BEH 47H 9EH 30H
加 数
多字节加法示意图
(3) 减1指令DEC
作用类似于C语言中的”--”操作符。
格式:DEC opr 操作:opr←(opr)-1
指令例子: DEC CL DEC BYTE PTR[ DI+2 ] DEC SI
类似INC指令
(4)求补指令 NEG

对操作数执行求补运算,即用零减去操作数 NEG reg/mem ; opr← 0-opr 对标志的影响与用零作减法的SUB指令一样 可用于求补码或由补码求其绝对值
例1:AND AL, 0FH 已知执行前:(AL)=35H 执行后:(AL)=? AND DX, 0FF00H ;分离DX内容的高8位 AND AL, 0F0H ;分离AL内容的高4位
例2:测试AL的bit7,bit5,bit2是否都是1。 AND AL, 1010 0100B CMP AL, 1010 0100B JZ YES <not all 1> … … YES:

(1) (不考虑借位的)减法指令SUB 格式: SUB dst, src 操作: dst←(dst)-(src)
指令例子: SUB AL,60H SUB [BX+20H],DX SUB AX,CX
类似ADD指令
(2) 带借位的减法指令SBB
SBB指令主要用于多字节的减法。 格式: SBB dst, src 操作: dst←(dst)-(src)-(CF) 类似ADC指令 指令例子: SBB AX,CX SBB WORD PTR[SI],2080H SBB [SI] , DX
例:已知 CX=0011 0101B =35H NOT CX ;CX=1100 1010B=0CAH
(4) 逻辑”异或” XOR
格式:XOR dst, src ;按位进行”异或”操作 用途:对reg清零(自身异或) 把reg/mem的某几位变反(与’1’异或)
例1:把AX寄存器清零。
① MOV AX,0 ③ AND AX,0 例2:把DH的bit4,3变反。 ② XOR AX,AX ④ SUB AX,AX
(5) 比较指令CMP
格式: CMP dst, src ; (dst)-(src) CMP也是执行两个操作数相减,但结果不送 目标操作数,其结果只反映在标志位上。 指令例子: CMP AL,0AH CMP CX,SI CMP DI,[BX+03]
SUB与CMP?
根据标志状态获知两个操作数的大小关 系 给条件转移等指令使用其形成的状态标 志

(1)无符号乘法指令
格式: MUL ops
; (AX)←(AX)*(ops)(字节相乘) ;(DX)(AX)← (AX)*(ops) (字相乘)
MUL是将源操作数和累加器中的数都作为无符号 数相乘,乘积存放在AX或DX,AX中。其结果只影响 CF和OF。 指令例子: MUL BL MUL CX
(2)有符号乘法指令

mov ax,0ff64h neg al ; AX=FF9CH, OF=0,SF=1,ZF=0,PF=1,CF=1 sub al,9dh ;AX=FFFFH, OF=0,SF=1,ZF=0,PF=1,CF=1 neg ax ;AX=0001H, OF=0,SF=0,ZF=0,PF=0,CF=1 dec al ;AX=0000H, OF=0,SF=0,ZF=1,PF=1,CF=1 neg ax ;AX=0000H, OF=0,SF=0,ZF=1,PF=1,CF=0
3.2.3 逻辑运算和位移指令
1.逻辑运算指令
● 运算规则:按位操作,无进/借位
● 对标志位的影响(除NOT指令外):
CF OF SF ZF PF AF
0 0 * * * 无定义
根据运算结果设置
(1) 逻辑”与” AND
格式:AND dst, src ;按位进行 “与”操作 用途:保留操作数的某几位,其他位清零。
格式: IMUL ops
; (AX)←(AX)*(ops)(字节相乘)
;(DX)(AX)← (AX)*(ops)
(字相乘)
IMUL是将源操作数和累加器中的数都作为符号数相乘, 乘积存放在AX或DX、AX中。其结果只影响CF和OF。
4.除法运算指令
DIV 无符号除法指令 IDIV 有符号除法指令 CBW 字节转换成字指令 CWD 字转换成双字指令
非循环移位指令功能示意图
最高位 CF (a)算术/逻辑左移SAL/SHL 最高位 CF 最低位 CF 最高位 最低位 最低位 0
0
(b)算术右移SAR (c)逻辑右移SHR
OR
格式:OR dst, src ;按位进行”或”操作 用途:对操作数的某几位置1; 对两操作数进行组合。 例1:把AL的第5位置为1。 OR AL, 00100000B
(3) 逻辑“非”(取反) NOT
格式:NOT mem/reg ;按位取反
按位取反,原来是“ 0 ”的位变为 “1”;原来是“1”的位变为“0”
(3)字节转换成字指令
格式:CBW 功能:用AL的符号位去填充AH,即:当AL为 正数,则AH=0,否则,AH=0FFH。 标志位:不影响任何标志位。


在作有符号除法时,有时需要把被除数转换成位数更长的数据 类型。
(4)字转换成双字指令
格式:CWD 功能:用AX的符号位去填充DX。 标志位:不影响任何标志位 。
...
(3) 加1指令INC(单操作数指令)
格式:INC reg/mem 功能:类似于C语言中的++操作: 对指定的操作数加1 例: INC AL INC SI INC BYTE PTR [BX+4]
注:本指令不影响CF标志,影响其他状态位

2. 减法指令
减法指令 SUB 带借位减法指令 SBB 减量指令 DEC 求补指令 NEG 比较指令 CMP 除DEC不影响CF标志外 其他按定义影响全部状态标志位
除INC不影响进位标志CF外
其他指令按定义影响全部状态标志位
按照运算结果相应设置各个状态标志为0 或为1
PSW寄存器
状态标志 标 志 位 功 能 控制标志
CF PF AF ZF SF OF
进位标志 奇偶标志 辅助进位标志 零标志 符号标志 溢出标志
TF 跟踪标志 IF 中断标志 DF 方向标志
ADD指令对6个状态标志均产生影响
例:已知(BX)=D75FH 指令 ADD BX,8046H 执行后,状态标志各是多少? D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110 1 1 11 11 0110 0111 1010 0101
结果: (BX)= 67A5H
(1) ADD:不带进位的加法指令
格式:ADD ADD 实例: ADD ADD ADD ADD

mem/reg,data mem/reg1, reg2/mem AL,30H [DI],200H SI,[BX+20H] CX,SI
相关文档
最新文档