当前位置:文档之家› 单片机运算指令

单片机运算指令

单片机运算指令
单片机运算指令

单片机运算指令

例1 R0中有常数30H,而30H地址中有常数50H

执行MOV A, R0后,A=30H,R0不变。

执行MOV A, @R0后A=50H,而不是30H,这条指令的功能是把R0中内容为地址的单元的书送入A,R0中是30H也就是把30H 地址中内容50H送入A。

例2 若(40H)=20H,(50H)=30H

执行MOV 40H, 50H; (50H) →(40H)

结果:(40H)=30H,50H地址中内容仍为30H。

例3若A=40H,R0=30H,

执行MOV @R0, A ;A→(R0)

结果:(30H)=40H,A与R0皆不变,即A=40H,R0=30H。

该指令功能是把A中内容送入R0间址单元即R0中内容为地址的单元。

例4执行MOV DPTR, #2040H;2040H→DPTR

结果:DPH=20H, DPL=40H

DPTR是片外RAM地址指针,只有这一条指令是传送16位数据。

2.MOVC类指令及功能(2条)

MOVC A, @A+PC ;PC+1→PC, (A+PC) →A

MOVC A, @A+DPTR ;(A+DPTR) →A

功能:该类属于查表指令,利用这两条指令很方便地查找放在程序存储器中数据表格的内容。

例5程序

1000H MOV A, #10H ;10H→A

1002H MOVC A, @A+PC ;PC+1→PC,PC=1003H,(A+PC)=(10H+1003H)→A

...

1010H 02H

1011H 04H

1012H 06H

1013H 08H

程序执行结果:A=08H

用MOVC A, @A+PC指令需注意两点:

1)指令中的PC是执行完本条指令后的PC值,即PC等于本条指令地址加1。

2)A是修正值,它等于查表指令和欲查数据相间隔字节数。A的范围是0~255,一次该指令只能查找本指令后的256B范围内的表格,故称为近程查表。

例6 程序

1000H MOV A, #01H ;01H→A

1002H MOV DPTR, #6000H ;6000H→DPTR

1005H MOVC A,@A+DPTR ;(A+DPTR)=(01H+6000H)=(6001H) →A

...

6001H 0AH

6002H 0BH

6003H 0CH

6004H 0DH

程序执行结果:A=0AH,查到了地址为6001H单元中的数据。

用MOVC A, @A+DPTR指令查表特点:A, DPTR都可以改变,因此可在64KB范围内查表,故称为远程查表。这条指令更方便。

3.MOVX类指令(4条)

MOVX A, @DPTR ;(DPTR) →A,DPTR间址单元内容送A

MOVX @DPTR, A ;A→(DPTR), A 中内容送入DPTR间址单元

MOVX A, @Ri ;(Ri) →A,Ri间址单元内容送A

MOVX @Ri, A ;A→(Ri), A中内容送Ri间址单元

MOVX类指令功能:这四条指令专门用来与外部数据存储区传送数据。CPU与外部RAM传送数据时只能用间接寻址方式。

例7 把外部数据存储单元2000H中的数据送到4000H单元中,设2000H中有数据30H。

程序各条指令执行结果

MOV DPTR, #2000H ;2000H DPTR, DPTR=2000H

MOVX A, @DPTR ;(DPTR) A即(2000)A,A=30H

MOV DPTR, #4000H ;4000H→DPTR, DPTR=4000H

MOVX @DPTR, A ;A→(DPTR)即A→(4000H), (4000H)=30H

例8把内部RAM50H单元数据送到片外20H单元,设50H中单元存有数据10H。

程序各条指令执行结果

MOV A,50H ;(50H) 各条指令执行结果A, A=10H

MOV R0,#20H ;20H→R0, R0=20H

MOVX @R0, A ;A→(R0)即A→(20H)则20H=10H

.交换指令

XCH A, Rn ;Rn A, Rn与A内容交换

XCH A,direct ;(direct) A, 直接地址内容与A内容交换

XCH A, @Ri ;(Ri) A,Ri间址内容与A内容交换

XCHD A, @Ri ;(Ri.3~Ri.0) A.3~A.0, Ri间址内容低4

位与A中低4 位内容交换

SWAP A ;A.3~A.0 A.7~A.4, A中高4位与低4位

交换

例9若R0=30H, A=F0H, (30H)=46H

执行 XCH A, R0 ;结果:A=30H,R0=F0H, R0与A 内容交换

执行 XCH A, @R0 ;结果:A=46H, (30H)=F0H, R0中不变,

;实际上是(R0)

若执行XCHD A, @R0 ;结果:A=F6H,(30)H=40H

;A与(30H)中低4位交换,高4位不变

执行SWAP A ;结果:A=0FH, 高低4位互换

5.堆栈操作指令(2条)

PUSH、POP属堆栈操作指令,其功能是把直接地址中的内容压入堆栈保存,或从堆栈中取出(弹出)数据到直接地址中。

PUSH direct ;SP+1→SP, (direct)→(SP)

;直接地址内容压入堆栈顶

