算术运算类指令

合集下载

算术运算类指令

算术运算类指令

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

实验四加减乘除等算术运算指令

实验四加减乘除等算术运算指令

实验四加减乘除算术运算类指令一.实验目的1.学习掌握加减乘除等算术运算类指令的功能2.学习掌握加减乘除指令对FLAG的影响二。

实验工具软件MS-DOS DEBUG PC机三.实验过程及调试结果1.加法指令(1)实现无符号数相加例如 25+36结果:-r(AL)=3D CF=0 ZF=0 OF=0结果解释:(AL)=3D,该无符号数对应的真值是61。

由CF标志位0标明无符号数没有进位(超出目的操作数表示范围),“和”结果可用。

人工验算真值“和”结果:正确的。

没有发生溢出。

SP和CP无意义。

(2)实现有符号数相加例如(-25)+(-46)结果:-r(Al)=B9H=(-71)补 OF=0 SF=1 ZF=0结果解释:结果解释:(AL)=(A1)=B9H,对应的真值是-71,OF=0,表明结果没有出错,SF=1,表明运算结果为负数。

人工验算真值“和”结果:正确的,没有发生溢出。

2.减法指令(1)实现无符号数减。

例如 36-15观察 al,OF,CF,ZF,SF结果解释:(AL)=15,对应的真值是21,CF=0,表明结果是正确的,没有溢出。

人工验算和计算机结果解释比较,结论是结果是正确的,没有溢出。

(2)实现有符号数(-25(e7)补)-(-46(d2)补)观察 al,OF,CF,ZF,SF,分析结果是否正确,并加以算术验证结果解释:(AL)=FF15,对应的真值是21,OF=1,表明结果是正确的,没有溢出,SF=0,表明结果是正的。

NZ表明结果非零。

3。

乘法指令(1)实现无符号数。

例如 36*15结果:(AX)=021CH=540 CF=1 OF=1结果解释:(AX)=021C,对应的真值是540,CF=1,OF=1,表明结果是?乘积超过了八位,需要从16为寄存器Of=0,cf=0,乘积没有超过八位若用16位寄存器计算,0f。

cf=1,则乘积超过了十六位,需要32为寄存器(2)实现有符号数(-25)*(-6)结果:(AX)=0096H=(+150)补 CF=OF=1结果解释:(AX)=0096,对应的真值150,是CF=0,OF=0,表明结果是乘积是8位8位乘法,CF=1,OF=1,乘积超出了8位,需要从16位寄存器中获取完整的乘积。

算术运算指令

算术运算指令
例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]补的算式:
但是如果我们一旦决定参加运算的操作数是无符号数对于运算结果我们也一定要把结果看待为无符号数若我们决定参加运算的操作数是带符号数补码形式结果就必须看待为带符号数补码形式

二、算术逻辑运算指令

二、算术逻辑运算指令

