第3章-MCS-51系列单片机的指令系统和汇编语言程序

第3章-MCS-51系列单片机的指令系统和汇编语言程序
第3章-MCS-51系列单片机的指令系统和汇编语言程序

第3章MCS一51系列单片机的指令系统

和汇编语言程序

3·1汇编指令

3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。

3·1·2请总结:

(1)汇编语言程序的优缺点和适用场合。

(2)学习微机原理课程时,为什么一定要学汇编语言程序?

3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。

3·1·4要访问片内RAM,可有哪几种寻址方式?

3·1·5要访问片外RAM,有哪几种寻址方式?

3·1·6要访问ROM,又有哪几种寻址方式?

3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。

3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。

3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM?

3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作:

(1)将累加器内容送工作寄存器R6.

(2)将累加器内容送片内RAM的7BH单元。

(3)将累加器内容送片外RAM的7BH单元。

(4)将累加器内容送片外RAM的007BH单元。

(5)将ROM007BH单元内容送累加器。

3·1·12 区分下列指令的不同功能:

(l)MOV A,#24H 与MOV A.24H

(2)MOV A,R0与MOV A,@R0

(3)MOV A,@R0与MOVX A,@R0

3·1·13设片内RAM 30H单元的内容为40H;

片内RAM 40H单元的内容为l0H;

片内RAM l0H单元的内容为00H;

(Pl)=0CAH。

请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。

MOV R0,#30H

MOV A,@R0

MOV RI,A

MOV B,@Rl

MOV @R0,Pl

MOV P3,Pl

MOV l0H,#20H

MOV 30H,l0H

3·1.14 已知:(A)=35H,(R0)=6FH,(Pl)=FCH,(SP)=C0H,试分别写出下列指令的机器码及执行各条指令的结果:

(l)MOV R6,A

(2)MOV @R0,A

(3)MOV A,廿90H

(4)MOV A,90H

(5)MOV 80H,廿81H

(6)MOVX @R0,A

(7)PUSH A

(8)SW AP A

(g)XCH A,R0

3·1.15 已知:(A)=02H,(Rl)=7FH,(DPTR)=2FFCH, 片内RAM(7FH)=70H,片外RAM (FFEH)=llH,ROM (FFEH)=64H,试分别写出下列指令的机器码及执行各条指令的结果。

(l)MOV A,@Rl

(2)MOVX @DPTR,A

(3)MOVC A,@A+DPTR

(4)XCHD A,@Rl

3·1.16 已知:(A)=78H,(Rl)=78H,(B)=04H,C=l,片内RAM (78H)=DDH,片内RAM (80H)=6CH,试分别写出下列指令的机器码及执行各条指令的结果(如涉及标志位,也要写出)。

(l)ADD A,@Rl

(2)ADDC A,78H

(3)SUBB A,#77H

(4)INC Rl

(5)DEC 78H

(6)MUL AB

(7)DIV AB

(8)ANL 78H,#78H

(9)ORL A,#0FH

(10)XRL 80H,A

3·1·17 已知:C=0,累加器和Rl内容分别为无符号数甲和乙,间:执行指令ADDC A,Rl后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?

(1)甲为02H,乙为FFH

(2)甲为02H,乙为F0H

3·1·18 已知:C=0,累加器和Rl内容分别为补码表示的带符号数甲和乙,间:执行指令ADDC A,Rl后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?

(1)甲为78H,乙为05H

(2)甲为88H,乙为FBH

(3)甲为78H,乙为69H

(4)甲为88H,乙为97H

(5)甲为7FH,乙为FEH

(6)甲为7FH,乙为80H

3·1·19 已知:C=0,累加器和Rl内容分别为无符号数甲和乙,间:执行指令STTBB A,Rl 后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?

(1)甲为02H,乙为FFH

(2)甲为FFH,乙为02H

3·1·20 已知:C=0,累加器和Rl内容分别为补码表示的带符号数甲和乙,问:执行指令SUBB A,R1后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?

(1)甲为02H,乙为0lH

(2)甲为0lH,乙为02H

(3)甲为FFH,乙为FFH

(4)甲为FEH,乙为FFH

(5)甲为04H,乙为FFH

(6)甲为FFH,乙为04H

(7)甲为7FH,乙为ClH

(8)甲为ClH,乙为7FH

