标题: 51单片机一起学汇编—BCD调整 数据处理 [打印本页]

作者: zhouchuantao    时间: 2019-3-9 21:55
标题: 51单片机一起学汇编—BCD调整 数据处理
/***********BCD调整**************/

      ORG  0000H
      JMP START
START:
      MOV SP,#7FH     ;设置堆栈地址
      MOV 50H,#69H    ;十六机制立即数69H 载人地址为50H寄存器中
      MOV R3,50H      ;运行DEBUG时 在R2中查看数据
      MOV R0,#60H     ;十六机制立即数60H 载人R0寄存器中
      MOV A,50H       ;地址为50H寄存器中的数据 载人累加器ACC中
      ANL A,#0F0H     ;累加器ACC中的高四位数据和十六进制的立即数 F0H  逻辑 与 运算
      MOV @R0,A       ;累加器ACC中的数据 载入以R0中的数据为地址的寄存器中   注意间接寻址:@R0=50H,50H作为寄存器地址使用,而不是数据
      MOV 30H,@R0     ;@R0间接寻址的数据 载入30H寄存器中
      MOV R1,30H      ;运行DEBUG时 在R2中查看数据
      MOV A,50H       ;寄存器50H 中的数据 载入累加器ACC
      ANL A,#0FH      ;累加器ACC中的低四位数据和十六进制的立即数 0FH  逻辑 与 运算
      INC R0          ;寄存器R0中的数据加1
      MOV @R0,A       ;累加器ACC中的数据 载入以R0中的数据为地址的寄存器中
      MOV 31H,@R0     ;@R0间接寻址的数据 载入30H寄存器?
      MOV R2,31H      ;运行DEBUG时 在R2中查看数据
      JMP START       ;调回开始


作者: zhouchuantao    时间: 2019-3-10 12:04
/*************************
题目要求
已知 X Y,计算Z值, 结果存 20H 单元中
  Z=X-Y(X≥0)
  Z=X+Y(X<0)

需要知识:存储寄存器中的正数和负数

************************/  

            X DATA 30H                ;未知数X 用寄存器30H代替   DATA是个伪指令
            Y DATA 31H                ;未知数Y 用寄存器31H代替

            ORG 0000H                 ;程序开始地址
            JMP START                 ;跳转主程序
START:
            MOV SP,#7FH               ;堆栈地址7FH
            MOV X,#-9                 ;以30H为地址的寄存器中 载入初值 负9
            MOV Y,#1                  ;以31H为地址的寄存器中 载入初值 1
            MOV A,X                   ;X 的初值 载入A中
            MOV B,Y                   ;Y 的初值 载入B中
            JB Acc.7,Positive         ;ACC.7位是1还是0,判断X是正数还是负数, 如是正数跳转加法运算,如是负数执行下一条道减法运算
            CLR C                     ;PSW.7位   CY位需要清零,不能影响到加减法结果
            SUBB A,B                  ;减运算,结果存ACC中
            SJMP Result               ;跳转存结果
Positive:
            ADD A,B                   ;加运算,结果存ACC中

Result:            MOV 20H,A                 ;结果存在寄存器地址为20H中
            MOV R1,20H                ;调试中查看数值,验证程序
            JMP $
END
作者: 小林大哥哥    时间: 2019-3-17 13:42

/*************************
题目要求
已知 X Y,计算Z值, 结果存 20H 单元中
  Z=X-Y(X≥0)
  Z=X+Y(X<0)

需要知识:存储寄存器中的正数和负数

************************/  

            X DATA 30H                ;未知数X 用寄存器30H代替   DATA是个伪指令
            Y DATA 31H                ;未知数Y 用寄存器31H代替

            ORG 0000H                 ;程序开始地址
            JMP START                 ;跳转主程序
START:
            MOV SP,#7FH               ;堆栈地址7FH
            MOV X,#-9                 ;以30H为地址的寄存器中 载入初值 负9
            MOV Y,#1                  ;以31H为地址的寄存器中 载入初值 1
            MOV A,X                   ;X 的初值 载入A中
            MOV B,Y                   ;Y 的初值 载入B中
            JB Acc.7,Positive         ;ACC.7位是1还是0,判断X是正数还是负数, 如是正数跳转加法运算,如是负数执行下一条道减法运算
            CLR C                     ;PSW.7位   CY位需要清零,不能影响到加减法结果
            SUBB A,B                  ;减运算,结果存ACC中
            SJMP Result               ;跳转存结果
Positive:
            ADD A,B                   ;加运算,结果存ACC中

Result:            MOV 20H,A                 ;结果存在寄存器地址为20H中
            MOV R1,20H                ;调试中查看数值,验证程序
            JMP $
END
作者: songzhy    时间: 2019-4-1 07:16
谢谢分享......
作者: michael2018    时间: 2019-4-8 16:05
楼主牛逼啦
作者: solo2pm    时间: 2019-4-13 00:11
新人  表示汇编还不太懂 看天书……
作者: songzhy    时间: 2019-4-14 07:49
新人  表示汇编还不太懂
作者: silicon_hacker    时间: 2019-4-24 22:12
51单片机学习汇编
作者: qq12345qq6789qq    时间: 2019-4-25 16:01

新人  表示汇编还不太懂
作者: 迁就    时间: 2019-4-26 17:35
谢谢分享
作者: jackliuwenli    时间: 2019-5-29 14:16
谢谢分享
作者: 1316880381    时间: 2019-6-3 14:37
谢谢分享
作者: vccccclala    时间: 2019-6-18 16:55
感谢分享

