不带进位与或运算指令的实现
单片机教程11:单片机算术运算指令
单⽚机教程11:单⽚机算术运算指令不带进位位的单⽚机加法指令ADD A,#DATA ;例:ADD A,#10HADD A,direct ;例:ADD A,10HADD A,Rn ;例:ADD A,R7ADD A,@Ri ;例:ADD A,@R0⽤途:将A中的值与其后⾯的值相加,最终结果否是回到A中。
例:MOV A,#30HADD A,#10H则执⾏完本条指令后,A中的值为40H。
下⾯的题⽬⾃⾏练习MOV 34H,#10HMOV R0,#13HMOV A,34HADD A,R0MOV R1,#34HADD A,@R1带进位位的加法指令ADDC A,RnADDC A,directADDC A,@RiADDC A,#data⽤途:将A中的值和其后⾯的值相加,并且加上进位位C中的值。
说明:由于51单⽚机是⼀种8位机,所以只能做8位的数学运算,但8位运算的范围只有0-255,这在实际⼯作中是不够的,因此就要进⾏扩展,⼀般是将2个8位的数学运算合起来,成为⼀个16位的运算,这样,能表达的数的范围就能达到0-65535。
如何合并呢?其实很简单,让我们看⼀个10进制数的例程:66+78。
这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做6+8(低位),然后再做6+7,这是⾼位。
做了两次加法,只是我们做的时候并没有刻意分成两次加法来做罢了,或者说我们并没有意识到我们做了两次加法。
之所以要分成两次来做,是因为这两个数超过了⼀位数所能表达的范置(0-9)。
在做低位时产⽣了进位,我们做的时候是在适当的位置点⼀下,然后在做⾼位加法是将这⼀点加进去。
那么计算机中做16位加法时同样如此,先做低8位的,如果两数相加产⽣了进位,也要“点⼀下”做个标记,这个标记就是进位位C,在PSW中。
在进⾏⾼位加法是将这个C加进去。
例:1067H+10A0H,先做67H+A0H=107H,⽽107H显然超过了0FFH,因此最终保存在A 中的是7,⽽1则到了PSW中的CY位了,换⾔之,CY就相当于是100H。
第3章(09.2)
4.加1指令(5条) INC INC INC INC INC A Rn direct @Ri DPTR
指令功能:使操作数所指定的单元的内容加1 例:已知A=12H,R0=33H,(21H)=32H,(34H)=22H, DPTR=1234H,连续执行下面的指令。 说明:除了“INC A”影响奇偶标志位外,其余操作均 INC A 不影响PSW;“INC DPTR”是一条16位加1指令,这条 INC R0 指令在加1过程中,若低8位有进位可直接向高8位进位, INC 21H 不需要通过进位位Cy传送。 INC @R0 INC DPTR
4.清0与取反指令(2条) 取反: CPL A 5.循环移位指令(4条) RL A RR A RLC A RRC A 清零: C0
A.0 A.7 A.7 A.0 A.0
CY
CY
后两条指令,影响P标志和CY。
综合举例: 例1:把累加器A中的低4位状态,通过P1口的高4 位输出, P1口的低4位状态不变。 ANL A,#0FH ;屏蔽A的高4位 SWAP A ANL P1,#0FH ;清P1口高4位 ORL P1,A ;P1口高4位输出A的低4位; 例2:编制程序将存放在片外RAM的30H单元中某 数的低4位取反,高2位置1,其余2位清0。 例3:编制程序求片内RAM的20H,21H,22H单元 中的数的补码,并将结果仍放回到20H,21H, 22H中。
(40H)= (41H)=
H H
(50H) = (51H)=
H H
A= R0=
H H
5.减1指令(4条) DEC DEC DEC DEC A Rn direct @Ri
指令功能:使操作数所指定的单元的内容减1
说明:减1指令中没有DPTR减1指令.
带进位运算指令的实现
带进位运算指令的实现1 实验题目基本模型机的设计--------带进位运算指令的实现2 实验目的及原理2.1 实验目的通过对一个简单计算机的设计,对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与调试等过程有更深的了解,加深对理论课程的理解。
熟悉HKCPT操作平台,并通过使用软件HKCPT,了解程序编译、加载的过程。
同时,培养动手能力,独立解决问题的能力。
2.2 实验原理在各个模块试验中,各模块的控制信号都由试验者手动模拟产生。
而在真正的试验系统中,模型机的运行是在微程序的控制下进行的,可以实现特定指令的功能。
在本试验平台中,模型机从内存中取出、解释、执行机器指令都将由微指令和与之相配合的时序来完成,即一条机器指令对应一个微程序。
3 模型机的逻辑框图下图中包括运算器、存储器、微控器、输入设备、输出设备以及寄存器。
这些部件的动作控制信号都有微控器根据微指令产生。
需要特别说明的是由机器指令构成的程序存放在存储器中,而每条机器指令对应的微程序存储在微控器中的存储器中。
4设计指令系统,并分析指令格式由于实验平台内采用的是8位数据总线和8位地址总线方式,在设计指令系统时,应考虑有哪几种类型的指令,哪几种寻址方式和编码方式。
4.1指令类型①算术/逻辑运算类指令:例如,加法、减法、取反、逻辑运算:ADD A, Ri , SUB A, Ri②移位操作类指令:例如,带进位或不带进位的移位指令:RRC A, RR A③数据传输类指令:例如,CPU内部寄存器之间数据传递:MOV A, Ri , MOV Ri,A④程序跳转指令:跳转指令分为无条件跳转和有条件跳转指令。
JMP addrJZ addr⑤存储器操作类指令:存储器读/写指令。
例如,LDA addr4.2指令格式分析Intel 8086/8088指令字较短,所以指令采用变长指令字结构。
指令格式包括单指令、双字长指令、三字长指令等多种。
单片机汇编程序算术逻辑运算
单元中内容减1。
该组指令的操作不影响PSW。
2021/5/
单片机原理B及a接ck口技术
8、 十进制调整指令(1条)
汇编指令格式 DA A;
机器码格式 1101 0100
操作
若 (A0-3)>9或AC=1,则(A0-3)+6→A0-3 同时,若(A4-7)>9或CY=1,则(A4-7)+6→A4-7
SUBB A,direct;1001 0101 (A) -CY -(direct) →A direct
SUBB A,@Ri; 1001 011i (A) -CY -((Ri)) →A
SUBB A, #data; 1001 0100 (A) -CY -#data →A data
注释 将工作寄存器内容与CY及 累加器A中的数相减, “差”存放于累加器A中 将内部RAM单元内容与 CY及累加器A中的数相减, “差”存放于累加器A中 将间接寻址(Ri为R0或R1)
结果为:(A)=74H 标志位为:Cy=0 AC=0 OV=1 P=0
2021/5/
单片机原理B及a接ck口技术
4、 乘法指令(1条)
汇编指令格式
机器码格式
操作
MUL AB
;
1010 0100 (A)×(B)→B15-8A7-0
该指令将累加器A和寄存器B中两个无符号数相乘,所得160111B(即67的BCD码),CY内容为1。求执行下列
指令后的结果。
ADDC A,R3;
DA A;
解:先执行ADDC A,R3; (A): 0101 0110 BCD:56
(R3): 0110 0111 BCD:67 (+)(CY): 0000 0001 BCD:01
二、算术逻辑运算指令
二、算术运算指令
• • • • • • • •
MOV ADD DA MOV MOV ADDC DA MOV
A,50H A,60H A 40H,A A,51H A,61H A 41H,A
;(A)←(50H) ;(A)←(A)+(60H) ;BCD码修正
二、算术运算指令 ⑷加1指令
• • • • • INC INC INC INC INC A Rn direct @Ri DPTR ;(A)←(A)+1 ;(Rn)←(Rn)+1 ;(direct)←(direct)+1 ;((Ri))←((Ri))+1 ;(DPTR)←(DPTR)+1
• 功能是将累加器A内容减去源地址单元内容,再减去 进位位Cy的内容,结果放入累加器A中 • 问题:如何应用此指令对两个单字节数相减?
二、算术运算指令
•主要用于多字节数的减法 如果要进行单字节或多字节数低8位数的减法运算,应先 清除进位位Cy。 • 对于PSW的影响CY、AC、OV、P • 例3-15:设累加器A的内容为0C9H,寄存器R2内容为 54H,进位标志Cy=1,执行指令:SUBB A,R2
二、算术运算指令
⑵减1 指令 • • • • DEC DEC DEC DEC A ;(A)←(A)-1 Rn ;(Rn)←(Rn)-1 direct ;(direct)←(diect)-1 @Ri ;((Ri))←((Ri))-1
• 注:执行结果只影响PSW的奇偶校验位P (以A为操 作数时 )
二、算术运算指令
二、算术运算指令
• (3) 二-十进制调正指令(BCD码修正指令) DA A ; • 若[(A3~0)>9]或[(AC)=1] 则(A3~0)←(A3~0)+06H; 若[(A7~4)>9]或[(Cy)=1] 则(A7~4)←(A7~4)+60H 注: • 本指令不能单独使用,只能用在加法指令之后 • 本指令不能直接用于十进制数减法的调正 • 本指令不能简单的把累加器A中的16进制数变换成 BCD码
算术运算类指令
算术运算类指令
1.加法指令
ADD ⽬的操作数, 源操作数
ADC ⽬的操作数,源操作数
INC ⽬的操作数
ADD不带进位的加法指令,ADC带进位的加法指令,影响CF,INC增量指令,操作数⾃加⼀
2.减法指令
SUB ⽬的操作数,源操作数
SBB ⽬的操作数,源操作数
DEC ⽬的操作数
NEG ⽬的操作数
CMP ⽬的操作数,源操作数
SUB不带借位的减法指令,SBB带借位的减法指令,影响标志位,DEC⾃减⼀,NEG是求补指令,功能是将⽬的操作数的内容取补码,再将结果送回操作数,CMP⽐较指令,功能是⽬的操作数减去源操作数,不送回结果,影响标志位
3.乘法指令
MUL 源操作数
IMUL 源操作数
MUL是⽆符号数相乘,IMUL是有符号数相乘。
功能是AL乘以源操作数,16位乘积存放在AX中,或AX乘以源操作数,32位乘积存放在DX,AX
4.除法指令
DIV 源操作数
IDIV 源操作数
CBW
CWD
DIV是⽆符号除法,IDIV是有符号数除法。
功能是DX和AX表⽰的32位除以源操作数,得到的商放在AX中,16位的余数DX中。
或AX表⽰的16位数除以8位的源操作数,得到8位商放在AL中,8位余数放在AH中,CBW将字节扩展成字的指令,即将AL寄存器中的符号位扩展到AH 中。
CWD指令将AX中的被除数扩展成双字,即把AX中的符号位扩展到DX中
5.BCD码运算的调整指令
DAA AAA DAS AAS AAM AAD
⼆进制数实现⼗进制加减法。
计算机组成原理运算器实验
实验一运算器实验计算机的一个最主要的功能就是处理各种算术和逻辑运算,这个功能要由CPU中的运算器来完成,运算器也称作算术逻辑部件ALU。
本章首先安排一个基本的运算器实验,了解运算器的基本结构,然后再设计一个加法器和一个乘法器。
一、实验目的(1) 了解运算器的组成结构。
(2) 掌握运算器的工作原理。
二、实验设备PC机一台,TD-CMA实验系统一套。
三、实验原理本实验的原理如图1-1所示。
运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A 和暂存器B,三个部件同时接受来自A和B的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如ARM),各部件对操作数进行何种运算由控制信号S3…S0和CN来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为ALU的输出。
如果是影响进位的运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。
ALU中所有模块集成在一片CPLD中。
逻辑运算部件由逻辑门构成,较为简单,而后面又有专门的算术运算部件设计实验,在此对这两个部件不再赘述。
移位运算采用的是桶形移位器,一般采用交叉开关矩阵来实现,交叉开关的原理如图1-2所示。
图中显示的是一个4×4的矩阵(系统中是一个8×8的矩阵)。
每一个输入都通过开关与一个输出相连,把沿对角线的开关导通,就可实现移位功能,即:(1) 对于逻辑左移或逻辑右移功能,将一条对角线的开关导通,这将所有的输入位与所使用的输出分别相连,而没有同任何输入相连的则输出连接0。
(2) 对于循环右移功能,右移对角线同互补的左移对角线一起激活。
例如,在4位矩阵中使用‘右1’和‘左3’对角线来实现右循环1位。
(3) 对于未连接的输出位,移位时使用符号扩展或是0填充,具体由相应的指令控制。
使用另外的逻辑进行移位总量译码和符号判别。
D[7..0]IN[7..0]图1-1 运算器原理图运算器部件由一片CPLD实现。
指令的种类
3.堆栈操作指令
4.输入/输出指令
★统一编址 当内存与接口地址统一编址时,内存与接口同属于一个 地址空间,用于内存的指令原则上均可用于接口。 ★独立编址 当内存与接口地址采用独立编址时,它们的地址是相互 独立的。
指令的种类
1.2 算术运算类指令
格式
MOVS/MOVSB/MOVSW
串 操
CMPS/CMPSB/CMPSW
作
SCAS/SCASB/SCASW
指
令
LODS/LODSB/LODSW
STOS/STOSB/STOSW
名称 串传送指令 串比较指令 串扫描或串搜索指令 串装入指令 字串存储指令
指令的种类
1.8 位操作指令
位操作指令是对某一位进行操作的指令,也就是对一个字 (字节)中的某一位进行操作的指令。
格式
操作
标
HLT
使处理器处于停止状态, 不执行指令
志
位 WAIT 使处理器处于等待状态
操 作 指
LOCK
封锁总线指令,可放在 任一指令前作为前缀
令
NOP
空操作指令,处理器什 么操作也不做
指令的种类
1.7 串操作指令
在存储器中存放的一串字或字节可以是二进制数,也可以是 BCD码或ASCⅡ码。它们存放在某一个连续的内存区中,若对它 们的每字或字节均进行同样的操作,该操作就称串操作。
XOR指令对两个操作数进 行按位异或运算。
指令的种类
1.4 移位、循环类指令
CF
位移指令SAL/SHL操作示意图
CF
SAR操作示意图
CF 0
SHR操作示意图
指令的种类
汇编语言设计-算术运算指令
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
说明:0 – OPRD 又相当于: ①、FFH-OPRD+1 (字节操作)或
②、FFFFH-OPRD+1(字操作)。即将OPRD内容变反加1
例:若(AL)=13H 0000 0000 执行 NEG AL – 0001 0011
0000 0110 + 1111 1100 1← 0000 0010
6 + 252
258>255
+6 + (–4)
+2
CF=1 溢出
OF=0 不溢出
ⅲ、无符号数不溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
0000 1000 + 0111 1011
1000 0011
8 + 123
131 CF=0 无溢出
2、带进位位的加法指令ADC ADC dest , src ; dest←dest+src+CF
ADC主要用于多字节运算,ADC对标志位的影响同ADD。 例:计算 1234FEDCH+33128765H 分别存于数据段指
定的区域中,低位在前,高位在后,相加后其和存入前一个双 字所在的区域中。 (SI)→1000H DCH (41H)
+ 39H 0011 1001
0110 1110
则(AL)=6EH,低4位为非法码,故需调整。
4、组合十进制加法调整指令DAA
(BCD码的加法十进制调整指令)
格式:DAA
功能:对组合BCD码相加的结果进行调整,使结果仍为 组合的BCD码。
计算机组成原理运算器实验报告
计算机组成原理运算器实验报告计算机组成原理实验⼀运算器实验⼀、实验⽬的:1、掌握简单运算器的数据传输⽅式。
2、验证运算功能发⽣器(74LS181)及进位控制的组合功能。
⼆、实验要求:完成不带进位及带进位算数运算实验、逻辑运算实验,了解算数逻辑运算单元的运⽤。
三、实验原理:74LS181是4位算术逻辑运算器,⽤两个74LS181并联可以实现8位运算,为了实现双操作的运算,ALU 的输⼊端分别由两个锁存器DR1,DR2锁存数据。
数据显⽰灯和数据总线相连接,⽤来显⽰数据总线上的内容。
由于实验电路中的时序信号均已连接⾄W /RUIT相应的时序信号引出端,只要微动开关,即可获得实验所需的单脉冲。
四、实验连接:1.⼋位运算器控制信号连接:S3,S2,S1,S0,M ,/CN ,LDDR1,LDDR2,LDCZY ,/SW-B ,/ALU-B ,Cn+4 Cn+4I2.完成连接并检查⽆误后接通电源。
五、实验仪器状态设定:在闪动的“P.”状态下按动“增址”命令键,使LED 显⽰器⾃左向右第⼀位显⽰提⽰符“H ”,表⽰本装置已进⼊⼿动单元实验状态。
五、实验项⽬:(⼀)算数运算实验拨动⼆进制数据开关向DR1和DR2寄存器置数(灯亮为1,灯灭为0)。
步骤如下:[CBA=001] [LDDR1=1] [LDDR1=0][LDDR2=0] [LDDR2=1]数据开关(01100101)三态门寄存器DR1(01100101)数据开关(10100111)寄存器DR2 (10100111)[“按STEP”] [“按STEP”] 然后检查数据:1.关闭数据输⼊三态门(CBA=000)2.打开ALU输出三态门(CBA=010)3.当置S3,S2,S1,S0,M为11111时,总线指⽰灯显⽰DR1中的数4.当置S3,S2,S1,S0,M为10101时,总线指⽰灯显⽰DR2中的数算数运算(不带进位)实验:置CBA=010,S3,S2,S1,S0,M,/CN为100101,LDCZY=0,则数据总线指⽰灯显⽰00001100(0CH)(⼆)进位控制实验(1)进位标志清零CBA=000 置S3,S2,S1,S0,M为00000 置/CN为0,LDCZY为1 按STEP (2)向DR1和DR2置数(同上)(3)验证进位运算及进位锁存功能,使/CN=1,LDCZY=1,来进⾏算数运算。
计算机组成原理全部实验
(2)LDDR1:控制把总线上的数据打入运算暂存器DR1,高电平有效。
(3)LDDR2:控制把总线上的数据打入运算暂存器DR2,高电平有效。
(4)S3,S2,S1,S0:确定执行哪一种算术运算或逻辑运算(运算功能表见附录1或者课本第49页)。
(5)M:M=0执行算术操作;M=1执行逻辑操作。
X
X
1
0
0
1
AAH
AAH
↑
向DR1送数
X X X X
X
X
0
1
0
1
55H
55H
↑
向DR2送数
0 0 0 0
0
1
0
0
1
0
XXH
AAH
算术运算
0 0 0 0
0
0
0
0
1
0
XXH
ABH
算术运算
0 0 0 0
1
X
0
0
1
0
XXH
55H
逻辑运算
0 0 0 1
0
1
0
0
1
0
XXH
FFH
算术运算
0 0 0 1
0
0
0
0
1
0
5.不管是手动方式还是系统方式,31个按钮开关初始状态应为“1”即对应的指示灯处于发光的状态。
6.位于UPC UNIT区的J1跳线开关应在右侧状态。
说明:开关AL-BUS;SW-BUS标识符应为“/AL-BUS;/SW-BUS”
注意事项:
AL-BUS;SW-BUS不能同时按下;因为同时按下会发生总线冲突,损坏器件。
1
汇编语言设计-算术运算指令
N
传完否?
JNZ AGAIN ;CX≠0,循环
Y
结束
8086算术运算指令可用的BCD码有两种:
ⅰ、组合BCD码:一个字节表示2位BCD码
ⅱ、非组合BCD码:一个字节只用低4位表示1位BCD 码, 高4位为0(无意义)。
例:设(AL)=35,(BL)=39 35H 0011 0101
执行 ADD AL,BL
JNS NEXT
;若SF=0,则(AX)>(BX),转NEXT
XCHG AX,BX ;否则交换
NEXT:HLT
Ⅱ、两负数比较,即A<0,B<0:两负数相减,结果也不会溢出,
仍可用符号标志,若SF=0,则A>B;反之若SF=1,则A<B。
Ⅲ、两异号数比较。当A>0,B<0时,当然的结果应该是A>B,
而且有SF=0。
格式:ADD dest,src ;dest←dest+src
功能:将源操作数与目的操作数相加,将结果送回目的操 作数。指令执行后对各状态标志均产生影响。
例:ADD CX,0F0F0H 设指令执行前(CX)=5463H
0101 0100 0110 0011
思考:
+ 1111 0000 1111 0000
LEA SI,BUF1 ;SI指向BUF1 LEA DI,BUF2 ;DI指向BUF2
取数 传送
MOV CX,100 ;CX放计数初值
AGAIN:MOV AL,[SI] ;取一字节数 MOV [DI],AL ;传送一字节数
修改地址指针 修改计数器
INC SI INC DI DEC CX
;修改地址指针 ;修改计数初值
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
计算机组成原理实验指导 (1)
计算机组成原理实验指导实验一运算器部件实验一、实验目的⒈掌握简单运算器的数据传输方式。
⒉验证运算功能发生器(74LS181)及进位控制的组合功能。
二、实验要求完成不带进位及带进位算术运算实验、逻辑运算实验,了解算术逻辑运算单元的运用。
三、实验原理实验中所用的运算器数据通路如图7-1-1所示。
其中运算器由两片74LS181以并/串形式构成8位字长的ALU。
运算器的输出经过一个三态门(74LS245)以8芯扁平线方式和数据总线相连,运算器的2个数据输入端分别由二个锁存器(74LS273)锁存,锁存器的输入亦以8芯扁平线方式与数据总线相连,数据开关(INPUT DEVICE)用来给出参与运算的数据,经一三态门(74LS245)以8芯扁平线方式和数据总线相连,数据显示灯(BUS UNIT)已和数据总线相连,用来显示数据总线内容。
图7-1-1运算器电原理图图7-1-1中T2、T4为时序电路产生的节拍脉冲信号,通过连接时序启停单元时钟信号“”来获得,剩余均为电平控制信号。
进行实验时,首先按动位于本实验装置右中侧的复位按钮使系统进入初始待令状态,在LED显示器闪动位出现“P.”的状态下,按【增址】命令键使LED显示器自左向右第4位切换到提示符“L”,表示本装置已进入手动单元实验状态,在该状态下按动【单步】命令键,即可获得实验所需的单脉冲信号,而LDDR1、LDDR2、ALU-B、SW-B、S3、S2、S1、S0、CN、M各电平控制信号用位于LED显示器上方的26位二进制开关来模拟,均为高电平有效。
四、实验连线图7-1-2实验连线示意图按图7-1-2所示,连接实验电路:①总线接口连接:用8芯扁平线连接图7-1-2中所有标明“”或“”图案的总线接口。
②控制线与时钟信号“”连接:用双头实验导线连接图7-1-2中所有标明“”或“”图案的插孔(注:Dais-CMH的时钟信号已作内部连接)。
五、实验系统工作状态设定在闪动的“P.”状态下按动【增址】命令键,使LED显示器自左向右第4位显示提示符“L”,表示本装置已进入手动单元实验状态。
常见51单片机指令及详解
常见51单片机指令及详解数据传递类指令(1)以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。
第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。
第四条指令是将立即数data送到A中。
下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。
MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。
MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。
如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。
MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。
(2)以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
(3)以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H(4)以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H(5)十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。
其中高8位送入DPH,低8位送入DPL。
例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。
汇编逻辑运算类指令
汇编逻辑运算类指令
汇编语言中的逻辑运算类指令包括与、或、非和异或等操作。
这些指令用于对数据进行逻辑运算,常用于处理位操作和逻辑判断。
首先是“与”操作,通常用AND指令表示,在大多数汇编语言
中是用关键字“AND”来表示。
AND指令用于将两个操作数的对应位
进行逻辑与操作,结果为1的位保留,结果为0的位清零。
其次是“或”操作,通常用OR指令表示,在汇编语言中是用关
键字“OR”来表示。
OR指令用于将两个操作数的对应位进行逻辑或
操作,只要有一个操作数的对应位为1,结果位就为1。
接下来是“非”操作,通常用NOT指令表示,在汇编语言中是
用关键字“NOT”来表示。
NOT指令用于对操作数的每一位进行取反
操作,即1变为0,0变为1。
最后是“异或”操作,通常用XOR指令表示,在汇编语言中是
用关键字“XOR”来表示。
XOR指令用于将两个操作数的对应位进行
异或操作,即相同则结果为0,不同则结果为1。
这些逻辑运算指令在汇编语言中被广泛应用于各种数据处理和控制流程中,能够对数据进行精确的位操作和逻辑判断,是编程中不可或缺的重要指令。
通过合理的组合和应用,可以实现复杂的逻辑运算和数据处理功能。
单片机开发基础(试卷编号1191)
单片机开发基础(试卷编号1191)1.[单选题]有语句“unsigned char mm[]={0x01,0x02,0x03,0x04};”,则数组元素mm[3]的值为( )。
A)0x01B)0x02C)0x03D)0x04答案:D解析:2.[单选题]以下对二维数组的定义中正确的是( )。
A)intB)intC)intD)int答案:A解析:3.[单选题]用AT89S51的串行口扩展并行I/O口时串行接口工作方式选择()。
A)方式0B)方式1C)方式2D)方式3答案:A解析:4.[单选题]若PSW.4=0,PSW.3=1,要想把寄存器R0的内容入栈,应使用()指令。
A)PUSH R0B)PUSH @R0C)PUSH 00HD)PUSH 08H答案:A解析:5.[单选题]51单片机的计数器是()位的计数器。
A)1B)2C)8解析:6.[单选题]AT89S51单片机读取片外的数据存储器数据时,采用的指令为( )A)MOVA, @R1B)MOVCA, @A + DPTRC)MOVA, R4D)MOVXA, @ DPTR答案:D解析:7.[单选题]所谓CPU是指( )A)运算器和控制器B)运算器和存储器C)输入输出设备D)控制器和存储器答案:A解析:8.[单选题]若PSW.4=0,PSW.3=1,要想把寄存器R0的内容入栈,应使用( )指令。
A)PUSH R0B)PUSH @R0C)PUSH 00HD)PUSH 08H答案:D解析:9.[单选题]指令“ANL 40H,#40H”的含义是()A)常数40H和地址40H中数进行“位或”操作,结果在地址40H中B)常数40H和地址40H中数进行“位与”操作,结果在地址40H中C)常数40H和40H进行“位与”操作,结果为40HD)常数40H和地址40H中数进行“位与”操作,结果在A中答案:B解析:10.[单选题]以下关于七段数码管显示方式的说法错误的是:【 】。
不带进位加法 c语言
不带进位加法 c语言
以下是一段C语言代码实现不带进位的加法:
```c
#include <stdio.h>
int add(int a, int b) {
int sum = a + b;
return sum;
}
int main() {
int num1, num2;
printf("输入第一个数字:");
scanf("%d", &num1);
printf("输入第二个数字:");
scanf("%d", &num2);
int sum = add(num1, num2);
printf("两个数字的和为:%d\n", sum);
return 0;
}
```
这个程序定义了一个名为`add`的函数,用于实现两个整数的相加操作,在函数内部直接使用`+`运算符进行加法计算。
在`main`函数中,程序会提示用户输入两个数字,然后调用`add`函数计算并打印它们的和。
你可以根据自己的需求修改代码中的变量名和函数名,以及输入输出内容。
希望这段代码能够帮助到你,如果你还有其他问题,请随时向我提问。
微机原理与接口技术:加法减法运算指令
1. 加法运算指令和调正指令ADD,ADC,INC,AAA,DAA(1)不带进位的加法运算指令ADDADD指令完成两个操作数相加,并将结果保存在目的操作数中。
指令格式:ADD OPRD1, OPRD2功能:操作数OPRD1与OPRD2相加,结果保存在OPRD1中。
说明:操作数OPRD1可以是累加器AL或AX,也可以是其它通用寄存器或存储器操作数,OPRD2可以是累加器、其它通用寄存器或存储器操作数,还可以是立即数。
OPRD1和OPRD2不能同时为存储器操作数,不能为段寄存器。
ADD指令的执行对全部6个状态标志位产生影响。
例如:ADD AL, BL ;AL+BL结果存回AL中。
ADD AX, SI ;AX+SI结果存回AX中。
ADD BX, 3DFH ;BX+03DFH结果存回BX中。
ADD DX, DA TA[BP+SI] ;DX与内存单元相加,结果存回DX中。
ADD BYTE PTR[DI], 30H ;内存单元与30H相加,结果存回内存单元中。
ADD [BX], AX ;内存单元[BX]与AX相加,结果存回[BX]中。
ADD [BX+SI], AL ;内存单元与AL相加,结果存回内存单元中。
【例题3-3】求D9H与6EH的和,并注明受影响的标志位状态。
MOV AL, 0D9HMOV BL, 6EHADD AL, BL结果AL=47H,标志位CF=1,PF=1,AF=1,ZF=0,SF=0,OF=0(2)带进位的加法运算指令ADCADC指令完成两个操作数相加之后,再加上Flags的进位标志CF。
CF的值可能为1或0。
指令格式:ADD OPRD1, OPRD2功能:操作数OPRD1与OPRD2相加后,再加上CF的值,结果保存在OPRD1中。
说明:对操作数的要求与ADD指令一样。
例如:ADC AL, BLADC AX, BXADC [DI], 30HADC指令主要用于多字节数的加法运算,以保证低位向高位的进位被正确接收。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计题目不带进位与或运算指令的实现学院计算机科学与技术学院专业计算机科学与技术班级0706 班姓名孙禹指导教师唐建雄2010 年01 月21 日目录课程设计任务书 (1)一设计的目 (2)二设计原理及设备 (2)2.1原理一 (2)2.2原理二 (2)2.3设计设备 (2)三模型机的逻辑框图 (3)四设计指令系统 (4)4.1指令类型 (4)4.1.1 算术/逻辑运算类指令 (4)4.1.2 移位操作类指令 (4)4.1.3 数据传送指令 (4)4.1.4 程序跳转指令 (4)4.1.5存储器操作类指令 (4)4.2指令系统 (4)4.2.1实验中用到的指令 (5)4.2.2指令系统 (5)4.3指令格式 (6)4.3.1 MOV指令采用双字节指令 (6)4.3.2 MOV指令采用单字节指令 (6)4.3.3 ADD加法运算 (6)4.3.4 ORL逻辑或采用单字节指令 (6)4.3.5 ANL逻辑与采用单字节指令 (6)4.3.6 停机指令(HALT) (6)4.3.7 STA取数据指令 (6)五设计微程序及其实现的方法 (6)5.1微指令格式的设计 (6)5.2后续微地址的产生方法 (7)5.3微程序入口地址的形成 (7)六模型机当中时序的安排 (8)七设计指令执行流程 (9)八源程序、指令代码及微程序 (10)8.1源程序 (10)8.2 程序指令代码 (11)8.3微单步运行过程 (11)8.4微程序指令 (14)九软件HKCPT的联机方式与脱机方式的实现过程 (14)9.1进行或运算时的时序分析图 (14)9.1.1取指指令 (14)9.1.2执行A→Dbus→DR1 (14)9.1.3 执行RAM→Dbus→DR2 (14)9.1.4 执行ALU→A (14)9.2进行或运算时的时序分析图 (14)9.2.1取指指令 (14)9.2.2执行A→Dbus→DR1 (14)9.2.3 执行RAM→Dbus→DR2 (14)9.2.4 执行ALU→A (14)9.3调试窗口流向图 (15)9.3.1 “与”和“或”运算流向图 (15)9.3.2 SUB指令流向图 (15)9.3.3 MOV指令流向图 (16)9.3.4 ADD指令流向图 (16)9.4累加器A、寄存器、存储器的数据变化以及数据流程 (17)十课程设计总结 (18)十一致谢 (19)十二参考文献 (19)本科生课程设计成绩评定表 (20)课程设计任务书学生姓名:孙禹专业班级:计算机0706班指导教师:唐建雄工作单位:计算机科学与技术学院题目:不带进位与或运算指令的实现初始条件:理论:学完“电工电子学”、“数字逻辑”、“汇编语言程序设计”、和“计算机组成原理”课程,掌握计算机组成原理实验平台的使用。
实践:计算机学院科学系实验中心提供计算机、实验的软硬件平台。
到实验中心硬件平台验证设计结果。
要求完成主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、基本模型机系统分析与设计,利用所学的计算机组成原理课程中的知识和提供的实验平台完成设计任务,从而建立清晰完整的整机概念。
2、根据课程设计题目要求,编制实验所需的程序,上机测试并分析所设计的程序。
3、课程设计的书写报告应包括:(1)课程设计的题目。
(2)设计的目的及设计原理。
(3)根据设计要求给出模型机的逻辑框图。
(4)设计指令系统,并分析指令格式。
(5)设计微程序及其实现的方法(包括微指令格式的设计,后续微地址的产生方法以及微程序入口地址的形成)。
(6)模型机当中时序的设计安排。
(7)设计指令执行流程。
(8)给出编制的源程序,写出程序的指令代码及微程序。
(9)说明在使用软件HKCPT的联机方式与脱机方式的实现过程(包括编制程序中每指条令的时序分析,累加器A和有关寄存器、存储器的数据变化以及数据流程)。
(10)课程设计总结(设计的特点、不足、收获与体会)。
时间安排:设计时间一周:周1:熟悉相关资料。
系统分析,设计。
周2周3周4:分班编程并上实验平台调试周5:撰写课程设计报告。
设计报告书收取时间:20周的星期五下午5:00之前。
指导教师签名:年月日系主任(或责任教师)签名:年月日基本模型机的设计—不带进位与或运算指令的实现一、设计的目掌握简单运算器的数据传输方式、了解通用寄存器的组成和硬件电路、利用通用寄存器实现数据的置数等功能、进一步熟悉存储器和总线的硬件电路、掌握微程序控制器的原理、掌握微程序编制、写入并观察运行状态等。
掌握了各个单元模块的工作原理,进一步将其组成完整的系统,构成一台基本的模型机。
在本设计中,我们将规划读写内存、寄存器、逻辑运算等功能,并且编写相应的微程序。
通过使用软件HKCPT,了解程序编译、加载的过程,通过微单步、单拍调试,理解模型机中的数据流向。
本实验主要是设计不带进位与或运算指令的实现,将汇编语言程序设计,数字逻辑与或运算原理以及计算机组成原理3方面的知识结合到一起利用此软件平台实现连续几个数的不带进位的与或运算,从而了解逻辑运算运算单元的运行过程。
二、设计原理及设备2.1原理一:计算机中CPU是核心,它是通过指令和微指令的执行来工作的。
指令是计算机要完成的某一项功能。
它对应到执行的过程中是一段微程序。
一段微程序含多条为指令,而一条微指令又含多个微命令。
一个微命令驱动某个硬件部件执行某种操作。
通过这样一个关系,从而达到由计算机指令来驱动计算机各个硬部件的协调工作以实现一条指令的执行。
2.2原理二:在各个模块中,各模块的控制的控制信号都是手动模拟产生的。
而在真正的实验系统中,模型机的运行是在微程序的控制下,实现特定指令的功能。
在本实验平台中,模型机从内存中取出、解释、执行机器指令都将由微指令和之相配合的时序来完成,即一条机器指令对应一个微程序。
在本次的实验平台中,模型机的运行是在微程序的控制下实现的,模型机的所有动作都是在时序的控制下,由微指令执行完成的。
2.3设计设备计算机组成原理实验仪系统组成:⑴运算器实验电路;⑵存贮器实验电路;⑶移位寄存器实验电路;⑷程序计数与译码单元;⑸时序电路;⑹微程序控制器电路;⑺逻辑开关显示电路;⑻逻辑电平显示电路控制电路;⑼4×8键盘输入电路;⑽单片机控制单元;⑾RS232通信接口;⑿八位数码显示系统;⒀四通道PC逻辑示波器。
三、模型机的逻辑框图说明:模型机的逻辑框图是根据书上的图设计的。
其中运算器由2片74L181构成8位字长的ALU单元。
2片74LS374作为2个数据锁存器(DR1、DR2),8芯插座ALU-IN作为数据输入端,可通过短8芯扁平电缆,把数据输入端连接到数据总线上。
数据输入锁存器DR1的EDR1为低电平,并且D1CK有上升沿时,那来自数据总线的数据打入锁存器DR1。
同样使EDR2为低电平、D2CK有上升沿时把数据总线上的数据打入数据锁存器DR2。
四、设计指令系统4.1指令类型4.1.1 算术/逻辑运算类指令如:加法,减法,取反,逻辑运算ADD A,RI SUB A,RI4.1.2 移位操作类指令带进位或不带进位的移位指令RRC A, RR A4.1.3 数据传送指令CPU内部寄存器之间数据传递MOV A, RI MOV RI, A4.1.4 程序跳转指令跳转指令分为无条件跳转指令和有条件跳转指令。
可根据寄存器内容为零来标志(ZD),有无进位来标志(CY),也可根据用户自定义标志。
JMP addr 无条件跳转JZ addr ZD=0 时跳转JC addr CY=0 时跳转JN addr 自定义4.1.5存储器操作类指令存储器读/写指令。
把内存某单元内容写入寄存器中或把寄存器中的内容写入存储器。
如: LDA addr (addr)→ASTA addr (A)→addr4.2指令系统指令系统是一台计算机的指令集合,其性能决定了这台计算机的基本功能。
因而,指令系统的设计是计算机系统设计中一个关键的问题,它与计算机的硬件结构密切相关。
一个完善的指令系统应该具备完备性、高效性、规整性和兼容性。
设计平台是HKZK——CPT平台,平台内采用的是8位地址总线和8位数据总线方式,在设计系统时,应该尽可能从一个的完善的指令系统应具备的性能考虑指令的类型,寻址方式和编码方式。
4.2.1实验中用到的指令有一下几种:MOV A, #data 将立即数传递到通用寄存器A中ANL A,#data 逻辑与指令ADD A, RI 加法指令,结果存储在通用寄存器A中ORL A, #data 逻辑或指令SUB A, RI 减法运算,结果存储在通用寄存器A中STA addr 将寄存器中内容写入存储器中HALT 停机指令4.2.2指令系统如下表:4.3指令格式一般指令由操作码和操作码组成,如下所示: 此实验所涉及指令的格式如下:4.3.1 MOV 指令采用双字节指令 4.3.2 MOV 指令采用单字节指令4.3.3 ADD 加法运算 4.3.4 ORL 逻辑或采用单字节指令4.3.5 ANL 逻辑与采用单字节指令 4.3.6 停机指令(HALT )4.3.7 STA 取数据指令五、设计微程序及其实现的方法5.1微指令格式的设计一条微指令的一般格式是如右图:5.2后续微地址的产生方法由于本系统中指令系统规模不大,功能较简单,微指令采用全水平、不编码的方式,每一个微操作控制信号由一位微代码来表示,24位微代码至少可表示24个不同的微操作控制信号。
用增量方式来控制微代码的运行顺序,每一条指令的微程序连续存放在微指令存储器连续的单元中。
在本系统内,MLD为置微地址的控制信号,MCK为工作脉冲。
当MLD=0、MCK有上沿时,把MD0~MD7的值作为微程序的地址,打入微地址寄存器。
当MLD=1、MCK有上升沿时,微地址计数器自动加1。
5.3微程序入口地址的形成在本实验平台的硬件设计是采用的24位微指令,若微指令采用全水平不编码纯控制场的格式,那么至多可有24个微操作控制信号,可由微代码直接实现。
若采用多组编码译码,那么24位的微代码通过二进制译码可实现2n个互斥的微操作控制信号。
由于模型机指令系统规模较小,功能也不太复杂,所以采用全水平不编码纯控制场的微指令格式。
在模型机中,用指令操作码的高4位作为核心扩展成8位的微程序入口地址MD0-MD7。
这种方法称为“按操作码散转”(如下表所示)。
按操作码散转:此次实验程序中的微程序指令如下表:六、模型机当中时序的安排由于模型机已经确定了指令系统,微指令采用全水平不编码纯控制场的格式,微程序的入口地址采用操作码散转方式,微地址采用计数增量方式,所以可确定模型机中时序单元在河南股所产生的每一拍的作用。
在本实验中为了更好的观察实验的各个中间过程中各寄存器的值,由监控单元产生一个PLS-O的信号来控制时序的产生(如下图)。