3·1·21请对下列各组数分别计算"与"、"或"、"异或"的结果:

(1)10011010和00001111

(2)11010011和01011010

(3)11001100和00110011

(4)10101010和11111111

3·1·22 为达到下列要求,请说明应采用何种逻辑操作、采用什么操作数。要求不得改变各未涉及位的内容。

(1)使累加器的最低位置"1"

(2)清除累加器的高4位

(3)使A.2和A.3置"1"

(4)清除A·.3、A.4、A.5、A.6

3·1·93请总结运用"与"、"或"、"异或"指令对字节内容进行修改的各种办法。

3·1·94 写出下列各条指令的机器码,并逐条写出依次执行每一条后的结果和PSw的内容:

(l)CLR A

(2)MOV A,#9BH

(3)MOv B,#0AFH

(4)ADD A,B

3,1·95请详细说明RET和RETI这两条指令的区别。

3·1·96 已知:(A)=0,(Rl)=40H.片内RAM(30H)=0lH,FIRST=2000H,SECOND

=2050H,试分别写出下列指令的机器码及执行各条指令的结果:

(l))FIRST:AIMP SECOND

(2)FIRST:LIMP SECOND

(3)FIRST.SIMP SECOND

(4)FIRST.JZ SECOND

C5)FIRST:CINE A,30H,SECOND

(6)FIRST:LCALL SECOND

(7)SECOND:DJNZ Rl,FIRST

3·1·97 已知:P1.7=1,A.0=0,C=l,FIRST=l000H,SECOND=l020H,试分别写出

下列指令的机器码及执行各条指令的结果:

(l)MOV 26H,C

(2)CPL A.0

(3)CLR Pl.7

(4)ORL C,/P1.7

(5)FIRST:lC SECOND

(6)FIRST:JNB A.0,SECOND

(7)SECOND:JBC Pl.7,FIRST

3·1·28要选用工作寄存器3组,请采用三种不同的指令实现之。

3·1·29列举三种能使累加器A内容清零的指令,并比较其优、缺点。

3·1·30 16位地址共涉及两个字节,请统计在哪些场合按照"先低后高"规则处理,哪些场合却按照"先高后低"规则。

3·1·31分组讨论:

(1)算术操作类指令对标志位的影响。

(2)逻辑操作类指令对字节内容的修改。

(3)程序转移类指令长转移、绝对转移、短转移、绝对转移与相对转移、无条件转移与条件转移的区分;绝对转移指令机器码与转移范围的确定;相对转移指令相对偏移量的计算; 散转指令的查表转移;调用与返主指令的堆栈操作;比较转移指令的格式与功用。

(4)位操作类指令中直接寻址位的表示方式。

3·1·39请统计MCS一51系列单片机有哪些指令可用于数据输入与输出?

3·1·33 请统计MCS一51系列单步机有哪些指令可用于修改并行I/O口端口寄存器的内容?

3·1·34综述MCS一51系列单片机指令系统的特点、所长和所短。已学Z80的学生,试比较两种指令系统的优、缺点。

3·1·35请按MCS一51系列单片机指令的大类,分别统计其单字节、双字节、三字节指令数和单周期、双周期、四周期指令数。

3·1·36试按图3-1所示的格式,整理出MCS一51系列单片机各种指令的速查表(由机器码的第一字节查指令,或倒查)。

机器码助记符操作码操作数源程序

目标程序汇编指令汇编程序汇编语言

汇编语言程序汇编机器汇编人工汇编

3·1.38经过汇编后,下列各条语句的标号将是什

么数值?

ORG 2000H

TABLE: DS l0

WORD: DS l5,20,25,30

FANG: EQU l000H

BEGIN:MOV A,R0

3·1·39下列程序段经汇编后,从2000H开始的各

有关存储单元的内容将是什么? ORG 2000H

TAB: DS 5

DB 10H, 10

DW 2100H

ORG 2050H

DW TAB

DB "WORK"

3·1·40下列程序段经汇编后,从1000H 开始的各有关存储单元的内容将是什么? ORG l000H

TABl: EQU 1234H

TAB2:EQU 3000H

DB "START"

DW TABl ,TAB2

3·2汇编语言程序

3·2·1综述汇编语言程序的书写格式。

3·2·2要将片内RAM 0FH 单元的内容传送去专用寄存器B ,对OFH 单元的寻址可有三种 办法:

