_单片机-汇编语言程序设计例题 2

合集下载

第三章 80C51单片机汇编语言程序设计(本科)

第三章 80C51单片机汇编语言程序设计(本科)
返回
ORG START: CLR MOV MOVX MOV INC MOVX SUBB JNC XCH SJMP BIG1: MOVX BIGO: INC MOVX END
8000H C;进位清0 DPTR, #ST1; 设数据指针 A, @DPTR; A←((ST1)),取N1 R2, A; 暂存N1 DPTR; DPTR← ST2(指向N2单元) A, @DPTR; 取N2存于A中 A, R2;N1,N2比较(N2-N1,差在A中) BIG1;N2≥N1,转BIG1,N2<N1,顺序执行 A, R2;N1,N2互换,A ←N1 BIG0 A, @DPTR;A ←N2 DPTR; DPTR← ST3(指向N3单元) @DPTR, A;ST3 ←大数 返回
等、不相等等各种条件判断。
例:两个8位无符号二进制数比较大小。假设在外部RAM中有 ST1、ST2和ST3共3个连续单元(单元地址从小到大),其中ST1
、ST2单元中存放着两个8位无符号二进制数N1,N2,要求找出其
中的大数并存入ST3单元中。
解:(1)分析任务:比较两个数的大小
(2)算法:算术运算、控制转移 (3)程序结构:单分支 (4)数据类型:单字节、二进制、无符号数 (5)数据结构:单元地址升序排列
思考题
3) ORG MOV MOV MOVX ADD MOVX DEC DEC MOVX ADDC 1000H RO, R1, A, A, @R1, R0; R1; A, A, #52H;加数N1的低字节地址送地址指针R0 #55H;加数N2的低字节地址送地址指针R1 @R1; 取N2的低字节 @R0; N1、N2低字节相加 A; 保存N1、N2低字节和 修改加数N1的地址指针内容 修改加数N2的地址指针内容 @R1; 取N2的中间字节 @R0; N1、N2中间字节带低字节和进位相加

单片机汇编语言举例

单片机汇编语言举例

动态显示字符"8051AF";============================== ;定义显示缓冲区DISP1 EQU 40HDISP2 EQU 41HDISP3 EQU 42HDISP4 EQU 43HDISP5 EQU 44HDISP6 EQU 45H;============================== ORG 0000HLJMP START;============================== ORG 0050HSTART:MOV SP,#060H ;初始化堆栈指针;初始化显示缓冲区MOV DISP1,#0FhMOV DISP2,#0AhMOV DISP3,#01hMOV DISP4,#05hMOV DISP5,#00h;MOV A,#80H ;8255方式控制字MOV DPTR,#0FF23H ;8255控制口地址MOVX @DPTR,A ;初始化8255 MAIN:ACALL DISPLAYSJMP MAIN;============================== DISPLAY:MOV R0,#DISP1MOV R2,#0FEH ;字控制MOV R3,#06HDLOOP:MOV A,@R0MOV DPTR,#LEDMAP ;取七段码表首地址MOVC A,@A+DPTRCPL AMOV DPTR,#0FF21H ;8255 PB口地址MOVX @DPTR,AMOV A,R2MOV DPTR,#0FF20H ;8255 PA口地址RL A ;显示位左移MOV R2,AINC R0ACALL DLYDJNZ R3,DLOOPRET;==============================DLY: ;延时子程序MOV R7,#02HDLY1: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DLY1RET;==============================LEDMAP: ; 数码管七段显示码表(共阴)db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 00H;==============================END1到100数码管显示ORG 0000HABIT EQU 20H ;个位数存放处BBIT EQU 21H ;十位数存放处TEMP EQU 22H ;计数器寄存器START:MOV P2,#0FFHMOV TEMP,#0 ;初始化计数器STLOP:ACALL DISPLAYINC TEMPMOV A,TEMPCJNE A,#100,NEXT ;=100重来MOV TEMP,#0NEXT:LJMP STLOP;显示子程序DISPLAY: mov p0,0ffhMOV A,TEMP ;将temp中的十六进制数转换成10进制 MOV B,#10 ;10进制/10=10进制DIV ABMOV BBIT,A ;十位在aMOV ABIT,B ;个位在b;p0口接段码a,b,c,d,e,f,g, p2口接位码,选哪个数码管显示 MOV DPTR,#TAB ;指定查表启始地址MOV R0,#4DPL1:MOV R1,#250 ;显示1000次DPLOP:MOV A,ABIT ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码MOV P1,A ;送出个位的7段代码CLR P2.0 ;开个位显示ACALL D1MS ;显示1msSETB P2.0MOV A,BBIT ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码MOV P1,A ;送出十位的7段代码CLR P2.1 ;开十位显示ACALL D1MS ;显示1msSETB P2.1DJNZ R1,DPLOP ;100次没完循环DJNZ R0,DPL1 ;4个100次没完循环RET;1MS延时(按12MHZ算);====================================================D1MS:MOV R7,#80DJNZ R7,$RET;7段数码管各划的数字排列表TAB:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0F8h,80h,90h ;不带小数点0 1 2 3 4 5 6 7 8 9END步进电机驱动,按键改变转动方向;==============================; 1 2 3 4 5 6 7 8;P1.0: H H H L L L L L;P1.1: L L H H H L L L;P1.2: L L L L H H H L;P1.3: H L L L L L H H; 9 1 3 2 6 4 C 8KEYIN BIT P3.4 ;定义按键输入FLAG BIT 00H;==============================ORG 0000HLJMP START;==============================ORG 0050HSTART:MOV SP,#060H ;初始化堆栈指针MOV P1,#08HMOV R2,#00HCLR FLAGMOV DPTR,#MOV_TABLEMAIN:ACALL KEYPROCJB FLAG,MAIN1INC R2ACALL MOVESJMP MAINMAIN1:DEC R2ACALL MOVESJMP MAIN;============================== MOVE: ;运转控制MOV A,R2ANL A,#07HMOVC A,@A+DPTRMOV P1,AACALL DLYRET;===========MOV_TABLE:DB 09H,01H,03H,02H,06H,04H,0CH,08H ;============================== KEYPROC:JB KEYIN,KEY_DONEACALL DLYACALL DLYJB KEYIN,KEY_DONECPL FLAGJNB KEYIN,$KEY_DONE:RET;============================== DLY: ;延时子程序MOV R7,#0AHDLY1: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DLY1RET;==============================END左右循环点亮ORG 0000HLJMP STARTORG 0030HSTART: MOV R1,#00HDJNZ R1,$MOV SP,#60HLOOP: MOV A,#0FEHLOOP_1: MOV P1,ACALL DELAYRL ACJNE A,#7FH,LOOP_1 ;0111 1111 LOOP_2: MOV P1,ACALL DELAYRR ACJNE A,#0FEH,LOOP_2 ; 1111 1110 SJMP LOOPDELAY: MOV R0,#00HL1: MOV R1,#00H L2: DJNZ R1,L2 DJNZ R0,L1 RETEND所有灯循环点亮ORG 0000HLJMP MAINORG 0100HMAIN:MOV P1,#0FFHLCALL DELAYMOV P1,#00HLCALL DELAYLJMP MAINDELAY:MOV R7,#0D1:MOV R6,#0D2:DJNZ R6,D2DJNZ R7,D1RETEND产生方波/*用定时器T0产生50HZ的方波。