二、算术运算指令
• • • • • • • •
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类指令是不带进位的加法运算指令(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中。

pentiun指令系统之算术运算指令

pentiun指令系统之算术运算指令
二. 算术运算指令(Arithmetic) 内容:
•提供加、减、乘、除、转换五种基本算术操作;
•利用十进制调整指令和ASCII调整指令对BCD码表示的 十进制数进行算术运算; • 对带符号数与无符号数进行乘、除运算。 (一)加法指令(Addition)
(二)减法指令(Subtraction)
(三)乘法指令(Multiplication) (四)除法指令(Division) (五)类型转换指令(Type (六)BCD码运算指令 Trans)
- 11
CF=1
0 1 1 1 1 1 0 0
CF=1, OF=1
380
CF=1 溢出
-132
OF=1 溢出 负负相加,结果为正 结果错
标志
溢出
若考虑进位CF 所代表的数值, 结果正确
结论:
(1)带符号数相加溢出 根据OF判断带符号数产生溢出?
OF=1 OF=0
同符号数相加,结果符号与其相反,产生溢出; (结果是错误的) 没有产生溢出; (结果是正确的)
功能:将目的操作数送源操作数,相加的结果送目的操 作数 注:XADD指令的源操作数必须为寄存器,目的操作数可 为寄存器或存储器 XADD AX,BX
XADD [1000H],EAX 标志位影响情况:影响SF,ZF,AF,PF,OF。不影响CF。
4、INC (Increment by 1 )加 1 指令
ADD EAX,[BX+2000H] ;存储器+寄存器
ADD BYTE PTR[DI],30H ;存储器+立即数
特点:
• 可以进行8位、16位的无符号数和带符号数的加法运算;
• 源操作数和目标操作数不能同时为存储器, 不能为段寄存器;

51单片机汇编程序设计之算数运算指令

51单片机汇编程序设计之算数运算指令

1) 逻辑“与”指令
汇编指令格式 机器指令格式
操作
ANL A,Rn
58H~5FH
A ← (A)∧(Rn)
ANL A,direct 55H direct
A ← (A)∧(direct)
B←(A)÷(B)的余数
注意:若除数(B)=00H,则结果无法确定,OV置1。 CY总是 被清0。该操作也影响标志位P。
3 加1、减1指令
1) 加1指令 汇编指令格式 INC A INC Rn INC direct INC @Ri INC DPTR
机器代码 04H 08H~0FH 05H direct 06H~07H A3H
操作 A ← (A)-1 Rn ← (Rn)-l direct←(direct)-1 (Ri) ← ((Ri))-1
注意:1.该操作不影响PSW标志位。 2. 51单片机无DEC DPTR指令。
4 十进制调整指令
汇编指令格式 机器码格式 操 作
DA A
D4H
对A进行BCD调整
注意:这条指令一般跟在ADD或ADDC指令后,对累 加器A中的结果进行BCD调整。 该操作影响标志位P。
2 乘法、除法指令
1) 乘法指令
汇编指令格式 机器指令格式
操作
MUL AB
A4H
BA ← (A)×(B)
注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为 0)。CY总是被清0。该操作也影响标志位P。
2) 除法指令
汇编指令格式 机器指令格式
操作
DIV AB
84H
A←(A)÷(B)的商,
【例2】 试编程计算5678H – 1234H的值,结果保存在R6、 R5中。
解:减数和被减数都是16位二进制数,计算时要先进行低8 位的减法,然后再进行高8位的减法,在进行低8位减

算术运算类指令

算术运算类指令

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

汇编语言设计-算术运算指令

汇编语言设计-算术运算指令

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

算术与逻辑运算指令

算术与逻辑运算指令