POP direct ;(SP)→(direct), SP-1→SP

;堆栈栈顶内容弹出到直接地址

注意:堆栈是用户自己设定的内部RAM中的一块专用存储区,使用堆栈时一定先设堆栈指针。堆栈遵循后进先出的原则安排数据。压入数据时SP先加1,再压入;弹出时,先弹出数据,SP再减1。

例10堆栈指针为30H,为保护现场把A和B中的内容压入堆栈保护,然后根据需要再把两者弹出。设A中为30H,B中为01H。

程序执行结果

MOV SP, #30H ;30H→SP, SP=30H设堆栈指针为30H

PUSH ACC ;SP+1→SP=31H, A→(SP)即A→(31H),(31H)=30H

PUSH B ;SP+1→SP=32H, B→(SP)即B→(32H),(32H)=01H

POP B ;SP→B即(32H)→B, B=01H, SP-1→SP=31H

POP ACC ;SP→A即(31H)→A, A=30H, SP-1→SP=30H

从此例可以看出压入、弹出过程SP的变化规律

例11:ROM的2000H单元内容送R0;送内部RAM的20H单元;送外部RAM的20H单元

ORG 0000H 这个应该能看懂了吧

MOV A, #00 这个是给A累加器辅初值

MOV DPTR, #2000H 十六位的数要存放到DPTR中的,这个书上有介绍

MOVC A, @A+DPTR 查找存放在ROM中的数据

MOV R0, A 将刚才存到A累加器的内容传给R0

MOV 20H, A 将累加器的内容传给20H单元

MOV DPTR, #20H 将20H单元的内容传给DPTR

MOVX @DPTR, A 将累加器的内容传给外部存储器的20H单元

END

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

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

ADD A,Rn ;A+Rn→A, A与Rn寄存器内容相加,结果送到A中

ADD A,direct ;(direct)+A→A, A与直接地址内容相加,和送A

ADD A, @Ri ;(Ri)+A→A, A与Ri间址内容相加,和送A

ADD A, #data ;data+A→A, A与立即数相加,和送A

注意:ADD类指令相加结果均在A中,相加后源操作数不变。若A中最高位有进位,Cy置1;若半加位有进位,AC置1。A的结果还影响奇偶标志位P。

例12A=30H, R0=10H

执行ADD A,R0 结果:A=40H, R0=10H,标志位P=1, Cy=0, OV=0, AC=0

2.ADDC类指令(带进位加法4条)

ADDC A, Rn ;A+Rn+Cy→A, A与R n内容、进位状态相加,和送

到A中

ADDC A, direct ;(direct)+Cy+A→A, A与直接地址中内容、进位状态

相加,和送A

ADDC A, @Ri ;(Ri)+Cy+A→A, A与Ri间址单元中内容、进位状态

相加,和送A

ADDC A, #data ;data+Cy+A→A, A与立即数、进位状态相加,和送A

与ADD类指令的区别是,ADDC指令相加时连同进位标志Cy内容一起相加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用ADD指令。进位位Cy加到字节的最低位。

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

程序

MOV A, #34H ;被加数低8位数34H送A

ADD A, #0E7H ;加数低8位数E7H与之相加,A=1BH,Cy=1

MOV 40H, A ;A→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单元中

SUBB类指令是带借位减法指令,其功能是将A中被减数减去源操作数指出的内容,再减去借位标志Cy(原进位标志)状态,差值在A中。

SUBB A, Rn ;A-Rn-Cy→A ,A减寄存器Rn内容及进位标志

SUBB A, direct ;A-(direct)-Cy→A,A减直接地址内容和进位标志

SUBB A, Ri ;A-(Ri)-Cy→A, A减Ri间址单元内容和进位位标志

SUBB A, #data ;A-data-Cy→A, A减立即数和进位标志

说明:

1)多字节减法时,低位相减有借位则把Cy置1,否则Cy为0。

2)MCS-51系列指令中没有不带借位的减法指令,所以在单字节或低位字节减法时用SUBB类指令前要先将Cy清0。

3)减去一个数实际上是加上这个数的相反数(负数),减法运算常常用补码相加方式。

4.MUL(乘)和DIV(除)指令

乘法指令只有一条:

MUL AB ;A×B→B和A,结果16位,高8位存入B,低8位在A中

若乘积大于FFH则将溢出标志OV置1。

除法指令也只有一条:

DIV AB ;A÷B商→A,余数→B

注意:当除数为0时结果不确定,则溢出将OV置1。

5.INC(加1)和DEC(减1)类指令

加1类指令共5条,其功能是将操作数内容加1。

INC A ;A+1→A, A加1

INC Rn ;Rn+1→Rn, Rn中内容加1

INC direct ;(direct)+1→(direct), 直接地址中内容加1

INC @Ri ;(Ri)+1→(Ri), Ri间址中的内容加1

INC DPTR ;DPTR+1→DPTR, 数据指针加1

例判断INC R0和INC @R0两条指令结果,比较两者的区别。设R0=30H,(30H)=00H。