(l)R 寻址 (2)R 间址 (3)direct 寻址

请分别编出相应程序,比较其字节数、机器周期数和优缺点。

3·2·3设 (R0)=7EH, (DPTR)=l0FEH

片内RAM 7E 单元的内容为0FFH

7F 单元的内容为38H

试为下列程序的每条指令注释其执行结果。

INC @R0

INC R0

INC @R0

INC DPTR

INC DPTR

TNC DPTR

3·2·4试编程:引用"与"运算,判断某8位二进制数是奇数还是偶数。

3·2·5试编程:引用"或"运算,使任意8位二进制数

的符号位必为"1"。

3·2·6请思考:引用"异或"运算,怎样可使一带符号

数的符号位改变、数据位不变;怎样可使该数必然变

"0"

3·2·7要选择工作寄存器组,可有几种编程办法?

3·2·8 某压力测试的线性处理程序如下,如A/D 转换器

的输出为02H ,问执行程序后(A )=?

MOV P1,#0FFH

MOV A ,P1

MOVC A ,@A+PC

TAB: DB 00H

DB 00H

DB 01H

DB 02H

;

DB FEH

END

3·2·9 设ROM 、片内RAM 、RAM 各有关单元的内容示如下图,问执行下列程序段后

(A )=?

0000 AJMP

030H

ORG 0030H

0030 MOV R0,#32H

MOV A,@R0

MOV R1,A

MOVX A,@R1

MOVC A,@A+DPTR

3·2·10若在片内RAM 30H单元中有2位压缩的BCD码95H,间执行下列程序后,片内RAM 30H单元的内容是什么?31H、32H的内容又是什么?并写出BCD码十进制调整的过程。MOV R0,#30H

MOV A,@R0

ANL A,#0FH

MOV R3,A

MOV A,@R0

SWAP A

ANL A,#0FH

ADD A,R3

DA A

MOV @R0,A

MOV R3,A

INC R0

ANL A,#0FH

MOV @R0,A

INC R0

MOV A,R3

ANL A,#0F0H

SWAP A

MOV @R0,A

RET

3·2·11有程序如下:

CLR C

CLR RS1

CLR RS0

MOV A,#38H

MOV R0,A

MOV 29H,R0

SETB RS0

MOV Rl,A

MOV 26H,A

MOV 28H,C

请: (1)区分哪些是位操作指令?哪些是字节操作指令?

(2)写出程序执行后,片内RAM有关单元的内容。

(3)译成机器码。

(4)按汇编语言程序的标准格式书写,要求有各条指令的存放地址和必要的注释。

(5)如f OSC=l2MHz,计算这段程序的执行时间。

3·2·12 试编程:将两个4位二进制数并存于一个字节。

3·2·13 试编程:将存于片内RAM 40H、41H单元中的16位数求补,结果放回原单元(低字节放40H单元)。

3·2·14 试编程:有两双字节压缩的BCD码数相加,设该两待加数分别按先低后高原则存放在30H、31H和40H、41H单元,和要求放回30H、31H单元。

3·2·15 试编程:将累加器A内容低4位送片外RAM 7AH单元,高4位送片外RAM 7BH 单元,7AH、7BH单元的高4位均清零。

3·2·16试编程:将片内RAM 50H、51H单元两个无符号数中较小的数存于60H单元。3·2·17 试编程:将片内RAM 60H~69H单元中的l0个数相加,和的低8位存入7EH,高8位存入7FH。

3·2·18 试编程:统计从片内RAM 60H单元起所存60个数中"0"的个数,并存入工作寄存器R7。

3·2·19试编程:将ROM中自2000H单元起的100个数,按序移至片外RAM自2080H单元起的内存区间去。

3·2·20 试编程:将ROM中以TAB为初址的32个单元的内容依次传送到片外RAM以00H为初址的区域去(规定用查表指令)。

3·2·21试编写一段子程序,将片外RAM 20H单元中压缩的BCD码转换成共阴的七段笔划信息码,存于片内RAM 20H、21H单元,以待显示(七段笔划信息码的最高位为0)。3·2·22 请编一将A中内容乘10的程序,要求:

(1)不可用MUL指令

1)乘积≤255 2)乘积﹥255

(2)可用MUL指令

1)乘积≤255 2) 乘积>255