MCS-51单片机指令系统与汇编语言程序设计

MCS-51单片机指令系统与汇编语言程序设计
JBC bit, rel ; 若(bit)=1,则转移(PC)← (PC)+3+rel, 且(bit )←0, 否则顺序执行
docin/sundae_meng
P73 例2.58
ORG 0100H
MOV DPTR,#DATA LOOP2: MOV R1,A
MOV R0,#30H
INC R1
MOV R1,#40H LOOP: MOVX A,DPTR
START:
ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A
docin/sundae_meng
TABLE:
MOV A,20H ANL A,#0F0H
SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $ DB 30H,31H,32H,33H,34H
docin/sundae_meng
ORG 1000H
START: MOV A, 40H
; 将X送入A中
JZ COMP
; 若A为0,转至COMP处
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOV A, #0FFH ; 将1(补码)送入A中
docin/sundae_meng
2.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编 语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确 各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化

汇编语言单片机考试试题和答案

汇编语言单片机考试试题和答案

一.单项选择题(30分)在中断服务程序中至少应有一条()A.传送指令B.转移指令C.加法指令D.中断返回指令2.当MCS-51复位时,下面说法准确の是()A.PC=0000HB.SP=00HC.SBUF=00HD.(30H)=00H3.要用传送指令访问MCS-51片外RAM,它の指令操作码助记符是()A.MOVB.MOVXC.MOVCD.以上都行4.ORG2000H LACLL3000H ORG 3000H RET 上边程序执行完RET指令后,PC=()A.2000HB.3000HC.2003HD.3003H5.要使MCS-51能响应定时器T1中断,串行接口中断,它の中断允许寄存器IEの内容应是()A.98HB.84HC.42HD.22H6.JNZREL指令の寻址方式是()A.立即寻址B.寄存器寻址C.相对寻址D.位寻址7.执行LACLL4000H指令时, MCS-51所完成の操作是( )A保护PCB.4000HPC C.保护现场 D.PC+3入栈, 4000HPC8.下面哪条指令产生信号()A.MOVX A,@DPTRB.MOVC A,@A+PCC.MOVC A,@A+DPTRD.MOVX @DPTR,A9.若某存储器芯片地址线为12根,那么它の存储容量为()A. 1KBB. 2KBC.4KBD.8KB10.要想测量引脚上の一个正脉冲宽度,则TMODの内容应为()A.09HB.87HC.00HD.80H11.PSW=18H时,则当前工作寄存器是()A.0组B. 1组C. 2组D. 3组12.MOVX A,@DPTR指令中源操作数の寻址方式是()A. 寄存器寻址B. 寄存器间接寻址C.直接寻址D. 立即寻址13. MCS-51有中断源()A.5B. 2C. 3D. 614. MCS-51上电复位后,SPの内容应为( )A.00HB.07HC.60HD.70H0003H LJMP2000H ORG000BH LJMP3000H 当CPU响应外部中断0后,PCの值是()A.0003HB.2000HC.000BHD.3000H16.控制串行口工作方式の寄存器是()A.TCONB.PCONC.SCOND.TMOD17.执行PUSHACC指令, MCS-51完成の操作是()A.SP+1SP, ACCSPB. ACCSP, SP-1SPC. SP-1SP, ACCSPD. ACCSP, SP+1SP18.P1口の每一位能驱动()A.2个TTL低电平负载B. 4个TTL低电平负载C.8个TTL低电平负载D.10个TTL低电平负载19.PC中存放の是()A.下一条指令の地址B. 当前正在执行の指令C.当前正在执行指令の地址D.下一条要执行の指令20.8031是()A.CPU B.微处理器 C.单片微机 D.控制器21.要把P0口高4位变0,低4位不变,应使用指令( )A.ORL P0,#0FHB.ORL P0,#0F0HC.ANL P0,#0F0HD.ANL P0,#0FH22.下面哪种外设是输出设备()A.打印机B.纸带读出机C.键盘D.A/D转换器23.所谓CPU是指( )A.运算器和控制器B.运算器和存储器C.输入输出设备D. 控制器和存储器24.LCALL指令操作码地址是2000H,执行完响应子程序返回指令后,PC=( )A.2000HB.2001HC.2002HD.2003H25. MCS-51执行完MOVA,#08H后,PSWの哪一位被置位( )A.CB. F0C.OVD.P26.计算机在使用中断方式与外界交换信息时,保护现场の工作应该是()A.由CPU自动完成B.在中断响应中完成C.应由中断服务程序完成D.在主程序中完成27.关于MCS-51の堆栈操作,正确の说法是()A.先入栈,再修改栈指针B.先修改栈指针,再出栈C. 先修改栈指针,在入栈D.以上都不对28.某种存储器芯片是8KB*4/片,那么它の地址线根数是()A.11根B.12根C. 13根D. 14根29.若MCS-51中断源都编程为同级,当他们同时申请中断时CPU首先响应()A.B. C.T1 D.T030. MCS-51の相对转移指令の最大负跳变距离()A.2KBB. 128BC. 127BD. 256B二.判断题(10分)1.我们所说の计算机实质上是计算机の硬件系统和软件系统の总称。

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