执行INC R0 ;R0+1=30H+1→R0, 结果R0=31H

执行INC @R0 ;(R0)+1=(30H)+1→(R0),结果(30H)=01H,R0中内

容不变,仍为30H

减1类指令共4条,其功能是将操作数指定单元内容减1。

DEC A ;A-1→A, A中内容减1

DEC Rn ;Rn-1→Rn, Rn中内容减1

DEC direct ;(direct)-1→(direct), 直接地址中内容减1

DEC @Ri ;(Ri)-1→(Ri), Ri间址中的内容减1

操作过程与加1指令类似,这里不再举例。

6.十进制加法调整指令(1条)

DA A

功能:在加法指令后,把A中二进制码自动调整成BCD码。

例MOV A, #05H ;05H→A

ADD A, #08H ;05H+08H→A=0DH

DA A ;结果调整A=13H,即是13的BCD码

注意:DA A指令只能跟在ADD或ADDC加法指令后,不适用于减法。

逻辑运算及移位指令分析

逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。

这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。

RL A ;累加器A中的内容左移一位

RR A ;累加器A中的内容右移一位

RLC A ;累加器A中的内容连同进位位CY左移一位

RRC A ;累加器A中的内容连同进位位CY右移一位

[2]. 累加器半字节交换指令(1条)

这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。

SWAP A ; 累加器中的内容高低半字节互换

[3]. 求反指令(1条)

这条指令将累加器中的内容按位取反。

CPL A ; 累加器中的内容按位取反

[4]. 清零指令(1条)

这条指令将累加器中的内容清0。

CLR A ; 0→(A),累加器中的内容清0

[5]. 逻辑与操作指令(6条)

这组指令的作用是将两个单元中的内容执行逻辑与操作。如果直接地址是I/O地址,则为“读—修改—写”操作。ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。

ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。

ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。

ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。

ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。

ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。

[6]. 逻辑或操作指令(6条)

这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。

ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。

ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。

ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。

ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。

ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。

[7]. 逻辑异或操作指令(6条)

这组指令的作用是将两个单元中的内容执行逻辑异或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。

XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。

XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。

XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。

XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。

XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中

3算术运算指令实验

2.3 算术运算指令实验 一、实验目的 ·掌握单字节的加减法指令的使用。 ·掌握单字节的乘除法指令的使用。 ·掌握用Keil调试汇编源程序的方法。 ·掌握用Proteus调试汇编源程序的方法。 二、实验预备知识 算术运算指令对程序状态寄存器PSW中的相关位会产生不同的影响。具体如下:◇执行加法指令时,当和的第3位或第7位有进位时,分别将AC、CY标志位置1;否则为O。如果第6位向第7位有进位而第7位没有向前进位,或者如果第7位向前有进位而第6位没有向第7位进位,OV=1,否则OV-O。该操作也影响标志位P。 ◇执行减法指令时,如果第7位有借位,则CY置1,否则清O。若第3位有借位,则 AC置1;否则清O。两个带符号数相减,还要考查OV标志,若OV为1,表示差数溢出,即破坏了正确结果的符号位。该操作也影响标志位P。 ◇执行乘法指令时,若乘积大子OFFH,则OV置1,否则清o(此时B的内容为0)。 CY总是被清O。该操作也影响标志位p。 ◇执行除法指令时,若除数(B) -OOH.则结果无法确定,OV置l。CY总是被清O。该操作也影响标志位P。 三、实验内容 将算术运算指令分成两类,分别编写两个小程序,以完成数据的加减法、乘除法运算。 1.参考程序i-hn减法运算 (1)将立即数# B5H、#36H、#89H分别传送至内部RAM区40H、R2、A中。 (2)将内部RAM区40H中的内容与A中的内容相加,然后再与R2中的内容相加,结果存放至内部RAM区50H中。 (3)将A中的内容与内部RAM区40H中的内容相减,结果存放至内部RAM区60H中。 2.参考程序2——乘除法运算 (1>将立即数#75H、#31H分别传送至内部RAM区15H、33H中。 (2)将内部RAM区15H单元的内容与33H单元的内容相乘。 (3)将乘积的高8位和低8位分别传送至内部RAM区31H、30H中。 (4)将内部RAM区15H单元的内容除以33H单元的内容。 (5)将商和余数分别传送至内部RAM区41H、40H中。四、实验参考程序

逻辑运算类指令

逻辑运算类指令 1.对累加器A的逻辑操作: CLR A ;将A中的值清0,单周期单字节指令,与MOV A,#00H效果 相同。 CPL A ;将A中的值按位取反 RL A ;将A中的值逻辑左移 RLC A ;将A中的值加上进位位进行逻辑左移 RR A ;将A中的值进行逻辑右移 RRC A ;将A中的值加上进位位进行逻辑右移 SWAP A ;将A中的值高、低4位交换。 例:(A)=73H,则执行CPL A,这样进行: 73H化为二进制为01110011, 逐位取反即为10001100,也就是8CH。 RL A是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。 例:A中的值为68H,执行RL A。68H化为二进制为01101000,按上图 进行移动。01101000化为11010000,即D0H。 RLC A,是将(A)中的值带上进位位(C)进行移位。