规定乘积放在片内RAM的30H单元或30H、0lH单元。

3·2·23 教材例3·4是按总和仍为两位BCD码、无溢出进行编程的;如有溢出,请重编程序。

3·2·24 设教材例3·6程序中的多字节数为010000H,试剖析程序执行的经过与结果。3·2·25 教材例3·7如不是两个数、而是n个数,请重编程序。(如有二数相等,不必建起标志位)。

3·2·26 CJNE指令执行何种操作?上述例3·7示出的程序为什么不用这一指令?如改用这一指令,程序将作何种改动?并请将重编后的汇编语言源程序译成机器码。

3·2·27设晶振为12MHz,请详细剖析(包括计算)下列程序段的性质和用途:

0B0 79 63 DELAY:MOV Rl,#63H

0B2 00 DLl: NOP

0B3 00 NOP

0B4 D9 FC DJNZ Rl,DLl

0B6 22 RET

3·2·28请编写一个能延时1.5ms的子程序,要列出计算。Tcy=1us。

3·2·29请编写两段子程序,分别用指令延时法和定时器定时l0ms,设晶振为12MHz。3·2·30设晶振为12MHz,请编写二段子程序,分别用指令延时法和定时器实现30ms延时。

3·2·30设晶振为12MHz,请编写二段子程序,分别用指令延时法和定时器实现30ms延时。

3·2·31某单片机系统:f OSC=l2MHz,定/计0用于20ms定时,定/计

1用于100次计数,定/计0和定/计1均要求重复工作。问:

(1)外部计数脉冲应从何引脚输入?

(2)试编能达到上述要求的程序。

3·2·32请回答:教材例3·19为什么按"TH0、TL0、TH0"的次序读,却不按"TL0、TH0、TL0"的次序读。

3·2·33阅读下列程序,

(1)说明该程序的功能。

(2)填出所缺的机器码。

(3)试修改程序,使片内RAM的内容达到右下图所示的结果。

7A__ MOV R2,#0AH

__ __ MOV R0,#50H

E4 CLR A

E6 LOOP: MOV @R0,A

08 INC R0

DA__ DJNZ R2,LOOP

DONE:

3·2·34 阅读下列程序,并要求:

(1)说明程序的功能。

(2)写出涉及的寄存器及片内RAM单元的最后结果。

MOV R0,#40H

MOV A,@R0

INC R0

ADD A,@R0

INC R0

MOV @R0,A

CLR A

ADDC A,#0

INC R0

MOV @R0,A

3·2·35 同上题要求,程序如下

MOV A,61H

MOV B,

#02H

MUL AB

ADD A,62H

MOV 63H,A

CLR A

ADDC A,B

MOV 64H,A 3·2·36 同上题要求,程序如下

CLR C

MOV A,R3

RRC A

MOV R3,A

MOV A,R4

RRC A

MOV R4,A 3·2·37 同上题要求,程序如下:

MOV R0,#31H

MOV A,@R0

SWAP A

DEC R0

XCHD A,@R0

MOV 40H.A 3·2·38 同上题要求,程序如下:

MOV R0,#60H

MOV A,#40H

MOV @R0,A

MOVX @R0,A 3·2·39 同上题要求,程序如下:

MOV Rl,#30H

MOVX A,@Rl

MOV @Rl,A

TNC Rl

MOVX A,@Rl

MOV @Rl,A

3·2.40

同上题要求,程序如下:

ORG l000H ABS: MOV R0,#38H

MOV Rl,#48H

MOV R2,#06H LOOP: MOV A,@R0

JNB A,7,NEXT

CPL A

SETB A.7

INC A

NEXT: MOV @Rl,A

INC R0

INC Rl

DJNZ R2,LOOP

DONE:

3·2·41 阅读下列程序,写出程序执行后片外RAM 8008H和800AH单元以及DPTR、Rl、A的内容。

ORG 0100H

START: MOV DPTR, #BLK1

MOV R2, #4

MOV R1, #30H

MOV R0, #30H

LOP1: MOVX A, @DPTR

MOV @R1, A

INC DPTR

INC R1

DJNZ R2, LOP1

MOV R2, #4

CLR C

LOP2: MOVX A, @DPTR

ADDC A, @R0

DA A

MOV @R1, A

INC DPTR

INC R0

INC Rl

DJNZ R2, LOP2