第3章_MCS-51单片机指令系统及汇编语言程序设计2

第3章_MCS-51单片机指令系统及汇编语言程序设计2

3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $

单片机汇编语言入门实例

单片机汇编语言入门实例

一、用单片机控制发光二极管图1为单片机控制发光二极管的实验电路图。

图中用P1口作为输出端,P1口的P1.0~P1.7引脚分别接了8个LED。

实例1:用单片机控制LED闪烁发光源程序如下:MAIN:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP MAINDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND程序说明:1、SETB P1.0:将P1.0口置“1”,既让P1.0输出高电平,让LED 熄灭。

2、LCALL DELAY:LCALL称为子程序调用指令,指令后面的参数DELAY是一个标号,用于标识第6行程序,执行LCALL指令时,程序转到LCALL后面的标号所指示的程序行处执行,如果执行指令过程中遇到RET指令,则程序就返回到LCALL指令下面的一条指令继续执行。

3、CLR P1.0:将P1.0口置“0”,既让P1.0输出低电平,让LED 亮。

4、LCALL DELAY:调用延时子程序DELAY。

5、LJMP MAIN:跳转到第1条指令处执行第1条指令。

6、第6~10条指令是一段延时子程序,子程序只能在被调用时运行,并有固定的结束指令RET。

7、END:不是S51单片机的指令,不会产生单片机可执行的代码,而是用于告诉汇编软件“程序到此结束”,这类用于汇编软件控制的指令称为“伪指令”。

延时程序说明:1、程序中的R6、R7代表工作寄存器的单元,用来暂时存放一些数据。

2、MOV指令的含义是传递数据。

指令“MOV R7,#250”的含义是:将数据250送到R7中。

250前面的“#”号表示250是一个数,而不是一个地址,“#”号后面的数称为立即数。

3、DJNZ指令后面有两个符号,一个是R6,一个是D2。

R6是寄存器,D2是标号。

DJNZ指令的执行过程是:将其后面第一个参数中的值减1,然后看这个值是否等于0,如果等于0,往下执行,如果不等于0,则转移到第二个参数所指定的位置去执行,这里是转移到由D2所标识的这条语句去执行。

单片机原理与运用-第三章答案

单片机原理与运用-第三章答案

第三章单片机的汇编语言与程序设计习题1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?MOV A,59HMOV R0,AMOV A,#00HMOV @R0,AMOV A,#25HMOV 51H,AMOV 52H,#70H解:MOV A,59H ;A=50HMOV R0,A ;RO=50HMOV A,#00H ;A=00HMOV @R0,A ;50H=00HMOV A,#25H ;A=25HMOV 51H,A ;51H=25HMOV 52H,#70H ;52H=70H所以:A=25H R0=50H ;50H=00H 51H=25H2.请选用合适的指令对P0口内容做修改(例如使P0.0~P0.3不变,P0.4~P0.7为0)。

解:MOV A,P0ANL A,0fhMov P0,A3.试问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。

