第八讲 算术运算类指令

合集下载

算术运算类指令

算术运算类指令

2009年6月2日星期二
15
2.双寄存器符号扩展指令CWD/CDQ/CQO
指令格式:CWD
CDQ
CQO 功能:CWD功能为将AX寄存器的内容符号扩展到DX中;
CDQ指令的功能为将EAX寄存器的内容符号扩展到EDX中; CQO指令的功能为将RAX寄存器的内容符号扩展到RDX中,只 能在64位方式下使用。 它们都不影响标志位。 一般来说符号扩展指令大都与除法指令相结合,为达到被除数的位数要 求而扩展。 【例3.29】 求0ABCH÷0200H(带符号数相除) 由于除数为字,则必须将原来的被除数进行符号扩展后才能相除。
2009年6月2日星期二
10
AL ╳ src (8位源操作数)
AX
(16位乘积)
字节乘法
AX

src (16位源操作数)
DX AX 字乘法
(32位乘积)


src (32位源操作数)
EDX EAX (64位乘积)
RAX

src (64位源操作数)
RDX RAX (128位乘积)
32位乘法
64位乘法
【例】 设AX=65A0H,BX=B79EH,指令ADD BX,AX的执行情况如下:
0110010110100000 +)1011011110011110
10001110100111110
结果非零:ZF=0
最高位有进位:CF=1 最高位为0:SF=0
OF=最高位进位1⊕次高位进位1,则OF=0
无进位: AF=0 低8位为偶数个1:PF=0
状态标志位
OF SF ZF AF PF CF
Y **** Y Y **** Y Y **** Y Y **** Y

算术运算类指令

算术运算类指令
算术运算类指令
(3)乘法运算指令
MUL(unsigned MULtiple) 无符号数乘法。
IMUL(sIgned MULtiple) 带符号数乘法。
① MUL无符号数乘法指令
指令格式:MUL SRC
指令功能:
字节操作数 AX (AL)*(SRC)
字操作数
DX:AX (AX)*(SRC)
其中(SRC)是乘法运算的一个操作数,它只能在通用寄存 器或存储单元中(不能是立即数),而另一个操作数隐含在 AL(字节乘)、AX(字乘)或EAX(双字乘)寄存器中。
MUL指令只影响标志寄存器中CF、OF标志位。MUL指令 执行后,如果乘积的高一半为0,即AH(字节乘)、DX(字 乘法)或EAX(双字乘)全为0,则CF 0和OF 0;否则CF 1,OF 1(表示AH、DX或算术E运D算类X指中令有乘积的有效数字)。
② IMUL带符号数乘法指令
指令格式:IMUL SRC 指令功能:与MUL相同,但操作数和乘积必须是带符号数且用 补码表示,而MUL的操作数和乘积均是无符号数。
CMP指令与SUB指令的不同之处是,运算结果不送回目的 地址中。因此CMP指令执行后,两个操作数都不变,只影响状 态标志位。CMP指令后往往跟着一个条件转移指令,根据比较 结果产生不同的程序分支。例如:
CMP AL,BL
JZ EQL
CMP指令可利用所设标志位的状态来反映两个操作数的大小。 CMP指令执行后,若ZF 1,表示(DEST)(SRC)。对于无 符号数,若CF 0,表示(DEST)≥(SRC);若CF 1,则 (DEST)<(SRC)。
② IDIV带符号数除法指令
指令格式:IDIV SRC 指令功能:与DIV相同,但操作数、商和余数必须是带符号数 且用补码表示,余数的符号与被除数的符号相同。

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中。

lec08 算术逻辑运算类指令

lec08 算术逻辑运算类指令