MOV R2, # 4

LOPS: MOV A, @R0

MOVX @DPTR.A

INC R0

INC DPTR

DJNZ R2,LOP3

HERE: SJMP HERE

ORG 8000H

BLKl: DB 96H,74H,32H,l6H

BLK2: DB 65H,94H,87H,29H

BLK3: DS 4

END

3·2·42 阅读下列程序,写出程序执行后片外RAM 7008H、700AH 和700FH 单元以及DPTR、Rl的内容。

ORG0 200H

MOV DPTR,#BLOCK

MOV R0,#30H

MOV Rl,#40H

MOV R2,#08H

MOV R3,#00H

MOV R4,#00H

CHODEV: MOVX A,@DPTR

MOV R5,A

ANL A,#0lA

JNZ DD

MOV A,R5

MOV @R0,A

INC R0

INC R3

SJMP NEXT

DD: MOV A,R5

MOV @Rl,A

INC R1

INC R4

NEXT: INC DPTR

DJNZ R2,CHODEV

MOV R0,#30H

MOV Rl,#40H

EVMOV: MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

DJNZ R3,EVMOV

ODMOV: MOV A,@Rl

MOVX @DPTR,A

INC R1

INC DPTR

DJNZ R4,ODMOV

HERE: SJMP HERE

ORG 7000H

BLOCK DB 69H,47H,32H,61H

DB 56H,49H,27H,78H

BUFFERl DS 3

BUFFER2 DS 5

3·2·43 阅读下列程序,写出程序执行后片外RAM8003H和8005H单元以及DPTR、R2,R0的内容。

ORG 0200H

START: MOV R0,#30H

MOV Rl,#30H

MOV R2,#2

MOV DTPR,#BUFFER

HETOAS: MOVX A,@DPTR

MOV R3,A

SWAP A

ANL A,#0FH

ADD A,#90H

DA A

ADDC A,#40H

DA A

MOV @Rl,A

INC R1

MOV A,R3

ANL A,#0FH

ADD A,#90H

DA A

ADDC A,#40H

DA A

MOV @Rl,A

INC DPTR

INC R1

DJNZ R2,HETOAS

MOV R2,#4

LOOP: MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

DJNZ R2,LOOP

HERE: SJUMP HERE

ORG 8000H

BUFFER DB 2AH,49H

BLOCK DS 4

END

3·2·44 阅读下列程序,写出程序执行后片外RAM 2002H和200l3H单元以及DPTR、SP、R3的内容。

注意: 本程序在RESET后执行

ORG 0100H

MOV DPTR, #DA T

MOVX A, @DPTR

MOV R0, A

SW AP A

ANL A, #0FH

ACALL BTOA

MOV R4, A

MOV A, R0

ANL A, #0FH

ACALL BTOA

MOV R5, A

INC DPTR

MOVX A, @DPTR

MOV Rl, A

SW AP A

ANL A, #0FH

ACALL BTOA

MOV R6, A

MOV A, Rl

ANL A, #0FH

ACALL BTOA

MOV R7, A

INC DPTR

MOV A,R4

MOVX @.DPTR,A

INC DPTR

MOV A.R5

MOVX @DPTR,A

INC DPTR

MOV A,R6

MOVX @DPTR,A

INC DPTR

MOV A,R7

MOVX @ DPTR,A HERE: SJMP HERE

ORG 0200H BTOA: MOV R2,#08H

MOV R3,#00H

ORL A.#30H LOP. RLC A

JNC NEXT

INC R3

NEXT: DJNZ R2,LOP

RLC A

PUSH ACC

MOV A,R3

JNB ACC.O,CONT

POP ACC

ORG A,#80H

SJMP GONE CONT: POP ACC GONE: RET

ORG 2000H

DA T: DW 7954H

DW 0000H

DW 0000H

END

··共·

3·2·45 阅读下列程序写出程序执行后片外RAM 8000H和8002H单元以及Rl、R3、R4的内容。

ORG 0200H

MOV DPTR,#DAT

MOV R0,#0

MOV Rl,#1

MOV R2.#2

MOVX A,@DPTR

MOV R3,A

INC DPTR

MOVX A,@DPTR

ORL A,R3

JZ HERE

MOV DPTR,#DAT

LOOPl: MOV R3,#8

LOOP2: MOVX A.@DPTR