[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

算术运算类指令

算术运算类指令
√ √ √ √ 累加器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。

微机原理第02章(指令系统)2

微机原理第02章(指令系统)2

加法指令:ADD, ADC和INC 减法指令:SUB, SBB, DEC, NEG和CMP 他们分别执行字或字节的加法和减法运算, 除 INC 和 DEC 不影响 CF 标志外,其他按定 义影响全部状态标志位 操作数组合:
运算指令助记符 reg, imm/reg/mem 运算指令助记符 mem, imm/reg
第2章:5. 求补指令NEG(negtive)
4.取补指令 格式:NEG OPRD (OPRAND ) 功能:OPRD取补 (取反加1) 相当0-操作数,所以算入减法; 且一般CF=1(0-肯定有借位), 只有OPRD=0时CF=0
第2章:例题2.9 求补运算
mov ax,0ff64h neg al ;AL=0-64H=9CH,AX=FF9CH ;OF=0, SF=1,ZF=0,PF=1,CF=1 sub al,9dh ;AL=9CH-9DH=FFH,AX=FFFFH ;OF=0,SF=1,ZF=0,PF=1,CF=1 neg ax ;AX=0-FFFFH=0001H ;OF=0,SF=0,ZF=0,PF=0,CF=1 dec al ;AL=01H-1=0,AX=0000H ;OF=0,SF=0,ZF=1,PF=1,CF=1 neg ax ;AX=0-0=0 ;OF=0,SF=0,ZF=1,PF=1,CF=0
第2章:例题2.10 符号扩展
mov al,64h
;AL=64H (机器数) ,表示10进制数100(真值)
cbw
;将符号0扩展,AX=0064H,仍然表示100
mov ax,0ff00h
;AX=FF00H,表示有符号10进制数-256
cwd
;将符号位“1”扩展,DX.AX=FFFFFF00H ;仍然表示-256

汇编语言设计-算术运算指令

汇编语言设计-算术运算指令

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 指令执行的也是减法操作。

单片机3.4算术运算指令

单片机3.4算术运算指令
②DA A 指令必须在保持前面加法指令后的标志位不变时使用才 能得到正确结果。
③参与相加的二数均为BCD码,调整后得到正确的BCD码结果, 不是将二或十六进制数的加法运算调整成十进制。
14
四、乘法指令 MUL AB
操作:
将A,B两寄存器中的两个无符号8位二进制数相乘,积为16 位,其低8位存放于A,高8位存放于B。
第四节
算术运算指令
程序状态字寄存器PSW各位的意义:
CY 进位位 AC F0 RS1 半进位位 用户标志 RS0 OV 溢出位 P 奇偶位
工作寄存器选择位
★高位进位标志位CY,简称C:
反映算术运算时,最高位D7向更高位有无进位或借位, 若有 CY = 1;若无CY = 0 。 1
10110100
+ 10000001
3.増量指令:INC 第一操作数;指定单元内容加1,结果在原单元。
例: INC A ;(A)+1 送 A
INC R0 ;(R0)+1 送 R A ; 分别运行这两条指令后,A的内容都加1 ;但运行后PSW的内容不同。
ADD A,#01H
8
二、 减法类指令:
10

MOV R0 ,#50H
55
MOV A,#55H
ADD A,#7FH MOV @R0, A INC R0 ADD A,#70H
+ 7F
D4 ; D4 + 70 C=1 C=0 (50H)=D4H (R0) = 51H
MOV @R0, A
INC R0 ADDC A,#22H MOV @R0 ,A
★用户标志F0:可视实际需要规定其意义。
6
一、 加法类指令:
1.ADD A,第二操作数 ;(A)+(第二操作数)送A

算术运算指令

算术运算指令

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

关键词:算术运算;指令;功能;使用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中。

算术运算指令

算术运算指令

一、算术运算指令算术运算中的溢出问题以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个状态标志位都会产生影响。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AND指令可用于复位某些位(同0相与),不影响其他位
OR指令可用于置位某些位(同1相或),不影响其他位
第2章:2.5.2 移位指令
将操作数移动一位或多位,分成逻辑移位 和算术移位,分别具有左移或右移操作
移位指令的第一个操作数是指定的被移位 的操作数,可以是寄存器或存储单元;后 一个操作数表示移位位数:
;最高位不变,最低位进入CF
第2章:2.5.3 循环移位指令
循环移位指令类似移位指令,但要将从一 端移出的位返回到另一端形成循环。分为:
ROL reg/mem,1/CL ;不带进位循环左移 演示 ROR reg/mem,1/CL ;不带进位循环右移 演示 RCL reg/mem,1/CL ;带进位循环左移 演示 RCR reg/mem,1/CL ;带进位循环右移 演示
循环移位指令的操作数形式与移位指令相 同,按指令功能设置进位标志CF,但不影 响SF、ZF、PF、AF标志
第2章:逻辑与指令AND
对两个操作数执行逻辑与运算,结果送目的操作数
AND dest,src
;dest←dest∧src
只有相“与”的两位 都是1,结果才是1;否 则,“与”的结果为0
第2章:逻辑或指令OR
对两个操作数执行逻辑或运算,结果送目的操作数
OR dest,src
;dest←dest∨src
;reg/mem←~reg/mem
按位取反,原来
是“0”的位变为 “1”;原来是“1” 的位变为“0”
第2章:例2.6 逻辑运算
mov al,75h ;AL=75H
and al,32h ;AL=30H
;CF=OF=0, SF=0,ZF=0,PF=1
or al,71h ;AL=71H
;CF=OF=0,SF=0,ZF=0,PF=1
xor al,0f1h ;AL=80H
;CF=OF=0,H,标志不变
第2章: 例2.17 逻辑运算指令的应用
and bl,11110110b ;BL中D0和D3清0,其余位不变
or bl,00001001b ;BL中D0和D3置1,其余位不变
xor bl,00001001b ;BL中D0和D3求反,其余位不变
dec byte ptr [si] ;[si]←[si]-1
第2章:2.5 位操作类指令 (逻辑运算指令)
位操作类指令以二进制位为基本单位进行数据的 操作 当需要对字节或字数据中的各个二进制位操作时, 可以考虑采用位操作类指令 注意这些指令对标志位的影响
1. 逻辑运算指令 AND OR XOR NOT TEST 2. 移位指令 SHL SHR SAR 3. 循环移位指令 ROL ROR RCL RCR
第2章:逻辑右移指令SHR
SHR reg/mem,1/CL
演示
;reg/mem右移1/CL位
;最高位补0,最低位进入CF
第2章:算术左移指令SAL
SAL reg/mem,1/CL
演示
;与SHL是同一条指令
第2章:算术右移指令SAR
SAR reg/mem,1/CL
演示
;reg/mem右移1/CL位
第2章:2. 带进位加和减指令
ADC dest,src
;加法:dest←dest+src+CF ;ADC指令除完成ADD加法运算外,还要 加上进位CF,结果送到目的操作数
SBB dest,src
;减法:dest←dest-src-CF ;SBB指令除完成SUB减法运算外,还要 减去借位CF,结果送到目的操作数
该操作数为1,表示移动一位 该 操 作 数 为 CL , CL 寄 存 器 值 表 示 移 位 位 数 (移位位数大于1只能CL表示)
按照移入的位设置进位标志CF,根据移位 后的结果影响SF、ZF、PF
第2章:逻辑左移指令SHL
SHL reg/mem,1/CL
演示
;reg/mem左移1或CL位
;最低位补0,最高位进入CF
第2章
第2章:2.4 算术运算类指令
算术运算类指令用来执行二进制的算术运 算:加减乘除。 这类指令会根据运算结果影响状态标志, 有时要利用某些标志才能得到正确的结果; 使用他们时请留心有关状态标志 重点掌握
加法指令:ADD、ADC、INC 减法指令:SUB 、SBB、DEC
第2章:例题2.7 加法
sub ah,0f0h ;AH=B3H-F0H=C3H,AX=C36EH ;OF=0,SF=1,ZF=0,PF=1,CF=1
;[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
只要相“或”的两位 有一位是1,结果就是1; 否则,结果为0
第2章:逻辑异或指令XOR
对两个操作数执行逻辑异或运算,结果送目的操作数
XOR dest,src
;dest←dest⊕src
只有相“异或”的两 位不相同,结果才是1; 否则,结果为0
第2章:逻辑非指令NOT
对一个操作数执行逻辑非运算
NOT reg/mem
第2章:4. 增量和减量指令
INC reg/mem
;增量(加1):reg/mem←reg/mem+1
DEC reg/mem
;减量(减1):reg/mem←reg/mem-1 INC指令和DEC指令是单操作数指令 与加法和减法指令实现的加1和减1不同的是: INC和DEC不影响CF标志
inc si
;si←si+1
mov ax,7348h ;AX=7348H add al,27h
;AL=48H+27H=6FH,AX=736FH ;OF=0,SF=0,ZF=0,PF=1,CF=0 add ax,3fffh ;AX=736FH+3FFFH=B36EH ;OF=1,SF=1,ZF=0,PF=0,CF=0
第2章:例题2.7 减法
相关文档
最新文档