例 2-20:已知(AX)=0410H,(BL)= 0B8H。
DIV BL IDIV BL ;商AL=05H ,余数AH=78H ;商AL=F2H(即-14),余数AH=20H(即32) ;有符号数0410H真值为1040,B8H 真值为-72。 ;注意DIV和I DIV的区别。
表达式计算
【例 2-21】X、Y、Z、V、W均为16位有符号数,
算术运算类指令:
加法指令
ADD、ADC、INC
减法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV
十进制调整指令
DAA、DAS、
AAA、AAS、AAM、AAD
加法指令 加法指令: ADD DST, SRC 执行操作: (DST) (SRC) + (DST) 带进位加法指令: ADC DST, SRC 执行操作: (DST) (SRC) + (DST) + CF 加1指令: 执行操作:
字操作
(AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余数
注意: * AX (DX,AX) 为隐含的被除数寄存器。
* AL (AX) 为隐含的商寄存器。 * AH (DX) 为隐含的余数寄存器。 * SRC不能为立即数。 * 对所有状态标志位均无定义。 * 两个N位操作数相除,应首先把被除数符号扩展为2N位。 * src若为存储器操作数时,注意用ptr明确类型。 如:IDIV BYTE PTR [DI] ;AX除以8 位存储器操作数
注意:
* 除DEC指令不影响 CF标志外,均对状 态标志位有影响。
比较指令: 执行操作:

算术运算类指令

算术运算类指令

• 1题改为:求外部RAM2000H单元和3000单 元的平均值,结果保存至内部RAM50单元? (假设两个单元的值相加不超过255)
• • • • • • • MOV DPTR,#2000H MOVX A,@DPTR MOV R1,A MOV DPTR,#3000H MOVX A,@DPTR ADD A,R1 MOV 50H,R1
1、将外部RAM2000H单元和内部RAM20H(外部 3000H)单元数据交换 • MOV DPTR,#2000H • MOV DPTR,#2000H • MOVX A, @DPTR • MOV R1, A • MOVX A,@DPTR • MOV DPTR,#3000H • XCH A,20H • MOVX A,@DPTR • MOVX @DPTR,A • XCH A , R1 • MOVX @DPTR,A • MOV DPTR ,#2000H • MOV A,R1 • MOVX @DPTR,A
练习:
1、求内部RAM20 H单元和30 H单元的和,结果保存 至内部RAM50单元?(假设两个单元的值相加不超 过255)
• MOV A,20H • ADD A,30H • MOV 50H,A
• 1、求外部RAM2000H单元和3000单元的和,结果 保存至内部RAM50单元?(假设两个单元的值相 加不超过255) • (2000H)+(3000H)→内部(50H) • MOV DPTR,#2000H • MOVX A,@DPTR • MOV R1,A • MOV DPTR,#3000H • MOVX A,@DPTR • ADD A,R1 • MOV 50H,R1
• • • • • • •
例:设(A)=C9H,(R2)=54H,(CY)=1,执行指令 SUBB A, R2 11001001 01010100 1 01110100 结果:(A)=74H,借位位(CY)=0。源自、乘法运算• MUL AB

算术运算指令

算术运算指令
例3-24、例3-25
其结果仍存在A中。 对PSW中各位的影响:与ADD指令相同。 作用:一般用于多字节数的加法运算,低字节相加
时可能产生进位,可以通过带进位加法指令将低字 节的进位加到高字节上去。高字节求和时必须使用 带进位的加法指令。 例3-17、例3-18
四、带借位的减法指令
SUBB A,#data;A←(A)- data- Cy SUBB A,Rn ;A←(A)-( Rn) - Cy SUBB A,@Ri ;A←(A)-(( Ri)) - Cy SUBB A,direct ; A←(A)-(direct)- Cy 功能:把A中的内容减去源操作数所指出的内容和
五、加1指令
INC A ;A←(A)+1 INC Rn ; Rn ←( Rn )+1 INC @Ri ;( Ri)←(( Ri))+1 INC direct ; direct←( direct)+1 INC DPTR ;DPTR←(DPTR)+1 功能:将源操作数所指定的单元或寄存器中的内容
进位位标志Cy的值,差存入A中。
对PSW中各位的影响:
–若D7位有进位(借位),则Cy=1,否则Cy=0; –若D3位有进位(借位) ,则Ac =1,否则Ac =0; –若D6和D7中有且只有一个有进位(借位) ,则Ov=1,否
则Ov=0; –若结果A中1的个数为奇数,则P=1,否则P=0。
例3-19
加1,其结果仍送回原操作单元中。前四条是8位数 加1指令,最后一条是唯一的16位数加1指令。只有 第一条指令对PSW中的奇偶标志位P产生影响,其 余指令不会对PSW的任何标志位产生影响。 例3-20
六、减1指令
DEC A

第八节 算术运算类指令

第八节 算术运算类指令

判断溢出的方法
• 两数相加时,只有当参加运算的两个数 两数相加时, 符号相同时, 发生溢出现象( 符号相同时,才有可能发生溢出现象(异 号相加无溢出) 号相加无溢出),溢出时运算结果的符号 号相反。 与参加运算的符号相反。可以利用这个 特点判断加法有无溢出, 特点判断加法有无溢出,称为判断溢出 的符号法则。 的符号法则。
8.1.3 补码
• 负数的补码=模-该负数的绝
对值
• 例如,若X是负数,则有:X补 是负数,则有: 例如, =mod- =mod-│X│ • 当模为12时,0至12间的任何数 当模为12时 12间的任何数 与其加- 减3与其加-3的补码的效果是 一样的。例如: 一样的。例如: • 6-4=2 • -4的补码为:[-4]=12-4= 的补码为: 4]=12- +8 • 6+8=12+2=2(12自然消失) 8=12+2=2(12自然消失 自然消失) • 由上可见,在某一计数系统的 由上可见, 模内, 模内,任何加减法运算都归结
• • • • • • •
例:求(-20)+(+16)=? (-20)+(+ ) )+(+16 相当于计算[ 20]补 16]补 解:相当于计算[-20]补+[+16]补。 [-20]原=10010100B 20]原 [-20]反=11101011B 20]反 [-20]补=[-20]反+1=11101011B+1=11101100B 20]补=[-20]反 1=11101011B+ [+16]补=[+16]原=00010000B 16]补=[+16]原 下面列出[―20]补 16]补的算式 补的算式: 下面列出[―20]补+[+16]补的算式:
但是如果我们一旦决定参加运算的操作数是无符号数对于运算结果我们也一定要把结果看待为无符号数若我们决定参加运算的操作数是带符号数补码形式结果就必须看待为带符号数补码形式