ANL A,Rl

MOV R4,A

JZ NEXT

TNC R0

NEXT: MOV A.Rl

RL A

MOV Rl.A

DJNZ R3,LOOP2

INC DPTR

DJNZ R2,LOOPl

MOV A,R0

MOVX @DPTR,A

HERE: SJMP HERE

ORG 8000H

DAT: DW 4B9FH

DB 0

END

3·2·46阅读下列程序,设f OSC=l2MHz,请回答:

(1)该程序每隔多少时间执行一次检测程序?是怎样安排达到的?

(2)定/计0及定/计1各在什么情况下溢出?列出您的计算。

(3)为程序作出注释。

0000H LJMP 0030H

;主程序

ORG 0030H

START: CLR Tl

MOV TMOD,#5lH

MOV IE,#8AH

MOV TH0,#0D8H

MOV TL0,#0F0H

MOV THl,#0E8H

MOV TLl,#90H

SETB TR0

SETB TR1

;

;

;中断服务程序

ORG 000BH

LJMP 0080H

ORG 0080H

TOOV: SETB T1

MOV TH0,#0DBH

MOV TL0,#0F0H

CLR T1

RETI

ORG 00lBH

LJMP 0090H

ORG 0090H

T1OV: MOV THl,#0E8H

MOV TLl,#90H

;

; ;此起为检测程序

;

RETI

3·2·47阅读本书实验部分第3章"实验五P0口扩展I/O 口"参考程序中自指令MOV TMOD,#50H起的程序,仔细钻研其中定时器/计数器0、定时器/计数器l、R6、R7的用法,写出您的理解、分析与计算。

3·2·48阅读参考书籍,钻研MCS—51系列单片机在怎样的情况下才能单步执行用户程序?

指令系统和汇编语言程序的设计实验

第二章指令系统和汇编语言程序设计实验 本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法, 目的在于通过这些实验可以使学生巩固所学知识, 加深对 MCS-51单片机部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。 第一节指令系统实验 实验一熟悉键盘操作及数传指令编程设计 一、实验目的 1.熟悉软件模拟调试的环境及键盘操作。 2.掌握汇编语言程序设计的方法,加深对指令的理解。 3.学会软件模拟调试和察看修改观察项的方法。 二、实验容 印证数据传送指令的功能、寻址方式以及 PC 指针、 SP 指针、 DPTR 指针、Ri 指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤 1.进入调试软件环境,输入源程序; 2.汇编源程序; 3.用单步方式运行程序; 4.检查并记录各寄存器和存储单元容的变化。 四、程序清单

1. 部 RAM 数据传送 需要查看的数据有 30H,31H,A,R0等。 ORG 0000H MOV R0,#30H MOV 30H,#45H MOV 31H,#46H MOV R2,30H MOV 02H,31H MOV A,#87H MOV 0E0H,30H MOV 30H,A MOV 31H,R0 SJMP $ END 2. 外部数据传送 需要查看的数据有外部数据存储器单元 2000H ,外部程序存储器单元2001H 。 ORG 0000H MOV A,#89H MOV DPTR,#2000H

MOVX DPTR,A INC DPTR CLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END 3. 堆栈操作 需要查看的数据有 50H 、 51H 、 A 及 SP 指针和堆栈区中数据随 PUSH 和POP 指令执行后的变化情况和数据的存放次序等。 1 可用于保护现场和恢复现场的程序 ORG 0000H MOV SP,#5FH MOV 50H,#3BH MOV 51H,#2FH MOV A,#12H

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

(完整版)快速入门单片机汇编语言

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(p0.0—p0.7):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(p1.0—p1.7):其每一位都能作为可编程的输入或输出线。 P2口(p2.0—p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(p3.0—p3.7):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释]

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)比较不相等则转移;

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

快速入门单片机汇编语言

快速入门单片机汇编语 言 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(—):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(—):其每一位都能作为可编程的输入或输出线。 P2口(—):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(—):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 P3口第二功能

Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释] 例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号: Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。 rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

第3章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

指令系统及汇编语言程序设计