例:A中的值为68H,C中的值为1,则执行RLC A 1 01101000后,结果是0 11010001,也就是C进位位的值变成了0,而(A) 则变成了D1H。 RR A和RRC A就不多谈了,请大家参考上面两个例子自行练习吧。 SWAP A,是将A中的值的高、低4位进行交换。 例:(A)=39H,则执行SWAP A之后,A中的值就是93H。怎么正好 是这么前后交换呢?因为这是一个16进制数,每1个16进位数字代表4 个二进位。注意,如果是这样的:(A)=39,后面没H,执行SWAP A 之后,可不是(A)=93。要将它化成二进制再算:39化为二进制是10111,也就是0001,0111高4位是0001,低4位是0111,交换后是01110001,也 就是71H,即113。 练习,已知(A)=39H,执行下列指令后写出每步的结果 CPL A RL A CLR C RRC A SETB C

第八讲 算术运算类指令

第八讲算术运算类指令 教学方法:讲授法 教学目的: 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

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

实验二 算术运算实验

实验二算术运算实验 一、实验目的 1、掌握MASM for Windows 环境下的汇编语言编程环境使用; 2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志 位的影响及测试方法; 4、掌握无符号数和有符号数运算区别及编程方法; 5、掌握BCD 码调整指令的使用方法 二、软硬件实验环境 1、硬件环境:惠普64 位一体化计算机及局域网; 2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。 三、实验基本原理 算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。 1) 标志位 在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。 表1标志名和状态符号的对照表参照表 2) 加减法指令 ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。 3) 乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV 表示带符号数除法指令。 4) 符号位扩展指令 CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。 5) BCD码的调整指令 在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。 组合的BCD码加法调整指令DAA; 组合的BCD码减法调整指令DAS; 非组合的BCD码加法调整指令AAA; 非组合的BCD码减法调整指令AAS; 乘法的非组合BCD码调整指令AAM; 除法的非组合BCD码调整指令AAD。 8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。 表2数据类型的数据运算表 四、实验步骤与内容 1)对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响: ①实验分析 本实验要求简单,仅对指定三组数进行基本运算。只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。 需要注意的主要有以下几点: 1.在进行加法和乘法运算时,会出现对高位的进位扩展。因此,在记录结

练习(算术运算及逻辑移位指令3题目)

练习 算术运算与逻辑移位指令 1、若AX=0ABCDH,BX=7F8FH,CF=1。分别执行0886 CPU指令 (1)ADD AX,BX (2)ADC AX,BX (3)SBB AX,BX (3)NEG AX (5)AND AX,BX (6)OR AX,BX (7)XOR AX,BX (8)IMUL BL 后,AX寄存器中的内容,并指出标志寄存器SF、ZF、AF、PF、CF及OF的状态。 2、若CX=6700H,DX=78FFH,CF=1,求分别执行指令 (1)ADD CX,DX (2)ADC CX,DX (3)SUB CX,DX (4)SBB CX,DX (5)AND CX,DX (6)OR CX,DX (7)XOR CX,DX 后,CX和DX中的内容。并指出标志寄存器SF、ZF、AF、PF、CF和OF的状态。 3、X,Y分别为下列各组数,当它们分别进行加、减、AND、OR、XOR运算后,其标志位,SF、OF、CF、PF、ZF的状态如何? (1)X=21H;Y=43H (2)X=9AH;Y=0BCH (3)X=48H;Y=8DH (2)X=54H;Y=54H 4、若AX=98ABH,BX=A8BCH,求执行指令ADD AX,BX后,AX与BX中的内容,并指出SF、ZF、AF、PF、CF和OF的状态。 5、针对下列各条指令执行后的结果,填入目的操作数的值及标志位的状态。 6、若AX=FFF8H,BX=FFFAH,求执行IMUL BX后,DX与AX中的内容,并指出标

志位OF与CF的状态。 7、若AX=FFFEH,BX=FFFDH,求执行指令IMUL BX后,DX与AX中的内容。指出标志位OF与CF的状态。 8、设AL=85H,BL=2AH,均为带符号数,求指令 IMUL BL的执行结果。 9、若AL=78H,BL=87H, (1)求执行指令 ADD AL,BL DAA 之后,AL=?标志位AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 10、若AL=75H,BL=48, (1)求执行指令 ADD AL,BL DAA 之后,AL=?标志位AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 11、若有一个4字节数,放在寄存器BX间址的内存中(低地址对应低字节),要求这个4字节整数整个左移一位如何实现?右移一位又如何实现? 12、若有一个四字节数,放在寄存器DX与AX中(DX放高16位),要求这个四字节数整个左移一位如何实现?右移一位又如何实现? 13、分别编写一程序使 (1)AX寄存器高3位清0; (2)BX寄存器高3位置1; (3)CX寄存器高4位取反; (4)DX寄存器高3位不变,其余位清0。

熟悉并使用算术逻辑操作类指令