解:访问外部数据存储器指令有:MOVX @DPTR,A MOVX DPTR,#0100H MOV @DPTR,AMOVX A,@DPTR MOVX DPTR,#0200H MOV A,@DPTRMOVX A,@Ri MOVX A,@R0MOVX @Ri,A MOVX @RI,A访问程序存储器指令有:MOVX A,@A+PCMOVX A,@A+DPTR4.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?PUSH 30HPUSH 31HPOP DPLPOP DPHMOV 30H,#00HMOV 31H,#0FFH解:PUSH 30H ;61H=24HPUSH 31H ;62=10H SP=62HPOP DPL ;DPL=10HPOP DPH ;DPH=24H SP=60HMOV 30H,#00H ;30H=00HMOV 31H,#0FFH ;31H=0FFH5.设(A)=40H,(R1)=23H,(40H)=05H。

汇编语言程序设计(第四版)第2章【课后答案】

汇编语言程序设计(第四版)第2章【课后答案】

汇编语言程序设计第四版【课后习题答案】—-囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1) mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4) mov ax,[bx](5) mov ax,[bx+1100h](6)mov ax,[bx+si](7) mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3) mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2。

3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

第4章 MCS-51单片机汇编语言程序设计(2)

第4章 MCS-51单片机汇编语言程序设计(2)
START:MOV DPTR,#TAB : MOV A,R7 ADD A,R7 MOV R3,A MOVC A,@A+DPTR
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1

C51单片机汇编语言程序设计

C51单片机汇编语言程序设计

C51单片机汇编语言程序设计一、二进制数与十六进制数之间的转换1、数的表达方法为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数后加B十六进制数后加H。

2、二进制数与十六进制数对应表二进制十六进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足4位部分用0补齐。

例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再写出对应的十六进制数即可。

0101000011011000111150D8F答案:(1010000110110001111)2=(50D8F)16例:将1001101B转化为十六进制数解:把10011110B从右向左每4位分为1组,再写出对应的十六进制数即可。

100111109E答案:10011110B=9EH4、十六进制数转换为二进制数转换方法为:将每1位十六进制数转换为4位二进制数。

例:将(8A)16转化为二进制数解:将每位十六进制数写成4位二进制数即可。

8A10001010答案:(8A)16=(10001010)2例:将6BH转化为二进制数解:将每位十六进制数写成4位二进制数即可。

6B01101011答案:6BH=01101011B二、计算机中常用的基本术语1、位(bit)计算机中最小的数据单位。

由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。

2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(Word)和字长两个字节构成一个字,2B=1Word。

字长是指单片机一次能处理的二进制数的位数。

如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。

MCS-51汇编语言程序设计

MCS-51汇编语言程序设计
20
判断正误
ORG 0000 LEN1 DATA 31H LEN2 EQU 32H MOV A, LEN1+1 MOV B,LEN2+1 MOV R1,#LEN1 MOV R2,#LEN2 MOV R2,#LEN2+LEN1 ;CNT1 DATA R5 CNT2 EQU R6 ;CNT EQU ADD MOV R3,#LEN1+1 MOV R4,#LEN2+1 MOV DPTR,#TOEND TOEND:SJMP $ LEN1 DATA 31H LEN2 EQU 32H END
用汇编语言与用高级语言进行程序设计很相似。对于比 较复杂的问题可以先根据题目的要求作出流程图,然后 再根据流程图来编写程序。对于比较简单的问题则可以 不作流程因而直接编程。 两者的差别还是很大的。一个很重要的差别就在于用汇 编语言编程时,对于数据的存放位置,以及工作单元的 安排等都要由编程者自己安排。而用高级语言编程时, 这些问题都是由计算机安排的,编程者则不必过问。 主要知识点:顺序程序;分支程序;循环程序; 查表程序;子程序;运算程序 ;
6
基本语法规则3
对于直接地址direct,有多种选择: (1)直接数据地址(各种进制),如MOV A、30H等; (2)标号地址,如MOV A,SUM等, SUM应该在程序中 某处加以定义; (3)带有加减的表达式,设SUM为已定义的标号地址, 如MOV A,SUM十13; (4)特殊功能寄存器名,如MOV A,P2等。
24
程序框架
1. ORG 0000H 2. LJMP MAIN
;跳转至主程序
中断入口地址
3. ORG 0003H 4. LJMP INT0_INT ;跳转至外部中断0的中断服务程序

51 单片机 汇编例题解析

51 单片机 汇编例题解析