第八讲 算术运算类指令

第八讲 算术运算类指令

教学方法:讲授法授课时数: 2学时教学目的:1、熟悉数据运算类指令的操作方式特点2、理解二-十进制调整指令的含义3、熟练掌握加法指令教学重点:加法、减法指令教学难点:二-十进制调整指令复习:direct、@Ri、@DPTR、Rn、#data、(x)、((x))的含义?§3-3 算术运算类指令包括:加、减、乘、除;加一、减一。

一、加法指令ADD A,Rn ;(A)(A)+ (Rn)以下类同。

ADD A,directADD A,@RiADD A,#data无符号数相加时:若C = 1,说明有溢出(其值> 255)。

带符号数相加时:若OV = D7c⊕D6c = 1,说明有溢出。

ADDC A,Rn ;(A)(A)+(Rn)+(C),以下类同。

ADDC A,directADDC A,@RiADDC A,#data上述四条指令多用于多字节数相加。

INC A ;(A)(A)+1 ,以下类同。

INC RnINC directINC @RiINC DPTR例1、设(R0)= 7FH;(7EH)= 40H执行:INC @R0INC R0INC @R0 后,(R0)= 7FH; (7EH)= 00H; (7FH)= 41H.DA A ;二——十进制调整指令。

执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二——十进制调整。

选择修正值的规则:(A3 ~ 0)> 9时或(AC)= 1时,(A3 ~ 0)(A3 ~ 0)+6(A7 ~ 4)> 9 或(C)= 1时,(A7 ~ 4)(A7 ~ 4)+ 6例2、设(A)= 56H 为56的压缩的BCD码数,(R3)= 67H,(CY)=1 执行ADDC A,R3DA A结果为:124注意:1)DA指令只能跟在加法指令后面使用;2)调整前参与运算的两数是BCD码数;3)DA指令不能与减法指令配对使用,但可以实现对A中压缩BCD减一操作。

算数运算指令

算数运算指令

算数运算指令展开全文算数运算指令算术运算指令的主要功能是实现算术加、减、乘、除等运算。

1.ADD类指令是不带进位的加法运算指令(4条)。

ADD A,Rn ;A+Rn→A, A与Rn寄存器内容相加,结果送到A中ADD A,direct ;(direct)+A→A, A与直接地址内容相加,和送AADD A, @Ri ;(Ri)+A→A, A与Ri间址内容相加,和送AADD A, #data ;data+A→A, A与立即数相加,和送A注意:ADD类指令相加结果均在A中,相加后源操作数不变。

若A中最高位有进位,Cy置1;若半加位有进位,AC置1。

A的结果还影响奇偶标志位P。