微处理器原理课实验日志 一、实验题目:熟悉并使用算术逻辑操作类指令 二、实验结果 本次实验的目的是为了让我们熟悉算术运算类指令,熟悉逻辑运算类指令,掌握算术运算类指令对标志位的影响。本次实验分为验证性和操作性,对于验证性实验要求在自己理解程序的基础上去运行程序,查看运行结果。操作性实验要求自己编写程序实现相关要求,最后运行查看结果。 第一个程序是验证性(加法减法指令),代码为: MOV A,#12H MOV R0,#24H MOV 21H,#56H ADD A,#12H MOV DPTR,#4316H ADD A,DPH ADD A,R0 CLR C SUBB A,DPL SUBB A,#25H INC A SETB C ADDC A,21H

INC R0 SUBB A,R0 MOV 24H,#16H CLR C ADD A,@R0 此程序的功能为:熟悉加法减法指令,尤其是ADD与ADDC、还有就是在SUBB中注意什么时候Cy标志位清零的运用;DPH、DPL 的运用等。最后在没有运行程序之前对程序进行简单的运算,累加器A中的数据是0xE0=#83H,程序运算结果如下: 按照实验要求第二个程序代码为: MOV 30H,#34H MOV 31H,#2AH MOV 32H,#0FAH MOV 33H,#48H MOV R0,#30H MOV A,@R0 INC R0 MOV B,@R0 MUL AB MOV R1,A MOV R2,B MOV A,@R0 INC R0 MOV B,@R0 DIV AB MOV R3,A MOV R4,B

本程序的重点是分析乘法中高八位存在B寄存器中和低八位存在累加器A中,除法运算A累加器中存放的是商,B寄存器中存放的余数。所以,分析得到乘法运算中A累加器中存放的是88H,B寄存器中存放是08H;除法运算中A累加器存放的是00H,B寄存器中存放的是2AH.程序运算的结果如下: 按照第三个程序是移位指令代码为: MOV A,#39H CPL A RL A CLR C RRC A SETB C RLC A SWAP A 此程序的运行结果应该是:0C6H、8DH、46H、8DH、D8H。 操作性实验,按照要求书写代码如下:

8051单片机常用指令

3.2.1数据传送与交换类指令 共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指 9.堆栈操作 3.2 分类指令 在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。 Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。 (Ri):Ri间址寻址指定的地址单元。 ((Ri)):Ri间址寻址指定地址单元中的内容。 dir:8位直接字节地址(在片内RAM和SFR存储空间中)。 #data8:8位立即数。 #datal6:16位立即数。 addrl6:16位地址值。 addrll:11位地址值。 bit:位地址(在位地址空间中)。 rel:相对偏移量(一字节补码数)。 下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。 3.2.1数据传送与交换类指令

共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指 令;数据交换指令以及准栈操作指令。

9.堆栈操作 PUSH dir ;SP十1-6P,(dir)一(SP) POP dir ;((SP))一dir,SP-1--P , 例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。 例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。 综合例把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。方法一(直接地址传送法): MOV A ,50H

Maple 常用计算命令

Maple 常用计算命令 《Maple 指令》7.0版本 第1章章数 1.1 复数 Re,Im - 返回复数型表达式的实部/虚部 abs - 绝对值函数 argument - 复数的幅角函数 conjugate - 返回共轭复数 csgn - 实数和复数表达式的符号函数 signum - 实数和复数表达式的sign 函数5 1.2 MAPLE 常数 已知的变量名称 指数常数(以自然对数为底) I - x^2 = -1 的根 infinity 无穷大 1.3 整数函数 ! - 阶乘函数 irem, iquo - 整数的余数/商 isprime - 素数测试 isqrfree - 无整数平方的因数分解 max, min - 数的最大值/最小值 mod, modp, mods - 计算对 m 的整数模 rand - 随机数生成器 randomize - 重置随机数生成器 1.4 素数 Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第i个素数 nextprime, prevprime - 确定下一个最大/最小素数 1.5 数的进制转换 convert/base - 基数之间的转换 convert/binary - 转换为二进制形式 convert/decimal - 转换为 10 进制 convert/double - 将双精度浮点数由一种形式转换为另一种形式convert/float - 转换为浮点数 convert/hex - 转换为十六进制形式 convert/metric - 转换为公制单位 convert/octal - 转换为八进制形式 1.6 数的类型检查 type - 数的类型检查函数 第2章初等数学 2.1 初等函数 product - 确定乘积求和不确定乘积 exp - 指数函数

实验一传送类和逻辑运算类指令练习

