算数运算指令

合集下载

算术运算指令

算术运算指令
13
2. 减法指令
(1) 不考虑借位的减法指令SUB 格式: SUB dest, src 操作: dest←(dest)-(src)
注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数
指令例子:
SUB AL,60H SUB [BX+20H],DX SUB AX,CX
14
(2) 考虑借位的减法指令SBB SBB指令主要用于多字节的减法。 格式: SBB dest, src 操作: dest←(dest)-(src)-(CF)
思考: 程序的结果? (AL、BL、CL中数据的大小顺序22 )
3. 乘法指令
进行乘法时: 8位 8位→ 16位乘积 (即 AL mem8/reg8 → AX) 16位 16位→ 32位乘积
(即 AX mem16/reg16 → DX AX) (1) 无符号数的乘法指令MUL mem/reg
9
BUFFER1
ACH F8H 56H 2CH
BUFFER2
BEH 47H 9EH 30H
被 加 数
数 据 段
加 数
...
多字节加法示意图
10
程序段如下:
MOV CX,4 ;置循环次数
MOV SI,0 ;置SI初值为零
CLC
;清进位标志CF
LL: MOV AL,BUFFER2[SI]
ADC BUFFER1[SI],AL ;带进位加
8
ADC指令主要用于多字节加法运算中
例:有两个4字节的无符号数相加: 2C 56 F8 AC + 30 9E 47 BE = ? 设被加数、加数分别存放在BUFFER1及
BUFFER2开始的两个存储区内,结果放回 BUFFER1存储区,如下页图所示。

算术运算类指令

算术运算类指令

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章(09.2)

第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指令.

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、 ADD(Addition)加法指令
指令格式:ADD dest , src ;(dest) (dest)+(src) Src:立即数,寄存器,存储器。 dest:寄存器,存储器。
例:
ADD CL,10 ADD DX,SI ADD AX, MEM ADD DATA[BX], AL ;寄存器+立即数 ;寄存器+寄存器 ;寄存器+存储器 ;存储器+寄存器
双高位判别法
(2)无符号数相加溢出 根据CF判断无符号数产生溢出? CF=1无符号数相加产生溢出,但考虑进位所代表的数 值后,结果并没有错。
(一)加法指令(Arithmetic)
8088具有5种加法操作指令:
1、 ADD(Addition)加法指令 2、 ADC(Add with carry)带进位加法指令 3、 INC(Increment by 1)加 1指令
SUB WORD PTRALPHA[BX][DI],512H;存储器减立即数
这种指令影响标志位: AF、CF、OF、PF、SF、ZF标志。
2、SBB(Subtraction with borrow)带进位减法指令 格式::SBB dest,src;(dest)←(dest)-(src)-CF CF: 进位标志CF的现行值(上条指令CF值)
;存储器+1(字操作)
INC WORD PTR [DI]
INC
DS
; 错
(二)减法指令(Subtraction)
8088有7条减法指令 :
1、SUB(Subtraction)减法指令
2、SBB(Subtraction with borrow)带进位减法指令 3、DEC(Decrement by 1 ) 减 1 指令 4、NEG(Negate) 求补指令 5、CMP(Compare) 比较指令

算术运算Arithmetic指令

算术运算Arithmetic指令

MOV AL,7
MOV BL,8
ADD AL,BL;(AL=0FH);
AAA;
(AH=1,AL=5) 连加?
打*指令一般了解
2
算术运算(Arithmetic)指令(4)
DAA*(Decimal adjust for Addition) 压缩BCD加法调整
(单字节)只对Packed BCD (00-99H) 有意义;
8位除法 DIV CL; DIV BYTE PTR [BX+1]
注意:
除0/溢出 (字节除: 商>255 OR 字:商>65535) 除零中断
默认AX/OPRD(字节) 结果 AH=余数 AL=商
7
算术运算(Arithmetic)指令(八)
IMUL/IDIV 有符号数乘/除法
CBW/CWD 符号扩展
INC BYTE PTR[BX]; INC WORD PTR CS:[DI+20]
1
算术运算(Arithmetic)指令(3)
AAA*(ASCII adjust for Addition) 非压缩BCD加法调整
(单字节)只对Unpacked BCD (00-09H)有意义;
隐含为:AL,AH(AH:00~08,AL:00~09) 等效:IF((AL)&(0FH)>9)OR (AF)=1 THEN (AL)+6; AH+1;AF=CF=1; (AL)&0FH ELSE (AL)&0FH; (应AH=00~08,AL=00~09) 例:MOV AH,0
9
逻辑运算与移位(Logical & shifting)
逻辑运算 . 8086/8088无直接位操作:

二、算术逻辑运算指令

二、算术逻辑运算指令

二、算术运算指令
• • • • • • • •
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中。

算术运算类指令

算术运算类指令

算术运算类指令
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码。

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;⾼字相加。

第3章 计算机算术指令

第3章 计算机算术指令

乘法指令
无符号数乘法指令: MUL SRC
带符号数乘法指令:
IMUL SRC
执行操作: 字节操作数 (AX) (AL) * (SRC) 字操作数 (DX, AX) (AX) * (SRC)
注意:
* * * * AL (AX) 为隐含的乘数寄存器。 AX (DX,AX) 为隐含的乘积寄存器。 SRC不能为立即数。 除CF和OF外,对条件标志位无定义。
注意:
* 除DEC指令不影响CF标志外,均对条件标志位有 影响。
* SUB、SBB和CMP指令是双操作数指令,它们的 两个操作数不能同时为存储器寻址方式,并且两 个操作数的类型要一致。
* DEC和NEG指令是单操作数指令,它们的操作数 不能使用立即数方式 。
错误格式举例
SUB SUB SUB SUB DEC NEG DEC NEG 5,AL × AL,1234H × [BX],[2000H] × [BX],5 × 3 × 4 × [SI] × [DI] ×
算术指令:

加法指令 ADD、ADC、INC 减法指令 SUB、SBB、DEC、NEG、CMP 乘法指令


MUL、IMUL

除法指令 DIV、IDIV
算术运算指令包括二进制运算及十进制运算指 令。算术指令用来执行算术运算,它们中有双 操作数指令,也有单操作数指令。如前所述, 双操作数指令的两个操作数不允许同时使用存 储器寻址方式。单操作数指令不允许使用立即 数方式。算术指令的寻址方式,均遵循这一规 则。
加法指令 加法指令: ADD DST, SRC 执行操作: (DST) (SRC) + (DST) ADD
带进位加法指令: ADC DST, SRC 执行操作: (DST) (SRC) + (DST) + CF

算术运算类指令

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

算术运算指令

算术运算指令

