找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 887|回复: 0
打印 上一主题 下一主题
收起左侧

我解答某师兄在网上提问有关51单片机汇编编程的几个习题

[复制链接]
跳转到指定楼层
楼主
ID:858964 发表于 2020-12-15 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
========================================
【第1题】
已知从外部数据存储器的1560H单元开始,
共有60个存贮单元中均存放有8位无符号整数,
试用MCS-51指令编写一源程序,
求其中低4位全为0的数据个数(例如60H,90H等),
结果存入2500H单元。
【答】:
First:     MOV   DPTR, #1560H ;外部数据块首址
           MOV   R2, #60      ;外部数据块数据个数
           MOV   R3, #0
Check:     MOVX  A, @DPTR     ;读入数据指针所指的一个数
           ANL   A, #00001111B         
           JNZ   Next         ;低4位非全0, 查下一个
           INC   R3           ;低4位全0的数据个数累加
Next:      INC   DPTR         ;数据指针加1,查下一个数
           DJNZ  R2, Check    ;待查数据个递减1,未为0则继续查
Finish:    MOV DPTR, #2500H
           MOV A, R3
           MOVX @DPTR,A       ;低4位全为0的数据个数存入2500H单元
           END
========================================
【第2题】
已知从外部数据存储器的2630H开始,
共有50个存贮单元中各存放有一个不相同的8位无符号整数,
试用MC-51指令编写一源程序,找出其中的最大值,
将该最大值存入1200H单元,
该最大值所存放单元地址低8位的存入1201H单元,
该最大值所存放单元地址高8位的存入和1202H单元。
【答】:
First:  MOV  DPTR, #2630H  ;数据块首址
        MOV  R2, #50       ;数据块的单元个数
        MOVX  A, @DPTR
        MOV  R3,A          ;将首个数暂存于R3
Check:  INC  DPTR
        MOVX A, @DPTR
        MOV  R4, A         ;将下一个数暂存于R4
        CLR  C             ;减法运算前借位清0
        SUBB A, R3         ;比较两数大小
        JC  Next           ;若有借位,R4值<R3值, 查下一个
        MOV  A, R4         ;若无借位,R4值>R3值
        MOV  R3, A         ;将较大数暂存于R3
        MOV  R5,DPL
        MOV  R6,DPH
Next:   DJNZ  R2,Check     ;待查数据个数递减1,未为0则继续查
Finish: MOV DPTR, #1200H
        MOV A, R3  
        MOVX  @DPTR, A     ;最大值存入1200H单元
        INC  DPTR
        MOV  A, R5
        MOVX  @DPTR, A     ;最大值地址低8位存入1201H单元
        INC  DPTR        
        MOV  A, R6
        MOVX  @DPTR, A     ;最大值地址高8位存入1202H单元
        END
========================================
【第3题】
已知从外部数据存储器的2650H单元开始,
共有84个存贮单元各存有一个8位有符号整数,
试用MCS-51指令编写一源程序,
求其中所有大于70H的正数之和,
结果低8位存放入1500H单元,高8位存入1501H单元。
【答】:
First:     MOV DPTR,#2650H ;待查数据块首址
           MOV R2,#84      ;待查数据个数
           MOV R4,#0
           MOV R5,#0
Check:     MOVX A,@DPTR
           JZ  Next         ;若查到某个数为0,则查下一个
           MOV R3,A         ;将非0的数暂存于R3
           ANL  A,10000000B ;检测该数的符号位
           JNZ Next         ;若符号位为1,是负数,查下一个
           MOV A,R3         ;若符号位为0,是正数
           CLR C          ;减法运算前借位清0
           SUBB A,#70H     ;该数与70H作比较
           JC Next         ;若有借位,该数<70H, 查下一个
           JZ Next         ;若相减结果为0,该数=70H, 查下一个
           MOV A,R3
           CLR C
           ADD A,R4        ;符合条件的数累加
           MOV R4,A        ;累加值低8位暂存于R4
           JNC Next        
           INC R5          ;若低8位累有进位,则高8加1
Next:      INC DPTR        ;数据指针加1,查下一个数
           DJNZ  R2,Check  ; 待查数据个递减1,未为0则继续查
Finish:    MOV DPTR,#1500H
           MOV A,R4   
           MOVX @DPTR,A    ;累加结果低8位存入1500H单元
           INC DPTR
           MOV A,R5
           MOVX @DPTR,A    ;累加结果高8位存入1501H单元
           END
========================================
【第4题】
已知从外部数据存储器的2940H单元开始,
共有95个存贮单元中均存放有8位无符号整数,
试用MCS-51指令编写一源程序,
求其中所有小于65H的数据之和,
结果低8位存入1400H单元,高8位存入1401H单元。
【答】:
First:     MOV  DPTR, #2940H ;外部数据块首址
           MOV  R2, #95      ;外部数据块数据个数
           MOV  R4, #0
           MOV  R5, #0
Check:     MOVX  A, @DPTR    ;读入数据指针所指的一个数
           MOV  R3, A        ;将该数放入R3暂存
           CLR  C            ;减法运算前借位清0
           SUBB A, #65H      ;该数与65H作比较
           JZ  Next          ;若相减结果为0,该数=65H, 查下一个
           JNC  Next         ;若无借位,该数>65H, 查下一个
           MOV  A ,R3
           CLR  C            ;加法运算前进位清0
           ADD  A, R4        ;符合条件的数累加
           MOV  R4 ,A        ;累加值低8位暂存于R4
           JNC  NEXT
           INC  R5           ;若有进位,则高8位累加1
Next:      INC  DPTR         ;数据指针加1,查下一个数
           DJNZ  R2, Check   ;待查数据个递减1,未为0则继续查
Finish:    MOV DPTR,#1400H
           MOV A,R4   
           MOVX @DPTR,A     ;累加结果低8位存入1400H单元
           INC DPTR
           MOV A,R5
           MOVX @DPTR,A      ;累加结果高8位存入1401H单元
           END
========================================


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表