实验一 3.1 传送类和逻辑运算类指令练习 系别专业:电子系12级电信2班学号:3121003210 姓名:李书杰指导老师:刘志群老师 3.1.1 实验要求 1、参照第1章的介绍,观察TD-NMC+实验平台中各模块的位置及相应引脚的引出线。 2、复习传送类、逻辑类指令及程序的相关知识。 3、实验之前,请详细阅读第1、2章的内容,知道使用软件实验的步骤。 3.1.2 实验设备 PC 机一台,TD-NMC+教学实验系统 3.1.3 实验目的 1、了解TD-NMC+实验平台上各主要元器件及其插座的安装分布。 2、熟悉单片机仿真实验软件Keil C51的使用。 3、体会8051单片机传送和逻辑运算类指令的功能,掌握汇编语言设计和调试方法 3.1.4 实验内容 实验1程序: (1)实验前请分析程序,计算下表各寄存器和存储单元的理论值并填入下表的 (2)编辑、编译、运行调试该程序,通过数据窗口和寄存器窗口查看各寄存器和存储单元的值并填入下表的第二空栏处,比较实验值和理论值是否相同。 实验1表

(3)软件调试程序时尽量采用单步执行或断点执行的方法,能跟踪程序的执行,还比较容易发现程序的错误。 实验2 编写一个程序,把片外RAM 7000H、7001H的低位相拼后送入7002H单元。其实验参考流程图如图3.1.1所示。 观察窗口,若(7000H)=03H,(7001H)=04H,那么(7002H)=34H。 3.1.5 思考题 1.上机实验后,你认为使用Keil软件应注意什么问题? 解:在使用Keil时应将文件保存以.ASM的格式。 2.MOVX、ANL、ORL和XCHD的功能? 解: MOVX外部寻址指令。ANL将两个指令相加。ORL两个 指令的或运算。XCHD将两个指令互换。 3.若把片外RAM7000H的高位、7001H的低位相拼后送入 7002H单元,程序该如何编写? 解:MOV DPTR, #7000H MOVX A, @DPTR INC DPTR MOV B, A MOVX A, @DPTR INC DPTR

51单片机指令

3.2 分类指令 在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。 Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。 Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。 (Ri):Ri间址寻址指定的地址单元。 ((Ri)):Ri间址寻址指定地址单元中的内容。 dir:8位直接字节地址(在片内RAM和SFR存储空间中)。 #data8:8位立即数。 #datal6:16位立即数。 addrl6:16位地址值。 addrll:11位地址值。 bit:位地址(在位地址空间中)。 rel:相对偏移量(一字节补码数)。 下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。 3.2.1数据传送与交换类指令 共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指

令;数据交换指令以及准栈操作指令。 9.堆栈操作 PUSH dir ;SP十1-6P,(dir)一(SP)

POP dir ;((SP))一dir,SP-1--P , 例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。 例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。 综合例 把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。方法一(直接地址传送法): MOV A ,50H 数据传送与交换类指令是各类指令中数量最多、使用最频繁的一类指令,编程时应能十分熟练地灵活运用

单片机指令英文全称

51单片机汇编指令集(指令集带英文翻译) 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set)有进位则转移;

8086指令系统之算术运算类指令

8086 指令系统之算术运算类指令 2007-04-17 07:51 1 加法指令 1.1 加法指令 ADD ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem ADD mem,imm/reg ;mem←mem+imm/reg 2.17a: 例 2.17a:加法运算 mov add mov mov add add al,0fbh ;al=0fbh al,07h ;al=02h word ptr[200h],4652h ;[200h]=4652h bx,1feh ;bx=1feh al,bl ;al=00h word ptr[bx+2],0f0f0h ;[200h]=3742h
ADD 指令按照状态标志的定义相应设置这些标志的 0 或 1 状态。例如 在 07+FBH→02H 运算后:标志为 OF=0、SF=0、ZF=0、AF=1、PF=0、CF=1;用调 试程序单步执行后,上述标志状态依次为 NV、PL、NZ、AC、PO、CY。 同样进行 4652h+f0f0h→3742H 运算后,标志为 OF=0、SF=0、ZF=0、 AF=0、PF=1、CF=1;调试程序依次显示为 NV、PL、NZ、NA、PE、CY。注意,PF 仅反映低 8 位中“1”的个数,AF 只反映 D3 对 D4 位是否有进位。 1.2 带进位加法指令 ADC ADC reg,imm/reg/mem ;reg←reg+imm/reg/mem+CF ADC mem,imm/reg ;mem←mem+imm/reg+CF ;mem←mem+imm/reg+CF 加法运算外, CF, ADC 指令除完成 ADD 加法运算外,还要加进位 CF,其用法及对状态标志的 指令一样。 影响也与 ADD 指令一样。ADC 指令主要用于与 ADD 指令相结合实现多精度 数相加。 数相加。 2.17b: 例 2.17b:无符号双字加法运算 mov ax,4652h ;ax=4652h add ax,0f0f0h ;ax=3742h,CF=1 mov dx,0234h ;dx=0234h adc dx,0f0f0h ;dx=f325h,CF=0 上述程序段完成 DX.AX = 0234 4652H + F0F0 F0F0H = F325 3742H。 1.3 增量指令 INC INC reg/mem ;reg/mem←reg/mem+1 增量)。 INC 指令对操作数加 1(增量)。

逻辑运算指令