12:58:06
例 3 x, y均为8位二进制数, 设 x存入R0, y 存入R1, 求解: y=syn(x)
12:58:06
例 3 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解: y=syn(x)
程序如下:
START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移
MOV R1, #00H; 相等, R1← 0
SJMP SUL2
SUL1: JC NEG ; 两数不等, 若(R0)<0, 转向NEG MOV R1, #01H ; SJMP SUL2 NEG : MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH
(Hale Waihona Puke 0)>0, 则 R1←01H
SUL2 : RET
12:58:06
例 6 位)。
设在内部 RAM的BLOCK单元开始处有长度为LEN个的无符号数据块,
试编一个求和程序 , 并将和存入内部 RAM 的 SUM 单元(设和不超过
8
BLOCK EQU 20H LEN EQU 30H SUM EQU 40H START: CLR A ; 清累加器A MOV R2, #LEN; 数据块长度送R2 MOV R1, #BLOCK ; 数据块首址送R1 LOOP: ADD A, @R1 ; 循环加法 INC R1; 修改地址指针 DJNZ R2, LOOP ; 修改计数器并判断 MOV SUM, A; 存和 RET
12:58:06
正确程序如下:
SUBF : MOV A,R0
JZ ZERO
JB ACC.7 , NEG
MOV R1, #1
ZERO : MOV R1 , #0

第02章单片机指令系统与汇编语言程序设计习题解答

第02章单片机指令系统与汇编语言程序设计习题解答

第02章单⽚机指令系统与汇编语⾔程序设计习题解答第02章单⽚机指令系统与汇编语⾔程序设计习题解答⼀、填空题1. MCS-51单⽚机指令系统中有 111 条指令。

2. MCS-51单⽚机指令中,Rn表⽰ R0、R1、R2、R3、R4、R5、R6、R7中的⼀个。

3. MCS-51单⽚机指令中,@表⽰间接寻址。

4. MCS-51单⽚机指令中,$表⽰当前指令的⾸地址。

5. MCS-51单⽚机寻址⽅式有⽴即数、直接地址、寄存器、寄存器间接、变址、相对、位寻址等七种寻址⽅式。

6. 指令MOVC A, @A+PC的功能是将A的内容与PC当前值相加作为程序存储器地址,再将该地址单元的内容传送到A 。

7. 指令JBC CY, LOOP是 3 字节、 2 个机器周期指令。

8. 指令DA A的功能是对A中当前值进⾏⼗进制调整。

9. 调⽤⼦程序时,将PC当前值保存到堆栈。

10. MCS-51单⽚机堆栈操作的基本原则是先进后出。

⼆、简答题1. MCS-51单⽚机指令⼀般由哪⼏个部分组成?各部分的功能是什么?答:MCS-51单⽚机指令⼀般由标号、操作码助记符、操作数、注释四部分组成。

标号是⼀条指令的标志,是可选字段,与操作码之间⽤“:”隔开;设置标号的⽬的是为了⽅便调⽤或转移。

标号的选择应遵从下列规定:标号由1~8个字母或数字组成,也可以使⽤⼀个下划线符号“_”。

第⼀个字符必须是字母。

指令助记符或系统中保留使⽤的字符串不能作为标号。

标号后⾯需要有⼀个冒号。

⼀条语句可以有标号,也可以没有标号,取决于程序中其它语句是否需要访问这条语句。

操作码规定指令的功能,是⼀条指令的必备字段,如果没有操作码,就不能成为指令。

它与操作数之间⽤“空格”隔开。

操作数是指令操作的对象。

分为⽬的操作数和源操作数两类,它们之间⽤“,”分隔。

操作数是可选字段。

⼀条指令可以有0、1、2、3个操作数。

注释是对指令功能的说明解释。

以“;”开始。

2. 程序中,伪指令ORG和END的作⽤是什么?答:ORG⽤于定义汇编语⾔源程序或数据块存储的起始地址。

【汇编语言程序设计】试题及答案合集 2(1)

【汇编语言程序设计】试题及答案合集 2(1)

汇编语言程序设计试题及答案1.对于有符号的数来说,下列哪个值最大()A:0F8HB:11010011BC:82 D:123Q2.下列有关汇编语言中标号的命名规则中,错误的是()A:通常由字母打头的字符、数字串组成B:标号长度不能超过31个字符C:?和$不能单独作为标号D:.号不可位于标号首3.8088/8086存储器分段,每个段不超过()A.64K个字B.32K个字节C.1兆个字节D.64K个字节4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式()A:寄存器寻址B:相对基址变址寻址C:变址寻址D:基址变址寻址5.若AX= - 15要得到AX=15应执行的指令是()A.NEG AXB.NOT AXC.INC AXD.DEC AX6.8086/8088系统执行传送指令MOV时()A.不影响标志位B.影响DF方向标志C.影响SF符号标志D.影响CF进位标志7.若要求一个操作数中的若干位维持不变,若干位置“1”,可以使用()A:NOT B:OR C:AND D:XOR8.下列指令中段默认为堆栈段的是()A.MOV AX,[BX+SI+10]B.ADD AX,ES:[SI]C.SUB [BX],[BP][DI]D. MOV DX,[1000H]9.关于8086/8088微机系列,下列说法哪个是正确的()A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。

C:在内存空间中,可以无限分配段,且段的大小不受限制。

D:段与段之间可以邻接,也可以重叠。

10.下列关于堆栈的说法,错误的是()A:以“先入后出”为原则。

B:栈区最高地址单元的前一个单元为栈底。

C:运行中SP寄存器动态跟踪栈顶位置。

D:压栈和弹出都是以字节为单位。

11.表示过程定义结束的伪指令是()A.ENDPB.ENDSC.ENDD.ENDM12.BUF1 DB 3 DUP(0,2 DUP (1,2),3)COUNT EQU $-BUF1符号COUNT等价的值是()A.6B.18C.16D.913.下列标志位中,可以用来判断计算结果正负的是()A:PF B:SF C:DF D:OF14.下列指令正确的是()A. MOV [100H], [BX]B.MOV DS, ESC. ADD V[BX], CXD.MOV AX, 34H15.下列哪个寄存器是属于指针寄存器()A:SI B:DX C:SP D:ES二、填空题 (每小题4 分,共 20 分)1.下列程序段求数组FLD的平均值,结果在AL中。

汇编语言程序设计第二次作业

汇编语言程序设计第二次作业

首页一.单选题(共40题,40.0分)1AOV网是一种( )。

•A、有向图•B、无向图•C、无向无环图•D、有向无环图正确答案: D 我的答案:D得分: 1.0分2指令“MOV AX,0FH XOR 1111B”执行后的结果是( )。

•A、0FFFFH→AX•B、0FH→AX•C、1111B→ AX•D、0→AX正确答案: D 我的答案:D得分: 1.0分3已知(AL)=35H, (BL)=57H,执行指令ADD AL, BLDAA后,AL的值为()。

•A、92HB、8CHC、92D、CH正确答案: A 我的答案:A得分: 1.0分4设Huffman树的叶子结点数为m,则结点总数为( )。

•A、2m•B、2m-1•C、2m+1•D、m+1正确答案: B 我的答案:B得分: 1.0分5以下程序段中,有数据2000H的字单元的偏移量分别是( )。

ORG 20HVAR1 DB 0,’0’,20H,0,20HDW VAR1•A、03H•B、21H•C、22H•D、23H•E、24H正确答案: D 我的答案:E得分: 0.0分6图所示二叉树结点的前序遍历的序列为( )。

•A、E、G、F、A、C、D、B•B、 E、A、G、C、F、B、D•C、E、A、C、B、D、G、F•D、E、G、A、C、D、F、B正确答案: C 我的答案:C得分: 1.0分7ORG 100HNUM EQU 42HDA1 DW $+56H……MOV BX,0FFSET DA1上述程序段执行后BX中的值是( )。

•A、42H•B、156H•C、100H•D、157H正确答案: C 我的答案:C得分: 1.0分8对线性表进行二分法查找,其前提条件是( )。

•A、线性表以链接方式存储,并且按关键码值排好序•B、线性表以顺序方式存储,并且按关键码值的检索频率排好序•C、线性表以顺序方式存储,并且按关键码值排好序•D、线性表以链接方式存储,并且按关键码值的检索频率排好序正确答案: C 我的答案:A得分: 0.0分9为实现单步操作,即每执行完一条指令就停下来,必须设置标志位( )。

第二章--第四节--汇编语言程序设计方法(二)

第二章--第四节--汇编语言程序设计方法(二)
VCC GND 31 19 C2 3 0p F Y1 6 . 00 0M HZ 18 E A/VP X1 AT 8 9C5 1 P0. 0 P0. 1 P0. 2 P0. 3 P0. 4 P0. 5 P0. 6 P0. 7 P2. 0 P2. 1 P2. 2 P2. 3 P2. 4 P2. 5 P2. 6 P2. 7 RD WR PSE N AL E /P T XD RXD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 VCC R9 4 . 7K GND SW
A+30HA A(22H) 结束
R0
0010 0000
END
BCD码十进制转换成二进制
例:假如在内部RAM40H单元中存储有一个压缩BCD编码 的两位十进制数,设计一段程序把这个数转换成二进制数 并存入41H单元中。 解题思路: (40H) 16 商为二进制的高四位
余数
余为二进制的低四位
将高四位乘以0AH,再加上低四位即可。
数据排序程序 例:将片内RAM中20H-27H中的数据按照从小到大的顺序重新排列。 解题思路:见下图
RAM地址 原始数据
20H 66H
21H 11H
22H 10H
23H 34H
24H 67H
25H 01H
26H 89H
27H A0H
1
2 3 4 5 6 7
01H
01H 01H 01H 01H 01H 01H
11H
10H 10H 10H 10H 10H 10H
10H
11H 11H 11H 11H 11H 11H
34H
34H 34H 34H 34H 34H 34H

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例实验及课程设计51单片机汇编语言及C语言经典实例D1: MOV R6,#20D2: MOV R7,#248一、闪烁灯DJNZ R7,$ 如图1 所示为一简单单片机系统原理图:在 P1.0 DJNZ R6,D2 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭的时间间隔为 0.2 秒。

DJNZ R5,D1 延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢,下面具体介绍其原理:如图 4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当 P1.0 端口输出高电平,即 P1.0,1 时,根据发光二极管的单向导电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0,0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0端口输出高电平,使用 CLR P1.0 指令使 P1.0 端口输出低电平。

C 语言源程序#include <AT89X51.H> sbit L1=P1^0;void delay02s(void) //延时 0.2 秒子程序 {RET unsigned char i,j,k;图1 单片机原理图 END for(i=20;i>0;i--)for(j=20;j>0;j--) for(k=248;k>0;k--); }void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAY 图2 程序设计流程图LJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时 0.2 秒CLR P1.0SJMP NEX1二、多路开关状态指示如图 3 所示,AT89S51 单片机的 P1.0,P1.3 接四个发光二极管 L1,L4,P1.4,P1.7 接了四个开关 K1,K4,编程将开关的状态反映到发光二极管上。

第4章单片机汇编语言程序设计

第4章单片机汇编语言程序设计
A←X
Y A=0? N A>0? N A←-1 Y N A←X
Y
A=0? N R1←-1
A←1
A>0? Y R1←1 存数
存数
2012-6-5 电气与自动化学院 18
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 2、分支程序设计
程序:
ORG 2000H VAR DATA 40H FUN DATA 41H START:MOV A,VAR JZ SAVE JNB ACC.7,ZHENG MOV A,#0FFH SJMP SAVE ZHENG:MOV A,#01H SAVE: MOV FUN,A SJMP $ END
第四章汇编语言程序设计 第四章汇编语言程序设计 本章重点: §4.1 汇编语言程序设计基础
4.1.3 伪指令
§4.2 MCS-51汇编语言程序设计
4.2.1 顺序结构程序设计 4.2.2分支结构程序设计 4.2.3循环结构程序设计 4.2.4查表程序设计 4.2.5 子程序设计
§习题分析及解答
第四章汇编语言程序设计 4.1.3 伪指令
2012-6-5 电气与自动化学院 9
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 1、顺序结构程序设计
2012-6-5
例4-3:将两个三字节无符号数相加,其中一个加数在内部RAM的 32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单 元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区 的20H单元中 程序: ORG 2000H CLR C MOV @R0,A MOV R0,#32H MOV R1,#35H DEC R0 MOV A,@R0 DEC R1 ADD A,@R1 MOV A,@R0 MOV @R0,A ADDC A,@R1 DEC R0 MOV @R0,A DEC R1 MOV A,@R0 MOV 20H,C ADDC A,@R1 SJMP $ END
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

果存入 R2R3 中。
一个十进制数可表示为:
Dn×10n +Dn-1×10n-1 +… + D0×100
=(…((Dn×10+Dn-1)×10+Dn-2)×10+…)+D0
当n=3时, 上式可表示为:
((D3×10+D2)×10+D1)×10+D0
BCDHEX: MOV R0, #40H
; R0指向最高位地址
所谓查表法, 就是预先将满足一定精度要求的表示变量与 函数值之间关系的一张表求出, 然后把这张表存于单片机的程 序存储器中, 这时自变量值为单元地址, 相应的函数值为该地 址单元中的内容。查表, 就是根据变量 X在表格中查找对应的 函数值 Y, 使 Y=f(X)。
MCS - 51指令系统中, 有两条查表指令:
START: CLR C
MOV DPTR, #ST1 ; 第一个数的指针
MOVX A, @DPTR
MOV R2, A MOVX A, @DPTR CLR C
; 取第一个数
; 保存 ; 取第二个数
MOV DPTR, #ST2 ; 第二个数的指针
SUBB A, R2; 两数比较 JNC BIG2 ; 若第二个数大, 则转 XCH A, R2; 第一个数大 BIG1: MOV DPTR, #ST3
MOV21H, A
MOVA, 20H RLCA
MOV20H, A
MOVA, 21H ; 表首地址+偏移量 ADDC A, DPL MOVDPL, A
MOVA, 20H ADDC A, DPH MOVDPH, A CLR A MOVC A, @A+DPTR; 查表得温度值高位字节 MOV22H, A CLRA INCDPTR
DB 46H
在这个程序中, 查表指令MOVC A, @A+PC到表格首 地址有两条指令, 占用 3 个字节地址空间, 故修改指针应加 3。
例 10 设有一个巡回检测报警装置, 需对 96 路输入进行 控制, 每路有一个额定的最大值, 是双字节数。当检测量大于 该路对应的最大值时, 就越限报警。假设R2 为保存检测路数
例 15 在一个温度检测系统中, 温度模拟信号由 10 位A/D 输入。将A/D结果转换为对应温度值, 可采用查表方法实现。 先由实验测试出整个温度量程范围内的A/D转换结果, 把A/D 转换结果 000H~ 3FFH所对应的温度值组织为一个表存储在
程序存储器中, 那么就可以根据检测到的模拟量的 A/D转换
值查找出相应的温度值。 设测得的A/D转换结果已存入 20H#, 21H单元中(高位 字节在20H中, 低位字节在21H中), 查表得到的温度值存放 在22H#,23H单元(高位字节在 22H中, 低位字节在23H中)。
程序如下: FTMP: MOV DPTR, #TAB CLRC RLCA ; DPTR←表首地址 MOVA, 21H ; (20H)(21H)×2
MOVC A, @A+DPTR; 查表得温度值低位字节
MOV23H, A RET
TAB: DW …
7 数制转换
例 16 将一个字节二进制数转换成 3 位非压缩型BCD码。 设一个字节二进制数在内部RAM 40H单元, 转换结果放入内 部 RAM 50H#, 51H, 52H单元中(高位在前), 程序如下:
MOV R0, #4FH ; 数据指针R0置初值
LOOP: INC R0 INC R2 CJNE @R0, #0DH, LOOP RET
6 查表程序设计
查表程序是一种常用程序, 它广来自使用于 LED显示控制、 打印机打印控制、数据补偿、数值计算、转换等功能程序中,
这类程序具有简单、执行速度快等特点。
(2) 外循环可以一层层向内循环进入, 结束时由里往外一
层层退出。
(3) 内循环可以直接转入外循环, 实现一个循环由多个条
件控制的循环结构方式。
例8 在内部 RAM中从 50H单元开始的连续单元
依次存放了一串字符, 该字符串以回车符为结束标志, 要求测试该字符串的长度。
程序如下: START: MOV R2, #0FFH
DELAY: MOV R5, #100
DEL0:
DEL1: DEL2:
MOV R6, #200
MOV R7, #248 DJNZ R7, DEL2 DJNZ R6, DEL1 DJNZ R5, DEL0
RET
上例程序中采用了多重循环程序 , 即在一个循环体中又包 含了其它的循环程序, 这种方式是实现延时程序的常用方法。 使用多重循环时, 必须注意: (1) 循环嵌套, 必须层次分明, 不允许产生内外层循环交叉。
其工作单元清零程序如下:
CLEAR: CLR A MOV DPTR, #8000H ; 工作单元首址送指针 MOV R2, #50 ; 置循环次数 CLEAR1: MOVX @DPTR, A INC DPTR ; 修改指针
DJNZ R2, CLEAR1; 控制循环
RET
例 6
设在内部 RAM的BLOCK单元开始处有长度为
MUL AB
ADD A, R2 MOV R2, A ; R2×10+( R3×10)高 8 位送R2
HEXBCD: MOV A, 40H
MOV B, #100
DIV AB MOV 50H, A MOV A, #10 XCH A, B DIV AB MOV 51H, A
MOV 52H, B
RET
例 17 设 4 位BCD码依次存放在内存 RAM中 40H~43H 单元的低4 位, 高 4 位都为 0, 要求将其转换为二进制数, 结
ORG 1000H
HEXASC: MOV A, HEX
ANL A, # 0FH
ADD A, # 3; 修改指针
MOVC A, @A+PC
MOV HEX, A
RET
ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H
ORL A, @R1 MOV 50H, A RET
; 拼字 ; 存放结果
例 3 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解: y=syn(x)
例 3 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解: y=syn(x)
程序如下: START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移 MOV R1, #00H; 相等, R1← 0 SJMP SUL2 SUL1: JC NEG ; 两数不等, 若(R0)<0, 转向NEG MOV R1, #01H ; (R0)>0, 则 R1←01H
MOVX @DPTR, A ; 存大数
RET
BIG2: MOVX A, @DPTR; 第二个数大
SJMP BIG1 RET
例 5 工作单元清零。 在应用系统程序设计时 , 有时经常需要将存储器中各部 分地址单元作为工作单元 , 存放程序执行的中间值或执行结 果, 工作单元清零工作常常放在程序的初始化部分中。 设有50个工作单元, 其首址为外部存储器8000H单元, 则
LEN个的无符号数据块, 试编一个求和程序, 并将和存入内
部 RAM的 SUM单元(设和不超过 8 位)。 BLOCK EQU 20H LEN EQU 10H SUM EQU 40H START: CLR A ; 清累加器A MOV R2, #LEN; 数据块长度送R2 MOV R1, #BLOCK ; 数据块首址送R1 LOOP: ADD A, @R1 ; 循环加法 INC R1; 修改地址指针 DJNZ R2, LOOP ; 修改计数器并判断 MOV SUM, A; 存和 RET
汇编语言程序设计例题
例 1 两个无符号双字节数相加。
设被加数存放于内部RAM的40H(高位字节), 41H (低位字节) , 加数存放于 50H (高位字节) , 51H(低位字节), 和数存入 40H和41H单元中。
程序如下:
START: CLR C ; 将Cy清零
MOV R0, #41H ; 将被加数地址送数据指针R0 MOV R1, #51H ; 将加数地址送数据指针R1 AD1: MOV A, @R0 ADD A,@R1 MOV @R0, A DEC R0 DEC R1 MOV A, @R0 ADDC A, @R1 MOV @R0, A RET ; 被加数低字节的内容送入A ; 两个低字节相加 ; 低字节的和存入被加数低字节中 ; 指向被加数高位字节 ; 指向加数高位字节 ; 被加数高位字节送入A ; 两个高位字节带Cy相加 ; 高位字节的和送被加数高位字节
SJMP SUL2
NEG : MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH SUL2 : RET
程序如下:
SUBF : MOV A,R0 JZ ZERO JB ACC.7 , NEG MOV R1, #1
SJMP ENDF
ZERO : MOV R1 , #0 SJMP ENDF NEG : MOV R1 , #0FFH ENDF : RET
例 4 比较两个无符号数的大小。
设外部 RAM 的存储单元 ST1和 ST2
中存放两个不带符号的二进制数 , 找出其中 的大数存入外部 RAM 中的 ST3单元中。
例 4 比较两个无符号数的大小。
程序如下: ORG ST1 ST2 ST3 EQU EQU EQU 1000H 2000H 2100H 2200H ; 清零Cy
二、 多重循环
例 7 10 秒延时程序。
延时程序与 MCS - 51 执行指令的时间有关, 如果 使用 6 MHz晶振, 一个机器周期为 2 μs, 计算出一条 指令以至一个循环所需要的执行时间 , 给出相应的循 环次数, 便能达到延时的目的。编写10 秒延时程序
相关文档
最新文档