例 A=30H, R0=10H执行 ADD A,R0 结果:A=40H, R0=10H,标志位 P=1, Cy=0, OV=0, AC=02.ADDC类指令(带进位加法4条)ADDC A, Rn ;A+Rn+Cy→A, A与R n内容、进位状态相加,和送到A中ADDC A, direct ;(direct)+Cy+A→A, A与直接地址中内容、进位状态相加,和送AADDC A, @Ri ;(Ri)+Cy+A→A, A与Ri间址单元中内容、进位状态相加,和送AADDC A, #data ;data+Cy+A→A, A与立即数、进位状态相加,和送A与ADD类指令的区别是,ADDC指令相加时连同进位标志Cy内容一起相加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用ADD指令。

进位位Cy加到字节的最低位。

例写计算1234H+0FE7H的程序,将结果存入内部RAM的41H 和40H单元,40H存低8位,41H存高8位。

程序MOV A, #34H ;被加数低8位数34H送AADD A, #0E7H ;加数低8位数E7H与之相加,A=1BH,Cy=1 MOV 40H, A ;A→40H即34H+E7H结果存入40H中(40H=1BH)MOV A, #12H ;被加数高8位数12H送AADDC A, #0FH ;加数高8位0FH和Cy与A相加,A=22H MOV 41H, A ;高8位与进位位之和存入41H中(41H)=22H ;总和为221BH,总结果在41H,40H单元中3.SUBB类指令(4条)SUBB类指令是带借位减法指令,其功能是将A中被减数减去源操作数指出的内容,再减去借位标志Cy(原进位标志)状态,差值在A中。

算术运算类指令

算术运算类指令

算术运算类指令
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
⼆进制数实现⼗进制加减法。

算术逻辑运算类指令

算术逻辑运算类指令

RR
A
移位指令
累加器带进位循环左移指令
RLC
A
累加器带进位循环右移指令
RRC
A
移位指令
累加器半字节交换指令
SWAP
A
将A中内容左移3位
SWAP A
RR
A
1.4 累加器清零指令
CLR
A
以下3种指令都可将累加器内容清零
CLR
A
MOV
A, #0
MOV
ACC, #0
但是它们的指令长度和执行时间不同
1.2 逻辑运算指令
逻辑与运算指令
ANL
A, #data
ANL
A, direct
ANL
A, Rn
ANL
A, @Ri
ANL
direct, A
ANL
direct, #data
逻辑运算指令
逻辑或运算指令
ORL
A, #data
ORL
A, direct
ORL
A, Rn
ORL
A, @Ri
1.5 累加器内容取反指令
CPL
A
当A中保存有从外部输入的数据,但信号逻辑与CPU或其他电 路相反时,可用这条指令将其改为一致的形式,然后再进行处 理
单片机原理与应用
算术运算指令
加法的BCD调整指令
DA
A
对先前两个压缩BCD数的加法结果(保存在累加器A中)进行调整, 在A中产生合法的两位BCD数。任何使用ADD或ADDC指令执 行的BCD数的加法指令,后面必须是加法的BCD调整指令
加法的BCD调整
如果累加器低4位大于9,或者AC标志为1,则低4位加6调整。 内部调整操作可能会使CY为1,但如果CY已经置位,不会将 CY清零

PC技术辅导:算术运算指令

PC技术辅导:算术运算指令

算术运算指令是反映CPU计算能⼒的⼀组指令,也是编程时经常使⽤的⼀组指令。

它包括:加、减、乘、除及其相关的辅助指令。

该组指令的操作数可以是8位、16位和32位(80386+)。

当存储单元是该类指令的操作数时,该操作数的寻址⽅式可以是任意⼀种存储单元寻址⽅式。

1、加法指令、加法指令ADD(ADD Binary Numbers Instruction)指令的格式:ADD Reg/Mem, Reg/Mem/Imm受影响的标志位:AF、CF、OF、PF、SF和ZF指令的功能是把源操作数的值加到⽬的操作数中。

、带进位加指令ADC(ADD With Carry Instruction)指令的格式:ADC Reg/Mem, Reg/Mem/Imm受影响的标志位:AF、CF、OF、PF、SF和ZF指令的功能是把源操作数和进位标志位CF的值(0/1)⼀起加到⽬的操作数中。

、加1指令INC(Increment by 1 Instruction)指令的格式:INC Reg/Mem受影响的标志位:AF、OF、PF、SF和ZF,不影响CF指令的功能是把操作数的值加1。