逻辑运算指令 1.ANL类指令(6条) ANL类是逻辑与指令,其功能是将源操作数作数内容和目的操作数内容按位相“与”,结果存入目的操作数指定单元中,源操作数不变。 ANL A, Rn ;A∩Rn→A ANL A, direct ;A∩(direct) →A ANL A, @Ri ;A∩(Ri) →A ANL A, #data ;A∩data→A ANL direct, A ;(direct)∩A→(direct) ANL direct, #data ;(direct)∩data→(direct) 例设A=F6H,(30H)=0FH 执行 ANL A, 30H ;A∩ (30H) →A 操作如下: 11110110 (F6H) ∩ 00001111 (0FH)注意:按位相“与” 00000110 (06H) 结果:A=06H, 30H地址内容不变,即(30H)=0FH 若执行ANL 30H, A ;(30H)∩ A→(30H) 操作同上,结果放在30H地址中,A中内容不变,即(30H)=06H, A=F6H。 2.ORL类指令(6条) ORL类指令是逻辑或指令,其功能是将源操作数作数内容和目的操作数内容按位逻辑“或”,结果存入目的操作数指定单元中,源操作数不变。 ORL A, Rn ;A∪Rn→A ORL A,direct ;A∪(direct) →A ORL A, @Ri ;A∪(Ri) →A ORL A, #data ;A∪data→A ORL direct, A ;(direct)∪A→(direct) ORL direct, #data ;(direct)∪data→(direct) “或”运算和“与”运算过程类似,这里不再举例。 3.XRL类指令(6条) XRL类是异或指令,其功能是将两个操作数指定内容按位“异或”,结果存于目的操作数指定单元中。“异或”原则是相同为“0”,相异为“1”。 XRL A, Rn ;A⊕Rn→A XRL A, direct ;A⊕(direct) →A XRL A, @Ri ;A⊕(Ri) →A

算术和逻辑运算指令

第5章算术和逻辑运算指令 罗文坚 中国科大计算机学院 https://www.doczj.com/doc/d510738315.html,/~wjluo/mcps/

本章内容 ?加法、减法和比较指令 ?乘法和除法指令 ?BCD码和ASCII码算术运算指令?基本逻辑运算指令 ?移位和循环移位指令 ?串比较指令

加法格式ADD REG/MEM, REG/MEM/IMM 功能源操作数、目的操作数相加,结果存入目的操 作数 标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响 带进位加格式ADC REG/MEM, REG/MEM/IMM 功能源操作数、目的操作数以及进位标志CF相加,结果存入目的操作数 标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响

加1格式INC REG/MEM 功能目的操作数加1 标志除CF标志位,其余状态标志都受影响 交换并相加格式XADD REG/MEM, REG 功能(80486以上)源操作数和目的操作数相交换,并将两者之和存入目的操作数 标志所有状态标志都受影响,根据加法结果设置

?加法指令注意事项: 1.源操作数和目的操作数不能同时为内存单元 (MEM)。 2.不允许与段寄存器(SREG)相关的加法。 3.XADD指令的源操作数在寄存器(REG)中。 4.标志寄存器中状态位随运算结果而变化,但INC 指令不影响CF标志。 5.指令中操作数是带符号数还是无符号数由程序员 解释。 注意:第4章的数据传送指令不改变状态标志。

Example 1 ?例、试用加法指令对两个8位16进制数5EH 和3CH 求和,并分析加法运算指令执行后对标志位的影响。 ?解:MOV AL, 5EH ;AL=5EH (94) MOV BL, 3CH ;BL=3CH (50) ADD AL, BL ;结果AL=9AH 101010011100001111100101 运算后标志:ZF=0, AF=1, CF=0, SF=1, PF=1, OF=1。 ?若程序员认为两个加数是无符号数,则运算结果位9AH ,即154。 ?此时,SF 标志和OF 标志没有意义。 ? 若程序员认为两个加数是有符号数,则运算溢出,结果无效。?此时,CF 标志没有意义。

算术运算指令

◆算数类指令经常会影响标志位,搞清楚以下两个概念: ?对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是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=4652h add ax,0f0f0h ;ax=3742h,CF=1 mov dx,0234h ;dx=0234h adc dx,0f0f0h ;dx=f325h,CF=0 ;DX.AX=0234 4652H +F0F0 F0F0H =F325 3742H 3.增量指令INC(increment;INC指令对操作数加1(增量);INC reg/mem) 操作数:reg/mem 注意: 1.不影响进位CF标志,按定义设置其他状态标志。(仅不影响CF,还会影响其他) 2.主要用于对计数器和地址指针的调整,而不用来做单纯的算术计算。 3.当使用存储器操作数时,不得出现二义性。 ?减法类: 4.减法指令SUB(目的操作数减去源操作数,结果送到目的操作数;sub 目的操作数,源 操作数) 目的操作数:reg,mem 源操作数:imm,reg,mem 注意:

单片机课后习题解答

