51 单片机 汇编例题解析

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

START: CLR C MOVX A, @DPTR MOV R2, A MOVX A, @DPTR CLR C
MOV DPTR, #ST1 ; 第一个数的指针
MOV DPTR, #ST2 ; 第二个数的指针
12:58:06
SUBB A, R2;
JNC BIG2 ; 若第二个数大,
XCH A, R2;
始化部分中。
设有50个工作单元, 其首址为外部存储器8000H单元, 则其工作单元清零程 序如下:
12:58:06
CLEAR: CLR A
MOV DPTR, #8000H ; 工作单元首址送指针
MOV R2, 50 ; 置循环次数 CLEAR1: MOVX @DPTR, A INC DPTR ; 修改指针 DJNZ R2, CLEAR1; 控制循环 RET
BIG1: MOV DPTR, #ST3
MOVX @DPTR, A ; RET BIG2: MOVX A, @DPTR; SJMP BIG1 RET
12:58:06
例 5 工作单元清零。
在应用系统程序设计时, 有时经常需要将存储器中各部分地址单元作为工作 单元, 存放程序执行的中间值或执行结果 , 工作单元清零工作常常放在程序的初
12:58:06
正确程序如下:
SUBF : MOV A,R0
JZ ZERO
JB ACC.7 , NEG
MOV R1, #1
ZERO : MOV R1 , #0
SJMP ENDF
NEG : MOV R1 , #0FFH ENDF : RET
12:58:06
12:58:06
例 4 比较两个无符号数的大小。
两个单元中的低半字节, 并成一个字
节后, 存入 50H单元中。
12:58:06
设内部RAM 40H#, 41H单元中分别存放着 8 位二进制数, 要求取出两个单元中的低半字 节, 并成一个字节后, 存入 50H单元中
START: MOV R1, #40H ; 设置R1为数据指针
MOV A, @R1 ;
DEC R1
MOV A, @R0 ADDC A, @R1 MOV @R0, A RET
; 指向加数高位字节
; 被加数高位字节送入A ; 两个高位字节带Cy相加 ; 高位字节的和送被加数高位字节
12:58:06
例 2
将两个半字节数合并成一个一字节数。
设内部RAM 40H#, 41H单元中分 别存放着 8 位二进制数, 要求取出
START: CLR C
; 将Cy清零
MOV R0, #41H ; 将被加数地址送数据指针R0
MOV R1, #51H ; 将加数地址送数据指针R1 AD1: MOV A, @R0 ; 被加数低字节的内容送入A
ADD A,@R1
MOV @R0, A DEC R0
; 两个低字节相加
; 低字节的和存入被加数低字节中 ; 指向被加数高位字节Fra Baidu bibliotek
汇编语言程序设计例题
例 1 两个无符号双字节数相加。
设被加数存放于内部RAM的40H(高位字节), 41H (低位字节) , 加数存放于 50H (高位字节) , 51H(低位字节), 和数存入 40H和41H单元中。
12:58:06
例 1 两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存 放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
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比较不等转移
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
ANL A, #0FH ; SWAP A ; INC R1 XCH A, @R1 ;
取出第一个单元中的内容
取第一个数的低半字节 移至高半字节 修改数据指针 ; ; 取第二个单元中的内容
ANL A, # 0FH ;
ORL A, @R1 MOV 50H, A ; RET
取第二个数的低半字节
拼字 存放结果
12:58:06
二、 多重循环
例 7
10 秒延时程序。
延时程序与 MCS - 51 执行指令的时间有关, 如果 使用 6 MHz晶振, 一个机器周期为 2 μs, 计算出一条 指令以至一个循环所需要的执行时间, 给出相应的循 环次数, 便能达到延时的目的。编写10 秒延时程序
12:58:06
延时程序与 MCS - 51 执行指令的时间有关,如果使用 6 MHz晶振, 一个 机器周期为2 μ s, 计算出一条指令以至一个循环所需要的执行时间 , 给 出相应的循环次数, 便能达到延时的目的。
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
(R0)>0, 则 R1←01H
SUL2 : RET
设外部 RAM 的存储单元 ST1和 ST2 中存放两个不带符号的二进制数 , 找出其中 的大数存入外部 RAM 中的 ST3单元中。
12:58:06
例 4 比较两个无符号数的大小。
12:58:06
程序如下:
ORG ST1 ST2 ST3 1000H EQU EQU EQU 2000H 2100H 2200H ; 清零Cy ; 取第一个数 ; 保存 ; 取第二个数
相关文档
最新文档