3.2.2算术运算指令
2.
(1) SUB 格式: SUB DST,SRC 操作:(DST)←(DST)-(SRC),目的操作数与源操作数
1)SUB指令不允许两个存储器单元内容相减,即DST和SRC 不能同时为存储器操作数,DST目的操作数不允许使用立即寻
2)SUB 3)对标志位有影响,主要是CF、ZF、OF、SF
注意:一般乘数放在存储器中时,相乘时应在指令操作数中指明为字类型还是字节 类型。
3.2.2算术运算指令
(2) IMUL
格式:IMUL SRC 操作:字节操作数:(AX)← (AL)× SRC 字操作数:(DX,AX)← (AX)× SRC 该指令与MUL 指令字操作一样,仅操作数为有符号数。说明与 MUL相同。
MOV AX,0408H;被除数为非压缩十进制数48
MOV BL,4
AAD
;调整,(AX)=48=30H
DIV BL
;除运算,(AL)=12,(AH)=0
微型计算机原理与接口技术
3.2.2算术运算指令
3. (1) MUL 格式:MUL SRC 操作:字节操作数:(AX)← (AL)× SRC 字操作数:(DX,AX)← (AX)× SRC 该指令要求被乘数必须存放在AL或AX中,乘数必须放在寄存 器或存储器单元中,不能是立即数。乘积存放在AX或DX、 AX 中。
1)通用寄存器存放乘数:MUL REG MUL SI ;(DX,AX)← (AX)× (SI MUL DH ;(AX)← (AL)× (DH) 2)存储器中存放乘数: MUL MEM MUL BETY PTR [SI];(AX)← (AL)× [SI MUL WORD PTR [BUFFER] ;(DX,AX)← (AX)× [BUFFER]

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

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

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. MOV(Move)指令:用于将数据从源操作数传输到目的操作数。

例如:MOV AX, BX 将BX寄存器中的数据传输到AX寄存器中。

2. PUSH(Push)指令:将数据压栈。

例如:PUSH AX 将AX寄存器中的数据压入栈中。

3. POP(Pop)指令:将数据从栈弹出。

例如:POP AX 将栈顶数据弹出然后存入AX寄存器中。

二、算术运算指令1. ADD(Addition)指令:将两个操作数相加。

例如:ADD AX, BX 将AX和BX寄存器中的数据相加并存储在AX寄存器中。

2. SUB(Subtraction)指令:将第二个操作数从第一个操作数中减去。

例如:SUB AX, BX 将AX寄存器中的数据减去BX寄存器中的数据并存储在AX寄存器中。

3. MUL(Multiply)指令:将两个操作数相乘,结果存储在一个乘法寄存器中。

例如:MUL AX, BX 将AX寄存器中的数据与BX寄存器中的数据相乘并存储在AX:DX寄存器对中。

三、逻辑运算指令1. AND(And)指令:对两个操作数逐位执行逻辑与运算。

例如:AND AX, BX 将AX和BX寄存器中的数据逐位执行逻辑与运算并存储在AX寄存器中。

2.OR(Or)指令:对两个操作数逐位执行逻辑或运算。

例如:ORAX,BX将AX和BX寄存器中的数据逐位执行逻辑或运算并存储在AX寄存器中。

3. XOR(Exclusive Or)指令:对两个操作数逐位执行逻辑异或运算。

例如:XOR AX, BX 将AX和BX寄存器中的数据逐位执行逻辑异或运算并存储在AX寄存器中。

四、转移指令1.JMP(JuMP)指令:无条件跳转到一些标号或地址。

例如:JMPLABEL1将程序转移到LABEL1处。

2. JE(Jump Equal)指令:当两个操作数相等时跳转。

汇编语言指令

汇编语言指令

汇编语言指令汇编语言是一种低级语言,用于编写计算机程序。

在汇编语言中,指令起着至关重要的作用,它们直接控制着计算机的运行。

本文将介绍几种常见的汇编语言指令。

1. 数据传送指令数据传送指令用于将数据从一个地方传送到另一个地方。

常见的数据传送指令包括MOV(move)指令和LEA(load effective address)指令。

MOV指令可以将数据从一个寄存器或内存位置传送到另一个寄存器或内存位置。

LEA指令将源操作数的有效地址加载到目标寄存器中。

2. 算术运算指令算术运算指令用于进行各种数学运算,包括加法、减法、乘法和除法等。

常用的算术运算指令有ADD(addition)指令和SUB (subtraction)指令。

ADD指令用于将两个操作数相加,并将结果存储到目标操作数中。

SUB指令可以实现减法运算。

3. 逻辑运算指令逻辑运算指令用于执行逻辑运算,如与、或、非等。

与运算用AND指令表示,或运算用OR指令表示,非运算用NOT指令表示。

这些指令可以对某一位或多位进行逻辑运算,并将结果存储到目标操作数中。

4. 控制转移指令控制转移指令用于改变程序的执行顺序。

常见的控制转移指令包括JMP(jump)、JZ(jump if zero)和JC(jump if carry)等。

JMP指令用于无条件跳转到指定的目标地址。

JZ指令在零标志位为真时跳转,用于实现条件语句。

JC指令在进位标志位为真时跳转,常用于实现循环。

5. 栈操作指令栈操作指令用于对堆栈进行操作。

堆栈是一种后进先出(LIFO)的数据结构,常用于保存和恢复程序的上下文。

常见的栈操作指令有PUSH(push)和POP(pop)。

PUSH指令将一个数据压入堆栈,而POP指令将栈顶数据弹出。

6. 输入输出指令输入输出指令用于与外部设备进行数据的输入和输出。

常见的输入输出指令包括IN(input)和OUT(output)。

IN指令用于从指定的端口读取数据,而OUT指令用于将数据输出到指定的端口。

算术运算指令

算术运算指令

一、算术运算指令算术运算中的溢出问题以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)。