、交换加指令XADD(Exchange and Add)指令的格式:XADD Reg/Mem, Reg ;80486+受影响的标志位:AF、CF、OF、PF、SF和ZF指令的功能是先交换两个操作数的值,再进⾏算术“加”法操作。

例5.3 已知有⼆个32位数d1和d2(⽤数据类型DD说明),编写程序⽚段把d2的值加到d1中。

解:32位数d1和d2在内存中如下所⽰。

…… …… ……⽅法1:⽤16位寄存器编写程序MOVAX, word ptr d1;由于d1是双字类型,必须使⽤强制类型说明符。

以下同。

MOVDX, word ptr d1+2;(DX,AX)构成⼀个32位数据ADDAX, word ptr d2;低字相加ADCDX, word ptr d2+2;⾼字相加。

算术运算类指令

算术运算类指令
√ √ √ √ 累加器A中的内容与工作寄存 器Rn中的内容相加,结果存 在A中
√ √ √ √ 累加器A中的内容与工作寄存 器Ri所指向地址单元中的内容 相加,结果存在A中
各标志位的形成方法: 如果位7有进位输出,则置位CY,否则清CY; 如果位3有进位输出,则置位AC,否则清AC; OV=CY7⊕CY6。 若累加器A中1的个数为奇数,则P=1,否则,P=0。
√ √ √ √ 累加器A中的内容减工作寄存器中 的内容再减借位位,结果存在A中
A←(A)-((Ri))-(CY)
√√
√ √ 累加器A中的内容减工作寄存器Ri 指向的地址单元中的内容再减借位 位,结果存在A中
在减法运算中
CY=1表示有借位,CY=0则无借位。 OV=1表明带符号数相减时,从一个正数减去一个负数结果为
√√


累加器A中的内容与立即数连同进位
位相加,结果存在A中
√√


累加器A中的内容与工作寄存器Rn中
的内容、连同进位位相加,结果存在
A中
√√


累加器A中的内容与工作寄存器Ri指
向的地址单元中的内容、连同进位位
相加,结果Байду номын сангаас在A中
3. 带借位减法指令(4条)
指令
功能
标志位
解释
PO A C VCY
SUBB A,direct
注意: DA A 只能用于加法运算
【例】:有两个BCD数36与45相加,结果应为BCD码81, 程序如下:
MOV A,#36H
ADD A,#45H
DA A
加法指令执行后得结果7BH;第三条指令对累加器A中的 结构进行十进制调整,低4位(为0BH)大于9,因此要加6, 最后得到调整的BCD码为81。

算术逻辑运算类

算术逻辑运算类

5. 求补指令NEG(negtive)
NEG reg/mem ;reg/mem←0-reg/mem NEG指令对操作数执行求补运算,即用零减 去操作数,然后结果返回操作数 求补运算可表达成:将操作数按位取反后加1 NEG指令对标志的影响与用零作减法的 SUB 指令一样 NEG指令也是一个单操作数指令 NEG 指令执行的结果一般总是使 CF= 1除非 操作数为0时CF=0
例5 减法
SUB AH,0F0H ;AH=B3H-F0H=C3H,AX=C36EH ;OF=0,SF=1,ZF=0,PF=1,CF=1 MOV word ptr[200H],0EF00H ;[200H]=EF00H,标志不变 SUB [200H],AX ;[200H]=EF00H-C36EH=2B92H ;OF=0,SF=0,ZF=0,PF=0,CF=0 SUB SI,SI ;SI=0 ;OF=0,SF=0,ZF=1,PF=1,CF=0
2. 带进位加和减指令
ADC dest,src
;加法:dest←dest+src+CF ;ADC指令除完成ADD加法运算外,还要 加上进位CF,结果送到目的操作数
SBB dest,src
;减法:dest←dest-src-CF ;SBB指令除完成SUB减法运算外,还要 减去借位CF,结果送到目的操作数
对于加法和减法指令,带符号和不带符号的加 减运算的操作过程无区别,可用同一条加法 /减法 指令完成
对于乘法除法运算,运算过程完全不同,分别 设有不带符号和带符号的乘法除法的指令 对于十进制运算,先采用二进制运算指令, 后进行十进制调整的方式来实现
4.3.2.1
加法和减法指令
加法指令:ADD, ADC和INC 减法指令:SUB, SBB, DEC, NEG和CMP 他们分别执行字或字节的加法和减法运算, 除 INC 和 DEC 不影响 CF 标志外,其他按定义 影响全部状态标志位 操作数组合:

算术运算指令

算术运算指令

算术运算指令摘要:本文介绍了算术运算指令,首先对其功能和特点进行了概述;接着介绍了具体的指令和它们的功能;随后介绍了如何使用它们;最后总结了它们的有点和缺点。

关键词:算术运算;指令;功能;使用1. Introduction算术运算指令是一类用于快速执行算术运算操作的指令。

它们可以快速而准确地从计算机存储器中取出数据,并在执行算术运算时将数据与指令指示结合起来。

依据实际应用,算术运算指令可分为加法、减法、乘法、除法、移位、取模、取反、转换等指令。

它们的优点在于快速运算,精确度高,节省存储空间,指令少,可混合使用,易于编程。

2. Specific Instructions(1)加法运算指令:加法运算指令是一种最常用的算术运算指令,用于完成两个操作数的加法运算,其形式为“add a,b”,即a+b,其中,a是被加数,b是加数,运算后的结果存放在a中。

(2)减法运算指令:减法运算指令用于实现两个操作数的减法计算,其形式为“sub a,b”,即a-b,其中,a是被减数,b是减数,计算结果存放在a中。

(3)乘法运算指令:乘法运算指令用于实现两个操作数的乘法计算,其形式为“mul a,b”,即a×b,其中,a是被乘数,b是乘数,计算结果存放在a中。

(4)除法运算指令:除法运算指令用于实现两个操作数的除法计算,其形式为“div a,b”,即a÷b,其中,a是被除数,b是除数,计算结果存放在a中。

(5)移位运算指令:移位运算指令用于将一个操作数中的二进制位进行左移或右移操作,其形式为“shl a,b”或“shr a,b”,即将a向左移或向右移b位,可以用来快速乘以或除以2的N次方,计算结果存放在a中。

(6)取模运算指令:取模运算指令用于实现两个操作数的取模计算,其形式为“mod a,b”,即取a对b的余数,计算结果存放在a中。

(7)取反运算指令:取反运算指令用于实现一个操作数的取反计算,其形式为“neg a”,即将a按照求补原理取反,计算结果存放在a中。

算术运算指令

算术运算指令

◆算数类指令经常会影响标志位,搞清楚以下两个概念:✓对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)✓对标志没有影响:指令执行不改变标志状态◆注意有符号数进行计算是用其补码进行计算的,有符号数在计算机里是以补码的形式进行存储的!!!!!◆使用内存地址为寻址方式时,一定要用伪指令指明操作数类型。

✧加法类(带符号数相加要考虑溢出):1.加法指令ADD(ADD 目的操作数,源操作数;将源与目的操作数相加,结果送到目的操作数)目的操作数:reg,mem源操作数:imm,reg,mem注意:1.存储器之间不能相加。

2.根据结果对相应的标志位作出改变,即,影响标志位!!!2.带进位加法指令ADC(ADD 目的操作数,源操作数;将源、目的操作数与CF标志位相加,结果送到目的操作数)目的操作数:reg,mem源操作数:imm,reg,mem注意:1. 存储器之间不能相加。

2. 根据结果对相应的标志位作出改变,即,影响标志位!!!3. ADC指令主要与ADD配合,实现多精度加法运算。

4. CF是本指令执行前的状态♌多精度加法运算示例mov ax,4652h ;ax=4652hadd ax,0f0f0h ;ax=3742h,CF=1mov dx,0234h ;dx=0234hadc dx,0f0f0h ;dx=f325h,CF=0;DX.AX=0234 4652H+F0F0 F0F0H=F325 3742H3.增量指令INC(increment;INC指令对操作数加1(增量);INC reg/mem)操作数:reg/mem注意:1.不影响进位CF标志,按定义设置其他状态标志。

(仅不影响CF,还会影响其他)2.主要用于对计数器和地址指针的调整,而不用来做单纯的算术计算。

3.当使用存储器操作数时,不得出现二义性。

✧减法类:4.减法指令SUB(目的操作数减去源操作数,结果送到目的操作数;sub 目的操作数,源操作数)目的操作数:reg,mem源操作数:imm,reg,mem注意:1. 存储器之间不能相减。

算术运算指令

算术运算指令