作者: 175花见花开艰苦    时间: 2019-6-28 13:14
感谢分享
作者: 刷新时间    时间: 2019-7-5 10:46
刚刚开始
作者: tieq1952    时间: 2019-7-10 06:35
谢谢分享!!!
作者: 鹏博士PBs    时间: 2019-7-10 09:22
2进制转10进制的BCD译码器
作者: 一直有你陪伴    时间: 2019-7-27 01:58
楼主牛逼啦,汇编看不懂
作者: LIUSIGN    时间: 2019-8-5 08:40
楼主牛逼啦,汇编看不懂
作者: 佳佳电气    时间: 2019-9-14 18:57
新手表示看不懂,学习中
作者: star130    时间: 2019-9-23 20:20
看明白了,学习了,有帮助
作者: 五依黑    时间: 2019-10-4 17:32
大神,想学单片机应该先从哪里开始?
作者: 五依黑    时间: 2019-10-4 17:33
单片机如何入门?
作者: harry3    时间: 2019-10-24 23:41
·麦克纳姆轮全向轮战车程序精髓分享
作者: 双赢电子    时间: 2019-11-16 17:45
多谢分享,学习了,收藏
作者: 莫陌    时间: 2019-11-29 14:27
多谢分享
作者: 巫山烟雨    时间: 2019-12-12 17:25
谢谢分享  
作者: ttw1640664131    时间: 2019-12-24 23:25
感谢楼主的分享
作者: justToWing    时间: 2020-2-2 08:00
谢谢楼主分享
作者: 尼古拉斯-赵四    时间: 2020-2-17 17:38
具体咋回事啊,有谁能告知一下吗,看了好长时间没看懂
作者: player    时间: 2020-2-22 13:08
好久没来了,做个记号

作者: tttpotr    时间: 2020-3-19 12:52
感谢楼主
作者: 卑微小蒋    时间: 2020-5-16 09:46
很棒,感谢楼主的分享
作者: 271289610@qq.co    时间: 2020-5-23 09:50
谢谢楼主的分享,一刚学的小萌新有点看不懂
作者: tangxiexiong    时间: 2020-7-18 19:10
51的指令太多,市场上PIC系列的多,工作也容易找
作者: leehk88    时间: 2020-8-27 09:26
註釋很詳細方便學習,謝謝了.
作者: 15x1    时间: 2020-11-22 09:01
没有看懂汇编  想学
作者: dlzhoubo    时间: 2021-1-8 12:14
zhouchuantao 发表于 2019-3-10 12:04
/*************************
题目要求
已知 X Y,计算Z值, 结果存 20H 单元中

有点看天书的感觉!学习中
作者: 番薯藤    时间: 2021-1-14 17:26
zhouchuantao 发表于 2019-3-10 12:04
/*************************
题目要求
已知 X Y,计算Z值, 结果存 20H 单元中

你好,请问你代码开头用的伪指令是不是用错了

作者: fln0457    时间: 2021-1-15 13:58
新人想学编程,现在能用RS232口擦写STC15F204EA芯片,先求一个小程序
作者: runmuel    时间: 2021-3-27 21:39
番薯藤 发表于 2021-1-14 17:26
你好,请问你代码开头用的伪指令是不是用错了

/*
学过C的应不用说也懂了。
多行注释就这样用
*/
作者: lsg0280    时间: 2021-5-29 08:29
很基础的知识,要珍惜学习。
作者: 3152681172    时间: 2021-6-26 15:45
没有看懂汇编  想学
作者: yjgu    时间: 2021-7-11 21:30
楼主牛逼啦
作者: 188610329    时间: 2021-8-29 00:28
你这串代码,没看出和BCD调整有任何关系……只是看到内存浪费一大把,还特别的不经济,比如,
MOV   50H,#69H
MOV   R3,50H

作者: 188610329    时间: 2021-8-29 00:37
你这串代码,没看出和BCD调整有任何关系……只是看到内存浪费一大把,还特别的不经济,比如,
MOV  50H,#69H      ; 用了3个字节
MOV  R3,50H          ; 用了2个字节
正常写法,应该:
MOV   R3,#69H      ;用2个字节
MOV   50H,R3       ;用2个字节
类似的问题着串代码里很多。
另外,MOV @R0,A       ;累加器ACC中的数据 载入以R0中的数据为地址的寄存器中   注意间接寻址:@R0=50H,50H作为寄存器地址使用,而不是数据
你这串代码的时候 @R0, 应该间接寻址的60H而不是50H 你上面 R0 明明赋值的是 #60H
这类问题太多了……
最后那个JMP START 更加莫名其妙,你所有的所有都是重新赋值,这个循环再多次,结果还是不变,这个时候完全应该 JMP $ 直接锁定PC 指针才对嘛……
作者: 学习使我快乐@    时间: 2021-9-22 11:20
小林大哥哥 发表于 2019-3-17 13:42
/*************************
题目要求
已知 X Y,计算Z值, 结果存 20H 单元中

汇编刚开始真一脸懵

作者: gaofahao    时间: 2021-11-20 13:58

新人  表示汇编还不太懂 看天书……
作者: HAPPY3    时间: 2021-12-23 11:02
懂一点,但怕钻研,
作者: yzwzfyz    时间: 2022-8-1 16:36
回39#:
CPU只认识【二进制指令代码】,其它一概不认!!!无论是汇编、C、……。
汇编还需要通过编译器(汇编的编译平台),将汇编言翻译成【二进制指令代码】,再通过烧录设备写入单片机中,才算大功告成。
伪指令会指导编译器进行编译,如第一句:“ORG 0000H”,编译器就会知道,编好的【二进制指令代码】从指令存储器的0000H单元开始存放。
所谓“伪指令”,是CPU不认识,而编译器能懂的“话”。
换句话说:“伪指令”下给编译器的命令,而不是对CPU下令。
作者: QQQQ987    时间: 2022-9-4 23:34
表示喜欢51C语言编程方式,汇编不喜欢,哈哈——




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1