第3章指令系统及汇编语言程序设计 一、简答题 1、80C51系列单片机的指令系统有何特点? 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何? 3、访问特殊功能寄存器SFR可以采用哪些寻址方式? 4、访问内部RAM单元可以采用哪些寻址方式? 5、访问外部RAM单元可以采用哪些寻址方式? 6、访问外部程序存储器可以采用哪些寻址方式? 7、为什么说布尔处理功能是80C51单片机的重要特点? 8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问? 9、试根据指令编码表写出下列指令的机器码。 (1)MOV A,#88H (2)MOV R3,50H (3)MOV P1.1,#55H (4)ADD A,@R1 (5)SETB 12H 10、完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指 令序列。 (1)将R0的内容传送到R1; (2)内部RAM单元60H的内容传送到寄存器R2; (3)外部RAM单元1000H的内容传送到内部RAM单元60H; (4)外部RAM单元1000H的内容传送到寄存器R2; (5)外部RAM单元1000H的内容传送到外部RAM单元2000H。 11、11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。试分析执行下列程序段 后上述各单元内容的变化。 MOV A,@R1 MOV @R1,40H MOV 40H,A MOV R1,#7FH 12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH, 试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指 出CY、AC、和OV的值。 (1)MOV A,@R0 (2)ANL 40H,#0FH (3)ADD A,R4 (4)SWAP A (5)DEC @R1 (6)XCHD A,@R1 13、若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、 42H单元中的内容各为多少? MOV A,50H MOV R0,A MOV A,#00H MOV @R0,A MOV A,3BH MOV 41H,A MOV 42H,41H 14、试用位操作指令实现下列逻辑操作。要求不得改变未涉及的位的内容。

指令系统及汇编语言程序设计

指令系统及汇编语言程序设计 2.4 伪指令 伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元的用途。伪指令在汇编过程中由汇编程序进行处理。 2.4.1 数据定义伪指令 数据定义伪指令用于定义变量的类型、给存储器赋初值或给变量分配存储单元。常用的数据定义伪指令有DB、DW和DD等。 格式: [变量名] 伪指令助记符数据表项 功能:定义一个数据存储区,其类型由所定义的数据定义指令而指定。 操作说明:方括号中的变量名为任选项,变量名后面不跟冒号“:”。数据表项可以包含多个数据之间用逗号分隔开。数据定义伪指令助记符有以下三种: (1) DB定义变量类型为字节(BYTE),DB后面的每个数据占一个字节。 (2) DW 定义变量类型为字(WORD),DW后面的每个数据占一个字,即两个字节。在内存中,低字节在前,高字节在后。 (3) DD 定义变量类型为双字(DWORD),后面的每个数据占两个字。在内存中,低位字在前,高位字在后。 例如,有下列数据定义语句 D1 DB 1,-12 D2 DW 1,2010H D3 DD 1,10203040H 数据表项中除了常数、表达式和字符串外,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋初值。相同的操作数重复出现时,可用重复符号“DUP”表示。 其格式为: n DUP(初值[,初值,……]);n表示重复的次数,圆括号中为重复的内容。 下面是用问号或DUP表示操作数的例子: ARRAY DB 1000 DUP(0) VAR DW ?,? 2.4.2 符号定义伪指令 1. 赋值伪指令 格式:变量名 EOU 表达式 功能:将右边表达式的值赋给左边的变量。 操作说明:表达式可以是一个常数、符号、数值表达式或地址表达式。 需要注意的是:EQU伪指令不允许对同一符号重复定义。 EQU伪指令具体应用举例如下: CR EQU ODH ;定义CR为常数(回车的ASCII代码) TAB EQU TABLE-ASCII ;定义变量 DIS EQU 1024*768 ;定义数值表达式 ADR EQU ES:[DI+3] ;定义地址表达式 M EQU MOV ;定义助记符 2.等号(=)伪指令 格式:变量名=表达式 功能:将右边表达式的值赋给左边的变量。 操作说明:等号(=)伪指令的功能与EQU伪指令相仿,它可以对同一个名字重复定义。

MCS-51汇编语言指令集

MCS-51汇编语言指令集 符号定义表 符号 含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数 #data16 16位常数 Addr16 16位的目标地址 Addr11 11位的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 2指令介绍 指令 字节 周期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器 3.ADD A,@Ri 1

将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1

MIPS 指令系统和汇编语言