一、算术运算指令算术运算中的溢出问题以8位二进制数的加法为例,两个8位数相加时有4种情况:二进制运算对应的十进制运算数据作为无符号数数据作为有符号数Case1:无符号数和有符号数均不溢出0000 1000+ 0001 11100010 0110结果: 26H(38)CF=0, OF=08+ 3038未超出8位无符号二进制数表示范围+8+ (+30)+38未超出8位有符号二进制数表示范围Case2:无符号数溢出,有符号数不溢出0000 1000+ 1111 11011 0000 0101结果:5CF=1, OF=08+ 253261超出8位无符号二进制数表示范围+8+(-3)+5未超出8位有符号二进制数表示范围Case3:无符号数不溢出,有符号数溢出0000 1000+ 0111 11011000 0101结果:-123(补码)CF=0, OF=18+ 125133未超出8位无符号二进制数表示范围+8+ (+125)+133超出8位有符号二进制数表示范围Case4:无符号数和有符号数均溢出1000 1000+ 1111 01111 0111 1111结果:127CF=1, OF=1136+ 247383超出8位无符号二进制数表示范围-120+ (-9)-129超出8位有符号二进制数表示范围上面四种情况说明,算术运算溢出的判别是比较复杂的,不能只用一个标志位来判别。

算术运算溢出是一种出错状态,在运算过程中应当避免。

1 加法运算指令【例1】ADD CL,20H ;CL←(CL)+ 20HADD AX,SI ;AX←(AX)+(SI)ADD [BX+2],AL ;(BX+2)←((BX)+2)+(AL)ADD DX,[BX+SI] ;DX←(DX)+((BX)+(SI))ADD AX,CL ;错误!操作数类型应一致ADD [SI],[BX] ;错误!不允许两个操作数都是存储器ADD DS,AX ;错误!不允许把段寄存器作为操作数加法指令对全部6个状态标志位都会产生影响。

算术运算指令

算术运算指令
算术运算指令
算术运算指令
(2)减法指令 ’C54x的减法指令共有13条,可完成两个操作数
的减法运算、移位后的减法运算、带借位的减法运算、 条件减法运算和不带符号位扩展的减法运算。
指令格式:操作码 源操作数 [,移位数] ,目的操作数
SUB Smem
TS
src
SUBB Xmem
16
dst
SUBC
Ymem #lk
src=src-Smem
从累加器中减去操作数
2 SUB Smem , TS,src
src=src-Smem<<TS
从累加器中减去移位后的操作数
3 SUB Smem ,16 ,src[,dst] dst=src-Smem<<16
累加器减去左移16位的操作数
4 SUB Smem,[,SHIFT],src[,dst] dst=src-Smem<< SHIFT 操作数移位后与累加器相减
src=DsSrPc原-u理n及s(应Sm用em)
累加器与符号位不扩展的操作数减 操作
5
(3)乘法指令 ’C54x的指令系统提供了10条乘法运算指令,其
运算结果都是32位的,存放在累加器A和B中。而参与 运算的乘数可以是T寄存器、立即数、存储单元和累 加器A或B的高16位。
格式:操作码 源操作数1 [,源操作数2] ,目的操作数 操 作 码: MPY、MPYR、MPYA、MPYU、SQUR 源操作数1:Smem、Xmem、#lk
SHIFT SHFT
SUBS src
ASM
2023年10月24日6时32分
DSP原理及应用
2
(2)减法指令
操作码 源操作数 指令格式
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第八讲算术运算类指令
教学方法:讲授法
教学目的:
1、熟悉数据运算类指令的操作方式特点
2、理解二-十进制调整指令的含义
3、熟练掌握加法指令
教学重点、难点:
加法、减法指令、二-十进制调整指令
无条件转移指令的应用
主要教学内容(提纲):
一、数据运算类指令的操作方式特点
二、算术运算类指令
三、逻辑运算类指令
复习:
direct、@Ri、@DPTR、Rn、#data、(x)、((x))的含义?
讲授要点
§3-3 算术运算类指令
包括:加、减、乘、除;加一、减一。

一、加法指令
ADD A,Rn ;(A)(A)+ (Rn)以下类同。

ADD A,direct
ADD A,@Ri
ADD A,#data
无符号数相加时:若C = 1,说明有溢出(其值> 255)。

带符号数相加时:若OV = D7c⊕D6c = 1,说明有溢出。

ADDC A,Rn ;(A)(A)+(Rn)+(C),以下类同。

ADDC A,direct
ADDC A,@Ri
ADDC A,#data
上述四条指令多用于多字节数相加。