DIV AB ; A&divide;B 商&rarr;A,余数&rarr;B 注意:当除数为 0 时结果不确定,则溢出将 OV 置 1。 5.INC(加 1)和 DEC(减 1)类指令 加 1 类指令共 5 条,其功能是将操作数内容加 1。 INC A ;A+1&rarr;A, A 加 1 INC Rn ;Rn+1&rarr;Rn, Rn 中内容加 1 INC direct ;(direct)+1&rarr;(direct), 直接地址中内容加 1 INC @Ri ;(Ri)+1&rarr;(Ri), Ri 间址中的内容加 1 INC DPTR ;DPTR+1&rarr;DPTR, 数据指针加 1 例 判断 INC R0 和 INC @R0 两条指令结果,比较两者的区别。设 R0=30H,(30H)=00H。 执行 INC R0 ;R0+1=30H+1&rarr;R0, 结果 R0=31H 执行 INC @R0 ;(R0)+1=(30H)+1&rarr;(R0),结果(30H)=01H,R0 中内
程序 MOV A, #34H ;被加数低 8 位数 34H 送 A ADD A, #0E7H ;加数低 8 位数 E7H 与之相加,A=1BH,Cy=1 MOV 40H, A ;A&rarr;40H 即 34H+E7H 结果存入 40H 中(40H=1BH) MOV A, #12H ;被加数高 8 位数 12H 送 A ADDC 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 中。 SUBB A, Rn ;A-Rn-Cy&rarr;A ,A 减寄存器 Rn 内容及进位标志 SUBB A, direct ;A-(direct)-Cy&rarr;A,A 减直接地址内容和位标志
执行 ADD A,R0 结果:A=40H, R0=10H,标志位 P=1, Cy=0, OV=0, AC=0 2.ADDC 类指令(带进位加法 4 条) ADDC A, Rn ;A+Rn+Cy&rarr;A, A 与 R n 内容、进位状态相加,和送 到 A 中 ADDC A, direct ;(direct)+Cy+A&rarr;A, A 与直接地址中内容、进位状态 相加,和送 A ADDC A, @Ri ;(Ri)+Cy+A&rarr;A, A 与 Ri 间址单元中内容、进位状态 相加,和送 A ADDC A, #data ;data+Cy+A&rarr;A, A 与 立即数、进位状态相加,和送 A 与 ADD 类指令的区别是,ADDC 指令相加时连同进位标志 Cy 内容一起相 加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用 ADD 指令。进位位 Cy 加到字节的最低位。 例 写计算 1234H+0FE7H 的程序,将结果存入内部 RAM 的 41H 和 40H 单 元,40H 存低 8 位,41H 存高 8 位。
SUBB A, Ri ;A-(Ri)-Cy&rarr;A, A 减 Ri 间址单元内容和进位位标志 SUBB A, #data ;A-data-Cy&rarr;A, A 减立即数和进位标志 说明: 1) 多字节减法时,低位相减有借位则把 Cy 置 1,否则 Cy 为 0。 2) MCS-51 系列指令中没有不带借位的减法指令,所以在单字节或低位 字节减法时用 SUBB 类指令前要先将 Cy 清 0。 3)减去一个数实际上是加上这个数的相反数(负数),减法运算常常用补 码相加方式。 4.MUL(乘)和 DIV(除)指令 乘法指令只有一条: MUL AB ;A 乘以 B&rarr;B 和 A,结果 16 位,高 8 位存入 B,低 8 位在 A中 若乘积大于 FFH 则将溢出标志 OV 置 1。 除法指令也只有一条:
算数运算指令
算数运算指令 算术运算指令的主要功能是实现算术加、减、乘、除等运算。 1.ADD 类指令是不带进位的加法运算指令(4 条)。 ADD A,Rn ;A+Rn&rarr;A, A 与 Rn 寄存器内容相加,结果送到 A 中 ADD A,direct ;(direct)+A&rarr;A, A 与直接地址内容相加,和送 A ADD A, @Ri ;(Ri)+A&rarr;A, A 与 Ri 间址内容相加,和送 A ADD A, #data ;data+A&rarr;A, A 与立即数相加,和送 A 注意:ADD 类指令相加结果均在 A 中,相加后源操作数不变。若 A 中最 高位有进位,Cy 置 1;若半加位有进位,AC 置 1。A 的结果还影响奇偶标志 位 P。 例 A=30H, R0=10H
容不变,仍为 30H 减 1 类指令共 4 条,其功能是将操作数指定单元内容减 1。 DEC A ;A-1&rarr;A, A 中内容减 1 DEC Rn ;Rn-1&rarr;Rn, Rn 中内容减 1 DEC direct ;(direct)-1&rarr;(direct), 直接地址中内容减 1 DEC @Ri ;(Ri)-1&rarr;(Ri), Ri 间址中的内容减 1 操作过程与加 1 指令类似,这里不再举例。 6.十进制加法调整指令(1 条) DA A 功能:在加法指令后,把 A 中二进制码自动调整成 BCD 码。 例 MOV A, #05H ;05H&rarr;A ADD A, #08H ;05H+08H&rarr;A=0DH
相关文档
最新文档