第四章MIPS指令系统和汇编语言 1.考研预测:出题特点总结 本章是对统考408内容来说,本章是新增的章节。此外北航961大纲中制定了要考MIPS 指令集,从15年961真题来看MIPS是重中之重。但是今年计组并没有指定具体的教材,但大纲明确要求掌握MIPS指令集,所以还是建议考生将《计算机组成与设计:硬件/软件接口》中文版(原版第三版或第四版)作为本章的参考书籍。 本章大致内容是MIPS的基础知识,难度并不大。考生应该将重点放在MIPS指令集的基础上,考察C语言中的语句转换为对应的MIPS指令,所以需要熟练掌握C语言中一些语句对应的MIPS指令实现。本章出题很大可能就是C语言和MIPS汇编语言之间的转换,也可能涉及到第五章CPU指令流水线等内容。 2.考研知识点系统整理:梳理考点,各个击破 3.1 指令系统概述 机器指令要素 操作码:指明进行的何种操作 源操作数地址:参加操作的操作数的地址,可能有多个。 目的操作数地址:保存操作结果的地址。 下条指令的地址:指明下一条要运行的指令的位置,一般指令是按顺序依次执行的,所以绝大多数指令中并不显式的指明下一条指令的地址,也就是说,指令格式中并不包含这部分信息。只有少数指令需要显示指明下一条指令的地址。

指令执行周期 3.2 指令格式 一台计算机指令格式的选择和确定要涉及多方面的因素,如指令长度、地址码结构以及操

作码结构等,是一个很复杂的问题,它与计算机系统结构、数据表示方法、指令功能设计等都密切相关。 指令的基本格式 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下: ( 其中A1为第一操作数地址,A2为第二操作数地址,A3为操作结果存放地址。 这条指令的含义:(A1)OP(A2)→A3 式中OP表示双操作数运算指令的运算符号,如“+”或“–”等。 (2)二地址指令

汇编语言指令集

汇编语言指令集 一、数据传输指令 1. 通用数据传送指令. MOV(MOVe) 传送字或字节. MOVS(MOVe String) 串传送指令 MOVSX先符号扩展,再传送. MOVZX先零扩展,再传送. PUSH把字压入堆栈. POP把字弹出堆栈. PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD先交换再累加.( 结果在第一个操作数里) XLAT(TRANSLATE) 字节查表转换. ── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535. 3. 目的地址传送指令. LEA (Load Effective Address)装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS (Load DS with pointer)传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES (Load ES with pointer)传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF (Load AH with Flags)标志寄存器传送,把标志装入AH. SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器. PUSHF (PUSH the Flags)标志入栈. POPF (POP the Flags)标志出栈.

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

单片机汇编语言实验教程(1).

本文由zaoangy贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 实验一熟悉MCS-51寻址方式及传送类指令 一.实验目的: 1.熟悉uVision2集成调试环境 2.熟悉 MCS-51寻址方式及传送类指令二.uVision2集成调试环境的使用uVision2是德国Keil Software公司用于多种嵌入式微处理器的一个理想、快速、 可靠的程序调试器。此调试器包含一个高速模拟器,能够让你模拟整个8051 系统,包括片上外围.....器件和外部硬件。 1.创建项目uVision2是以项目来管理你的任务,它可以使你的8051应用系统设计变得简单。要创建一个应用,你需要按下列步骤进行操作:①第一次使用,首先为我们编写的实验程序在D盘上新建一个文件夹D:\单片机实验;②启动uVision2,新建一个项目文件并从器件库中选择一个器件,操作步骤如下:直接在桌面上点击uVision2程序图标就可以启动它。要新建一个项目文件,从uVision 2的Project菜单中选择New Project,这将打开一个标准的Windows对话框,此对话框要求你输入项目文件名,例如为实验一新建项目:D:\单片机实验\ex1.vu2。紧接着,Select Device for Target,即为你的项目选择一个CPU。我们选择Gene ric下的8032。 2.新建一个源文件你可以用菜单选项File-New来新建一个源文件。这将打开一个空的编辑窗口让你输入你的源代码。编辑后,我们把我们的实验程序保存为D:\单片机实验\dpj1.asm。 3.将你的源文件加入到你的项目中在你的P roject Workspace窗口双击Target1及Suorce Group1,将你的目标系统一直展开到看到源文件组,如图1(a所示。右击Suorce Group1,出现Add files选项, 选择它可打开一个标准的文件对话框,从对话框中选择你刚刚生成的文件dpj1.asm 。 (a (b

相关文档
最新文档