算术运算类指令

合集下载

算术运算类指令

算术运算类指令

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位的无符号数和带符号数的加法运算;
• 源操作数和目标操作数不能同时为存储器, 不能为段寄存器;
  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 减法
相关文档
最新文档