练习练习练习 第二章单片机结构及原理 1、MCS-51单片机内部包含哪些主要功能部件它们的作用是什么 答:(1)一个8bit CPU是微处理器的核心,是运算和逻辑计算的中心。 (2)片内震荡器及时钟电路:提供标准时钟信号,所有动作都依据此进行。 (3)4K ROM程序存贮器:存贮程序及常用表格。 (4)128B RAM 数据存贮器:存贮一些中间变量和常数等。 (5)两个16bit定时器/计数器:完全硬件定时器 (6)32根可编程I/O口线:标准8位双向(4个)I/O接口,每一条I/O线都能独立地作输入或输出。 (7)一个可编程全双工串行口。 (8)五个中断源。 2、什么是指令什么是程序 答:指令是规定计算机执行某种操作的命令。 程序是根据任务要求有序编排指令的集合。 3、如何认识89S51/52存储器空间在物理结构上可以划分为4个空间,而在逻辑上又可以划分为3个空间 答:89S51/52存储器空间在物理结构上设有4个存储器空间:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。在逻辑上有3个存储器地址空间:片内、片外统一的64KB程序存储器地址空间,片内256B数据存储器地址空间,片外64KB的数据存储器地址空间。 4、开机复位后,CPU使用的是哪组工作寄存器他们的地址是多少CPU如何确定和改变当前工作寄存器组 答:开机复位后,CPU使用的是第0组工作寄存器,地址为00H~07H,CPU通过改变状态字寄存器PSW中的RS0和RS1来确定工作寄存器组。 5、什么是堆栈堆栈有何作用在程序设计时,有时为什么要对堆栈指针SP重新赋值如果CPU在操作中要使用两组工作寄存器,SP应该多大 答:堆栈是一个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。堆栈指针SP复位后指向07H单元,00H~1FH为工作寄存器区,20H~2FH为位寻址区,这些单元有其他功能,因此在程序设计时,需要对SP重新赋值。如果CPU在操作中要使用两组工作寄存器,SP应该至少设置为0FH。 6、89S51/52的时钟周期、机器周期、指令周期是如何分配的当振荡频率为8MHz时,一个单片机周期为多少微秒 答:时钟周期为时钟脉冲频率的倒数,他是单片机中最基本的、最小的时间单位。机器周期是指完成一个基本操作所需要的时间,一个机器周期由12个时钟周期组成。指令周期是执行一条指令所需要的时间,由若干个机器周期组成。 若fosc=8MHz,则一个机器周期=1/8×12μs=μs 7、89S51/52扩展系统中,片外程序存储器和片外数据存储器共处同一地址空间为什么不会发生总线冲突 答:访问片外程序存储器和访问数据存储器使用不同的指令用来区分同一地址空间。 8、程序状态字寄存器PSW的作用是什么常用状态标志有哪些位作用是什么 答:程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。各个标志位的意义如下: (C y):进位标志位。 (AC):辅助进位标志位,又称为半进位标志位。

实验二 算术逻辑运算及移位操作

实验二算术逻辑运算及移位操作 一、实验目的 1.熟悉算术逻辑运算指令和移位指令的功能。 2.了解标志寄存器各标志位的意义和指令执行对它的影响。 二、实验预习要求 1.复习8086指令系统中的算术逻辑类指令和移位指令。 2.按照题目要求在实验前编写好实验中的程序段。 三、实验任务 1.实验程序段及结果表格如表1.2: 表1.2 标志位CF ZF SF OF PF AF 程序段1: MOV AX, 1018H MOV SI, 230AH ADD AX, SI ADD AL, 30H MOV DX, 3FFH ADD AX,BX MOV [20H], 1000H ADD [20H], AX PUSH AX POP BX 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 程序段2: MOV AX, 0A0AH ADD AX, 0FFFFH MOV CX, 0FF00H ADC AX, CX SUB AX, AX INC AX 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0

OR CX, 0FFH AND CX, 0F0FH MOV [10H], CX 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 程序段3: MOV BL, 25H MOV BYTE PTR[10H], 4 MOV AL, [10H] MUL BL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 程序段4: MOV WORD PTR[10H],80H MOV BL, 4 MOV AX, [10H] DIV BL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 程序段5: MOV AX, 0 DEC AX ADD AX, 3FFFH ADD AX, AX NOT AX SUB AX, 3 OR AX, 0FBFDH AND AX, 0AFCFH SHL AX ,1 RCL AX ,1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 1 1 0 2.用BX 寄存器作为地址指针,从BX 所指的内存单元(0010H)开始连续存入三个无符号数(10H 、04H 、30H),接着计算内存单元中的这三个数之和,和放 在0013H 单元中,再求出这三个数之积,积放0014单元中。写出完成此功能的 程序段并上机验证结果。 3.写出完成下述功能的程序段。上机验证你写出的程序段,程序运行的最后结果(AX)=? (1) 传送15H 到AL 寄存器; 2题答案 MOV BX.10H MOV CX,BX INC BX MOV SI,BX INC BX MOV AX,[CX] ADD AX,[BX] ADD AX,[SI] MOV [13H],AX MOV AX,[CX] MUL WORDPTR[BX] MUL WORDPTR[SI] MOV [14H],AX F 10H 12H 10H 4H 30H

相关主题
文本预览
相关文档 最新文档