INC A ;(A)(A)+1 ,以下类同。

INC Rn
INC direct
INC @Ri
INC DPTR
例1、设(R0)= 7FH;(7EH)= 40H
执行:INC @R0
INC R0
INC @R0 后,
(R0)= 7FH; (7EH)= 00H; (7FH)= 41H.
DA A ;二——十进制调整指令。

执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二——十进制调整。

选择修正值的规则:
(A3 ~ 0)> 9时或(AC)= 1时,(A3 ~ 0)(A3 ~ 0)+6
(A7 ~ 4)> 9 或(C) = 1时,(A7 ~ 4)(A7 ~ 4)+ 6
例2、设(A)= 56H 为56的压缩的BCD码数,(R3)= 67H,(CY)=1
执行ADDC A,R3
DA A
结果为:124
注意:1)DA指令只能跟在加法指令后面使用;
2)调整前参与运算的两数是BCD码数;
3)DA指令不能与减法指令配对使用,但可以实现对A中压缩BCD
减一操作。

例3、设(A)=30H(压缩BCD码数),执行:
ADD A,#99H
DA A
后,便实现了30 -1 = 29的操作。

例4、两个4位BCD码相加,一个存放在(31H)(30H);另一个存放在
(33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。

解:MOV R0,#30H
MOV R1,#32H
MOV A,@R0
ADD A,@R1
DA A
MOV @R0,A
INC R0
INC R1
MOV A,@R0
ADDC A,@R1
DA A
MOV @R0,A
二、减法指令
SUBB A,Rn ;(A)(A)-(Rn)-(C),以下类同。

SUBB A,direct
SUBB A,@Ri
SUBB A,#data
注意:减法之前先清零C。

DEC A ;(A)(A)-1 ,以下类同。

DEC Rn
DEC @Ri
DEC direct
例5、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H 执行:DEC @R0
DEC R0
DEC @R0
结果为:(R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。

三、乘法和除法指令
乘法:
MUL AB ;(A)×(B),积的低8位在A中,积的高8位在B中;
C总为0。

除法:
DIV AB ;(A)÷(B),商在A中,余数在B中。

若(B)= 0 ,则结果不定,(OV)= 1,(C)= 0。

例6、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单元,十位数和个位数压缩后存于30H单元中。

解;MOV B,#100
DIV AB
MOV 31H,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ADD A,B
MOV 30H,A
§3-4 逻辑操作类指令
共分两大类:单字节逻辑操作,双字节逻辑操作,共24条。

一、单字节逻辑操作指令
CLR A ;(A)0
CPL A A中8位按位求反。

循环左移、右移指令:
RL A
RLC A
RR A
RRC A
注:左移一位相当于乘2;右移一位相当于除2。

二、双字节逻辑操作指令
“与操作”:
ANL A,Rn ;(A)(A)∧(Rn),以下类同。

ANL A,direct
ANL A,@Ri
ANL A,#data
ANL direct,A
ANL direct,#data
例1、(P1)= 35H,使其高4位输出0,低4位不变。

解;ANL P1,#0FH
此做法称为“屏蔽”位。

“或操作”:
ORL A,Rn ;(A)(A)∨(Rn),以下类同。

ORL A,direct
ORL A,@Ri
ORL A,#data
ORL direct,A
ORL direct,#data
例2、将A中的低3位送入P1中,并且保持P1中高5位不变。

ANL A,#07H
ANL P1,#0F8H
ORL P1,A ;(P1)= P17P16P15P14P13A2A1A0
这称为“数位组合”。

“异或操作”:
XRL A,Rn ;(A)(A)⊕(Rn),以下类同。

XRL A,direct
XRL A,@Ri
XRL A,#data
XRL direct,A
XRL direct,#data
例3、设(P1)= 0B4H = 10110100B,执行:
XRL P1,#00110001B
结果按# 0 0 1 1 0 0 0 1 取反,即:
(P1)= 1 0 0 0 0 1 0 1 B = 85H
这称为“指定位取反”。

在上述ANL、ORL、XRL操作中,用于端口操作时,无论P0 ~ P3是第一,还是第二操作数,都遵循“读—修改—写”端口锁存器的操作。

小结:算术运算类指令都有哪些类型?
逻辑操作分为哪两类操作?
循环移位指令每执行一次,移几位?ANL、ORL、XRL指令有哪些使用技巧。

相关文档
最新文档