找回密码
 立即注册
楼主: 道清

双字节除法运算汇编程序请高手指导

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-08-28 05:43:12
已绑定手机

3

主题

28

回帖

93

积分

注册会员

积分
93
发表于 2025-8-26 20:00:52 | 显示全部楼层
erci*** 发表于 2025-8-26 17:19
我上面发的不一定编译时报错,运行时可能异常或跑飞。

有CALL就要有RET,不明白建议可以看下陈桂友老师 ...

非常感谢两位老师的帮助,加RET程序成功了

但是我还是想不通其中两段的计算逻辑,我现在多不知道怎么提问,因为我根本就想不通其中奥秘。
第1个:PROCESS_HIGH:
第2个:PROCESS_LOW:
这两段还是不知道怎么思考


还有我想请教像这个双字节运算,现在是两8位组合,如果我用16位的单片机是不是就不用这么麻烦了,是不是A也是16位,B也是16位,R和H也多是16位,就直接能加减乘除了

点评

第一个问题,上面已经解释过了两个函数的逻辑~,可以单独拿出来放到一个环境里单步仿真看看各步骤运行结果。 还有就是看下上面推荐的课程补充下遗漏的知识点。 第二个问题,等价思考就是把这个问题全换为8位一样的  详情 回复 发表于 2025-8-26 21:12
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-09-03 08:55:47
已绑定手机

80

主题

3032

回帖

6445

积分

荣誉版主

无情的代码机器

积分
6445
发表于 2025-8-26 21:12:49 | 显示全部楼层
道*** 发表于 2025-8-26 20:00
非常感谢两位老师的帮助,加RET程序成功了

但是我还是想不通其中两段的计算逻辑,我现在多不知道怎么提问 ...

第一个问题,上面已经解释过了两个函数的逻辑~,可以单独拿出来放到一个环境里单步仿真看看各步骤运行结果。

还有就是看下上面推荐的课程补充下遗漏的知识点。

第二个问题,等价思考就是把这个问题全换为8位一样的就方便多了,但是在16位除法上解析32位数呢?可能还是得循环来解析。

还有就是楼主这个程序的用途是什么?是学校作业还是自学汇编吗,自学的话建议从C入手比汇编直观多了。

截图202508262111527543.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-08-28 05:43:12
已绑定手机

3

主题

28

回帖

93

积分

注册会员

积分
93
发表于 2025-8-26 21:56:14 | 显示全部楼层
erci*** 发表于 2025-8-26 21:12
第一个问题,上面已经解释过了两个函数的逻辑~,可以单独拿出来放到一个环境里单步仿真看看各步骤运行结 ...

那个RET我知道,只是直接复制了没有注意。

自学的汇编,因为我英语不懂,去过宁波的一个学校,也没有C语言老师带我,
后来找到教汇编的地方,手对手的教学。我就学了汇编,当时我也问过教学的老师双字节问题,他也不知道怎么计算。

我知道C语言的程序多是模块化,只要用不同的语句就可以解决,但问题是没有地方可以让我学习,(我以前也看过十天学会C语言那个视频,就是因为很多疑惑不能解释,所以就没有学会)
还有我的学习会提相应的很多问题,有些老师多不一定会用心解释。
因为我只有问懂了才学的会。所以我就可能会不停的问,想到了就问。

拿这个双字节程序打算做一个测量重量的程序,目前还缺一个用砝码标定的程序,这个标定程序目前还没有头绪。如果各位老师有相应的例子程序,麻烦请给点提示,

谢谢各位老师

点评

我还是劝你优先学习C,汇编个人理解只适用于个别算法性能提升或者空间要求严格的场景,而且也基本脱离编程范畴了,全变成数学题了。 个人DIY\常规工作基本碰不到。 拿汇编写这些if else while组成的业务逻辑,就像  详情 回复 发表于 2025-8-26 22:45
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-09-03 08:55:47
已绑定手机

80

主题

3032

回帖

6445

积分

荣誉版主

无情的代码机器

积分
6445
发表于 2025-8-26 22:45:24 | 显示全部楼层
道*** 发表于 2025-8-26 21:56
ercircle 发表于 2025-8-26 21:12
第一个问题,上面已经解释过了两个函数的逻辑~,可以单独拿出来放到一个 ...

我还是劝你优先学习C,汇编个人理解只适用于个别算法性能提升或者空间要求严格的场景,而且也基本脱离编程范畴了,全变成数学题了。
个人DIY\常规工作基本碰不到。

拿汇编写这些if else while组成的业务逻辑,就像和人交流,念汉字拼音,还是一个字母一个字母念一样难受~~
开发效率极低的

另外你问C代码问题回答的人还能多点,汇编问题受众就少很多了。


书籍推荐:C Primer Plus,中文的
编程练习:力扣,都有题解也有讨论的地方

至于最后提到的砝码标定,没做过,也不知道要做什么,可以梳理下业务需求,列一下不会的部分。

截图202508262242148940.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-08-28 05:43:12
已绑定手机

3

主题

28

回帖

93

积分

注册会员

积分
93
发表于 7 天前 | 显示全部楼层
砝码标定就是,比如一个电子秤,最大称重是10公斤,他的最小显示的00.001公斤(相当于1克)。

我们以前是这样操作的,
第一步先清零,等显示稳定后.按照说明进入标定程序,  
第二步输入最大称重10.000,按确定键  
第三步放上砝码;输入砝码的正确重量值,(比如3公斤重的砝码)就输入03.000.     (比如5公斤重的砝码)就输入05.000.按确定键
完成标定程序,这样标定过后你放的1公斤的重量,他就显示1.000.    你放的1,123公斤的重量,他就显示1.123.  

这样这个电子秤就准确了

不过这些标定的数字应该多是要记忆在单片机里,因为关机断后下次开机,不可能有要标定一次。

如果不对其做标定,那么显示的可能是 0 至 65.535  ,       做完标定后显示的就是 0 至 10.000
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-08-28 05:43:12
已绑定手机

3

主题

28

回帖

93

积分

注册会员

积分
93
发表于 7 天前 | 显示全部楼层
erci*** 发表于 2025-8-26 22:45
我还是劝你优先学习C,汇编个人理解只适用于个别算法性能提升或者空间要求严格的场景,而且也基本脱离编 ...

感谢您推荐的书,我以找到,买了

不过C语言的书我买了好几本,因为我学不懂,上次我送了好几本给朋友的小孩了(因为他小孩要学习C语言)

感谢您


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-08-28 05:43:12
已绑定手机

3

主题

28

回帖

93

积分

注册会员

积分
93
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-8-25 23:05
没想到什么好思路诶,给个笨办法参考:

PROCESS_HIGH:
                MOV     A, R6
        JZ      PROCESS_LOW  ; 高8位为0且低8位<10,处理最后一位
                ; 高8位减1,补充十位25和个位6
        DEC     R6
        
                MOV         A, #6
                ADD     A, 34H
        MOV     34H, A
               
                MOV         A, #25
                ADD     A, 33H
        MOV     33H, A
               
                ; 处理各数位进位
        LCALL   HANDLE_CARRY
        SJMP    PROCESS_HIGH    ; 再次检查高8位



请问: 上面这段里的     高8位减1,补充十位25和个位6        其中25是哪里来的,6是哪里来的,为什么要这两个数,不是其他数字,比如256

点评

高位的1,就是十六进制0x100,对应十进制256。 拆25*10+6比较直观 当然你也可以尝试拆2*100 + 5*10 + 6 或24*10+16 为什么不直接给个位加256? 一个字节只能存储255(0xFF),直接加必定溢出进位,有进位标识了怎么  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-09-03 08:55:47
已绑定手机

80

主题

3032

回帖

6445

积分

荣誉版主

无情的代码机器

积分
6445
发表于 6 天前 | 显示全部楼层
道*** 发表于 2025-8-28 05:43
PROCESS_HIGH:
                MOV     A, R6
        JZ      PROCESS_LOW  ; 高8位为0且低8位

高位的1,就是十六进制0x100,对应十进制256。
拆25*10+6比较直观
当然你也可以尝试拆2*100 + 5*10 + 6
或24*10+16

为什么不直接给个位加256?
一个字节只能存储255(0xFF),直接加必定溢出进位,有进位标识了怎么处理这个进位代表的255呢,还不是要拆吗。
而给个位加6,十位加25,完全不会溢出,可以用统一的代码片段HANDLE_CARRY处理进位。



截图202508281829329581.jpg

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-08-28 05:43:12
已绑定手机

3

主题

28

回帖

93

积分

注册会员

积分
93
发表于 6 天前 | 显示全部楼层
大概懂了,您是真高手,想出来这么高明的方法。
我研究研究,希望能够研究出来。

还有个事情方便的话请帮我留意一下哪里能学C语言的,我现在就是语句格式不懂,符号代表含义不懂,只要能够学会这个就可以了
我今天让朋友看了大学,好像多没有找到。

谢谢

意思总结:您要是知道哪里能学C语言,麻烦请告诉我,我想学

点评

先看书基本语法过一遍,搭配力扣刷题,难度自选,刷完对比和别人的优劣。 想看视频就B站搜下一堆免费课程。 [attachimg]113164[/attachimg] [attachimg]113162[/attachimg] [attachimg]113165[/attachimg] [attach  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-09-03 08:55:47
已绑定手机

80

主题

3032

回帖

6445

积分

荣誉版主

无情的代码机器

积分
6445
发表于 6 天前 | 显示全部楼层
道*** 发表于 2025-8-28 21:04
大概懂了,您是真高手,想出来这么高明的方法。
我研究研究,希望能够研究出来。

先看书基本语法过一遍,搭配力扣刷题,难度自选,刷完对比和别人的优劣。
想看视频就B站搜下一堆免费课程。


截图202508282223558058.jpg
截图202508282223131572.jpg
截图202508282224385375.jpg
截图202508282223396839.jpg

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-9-3 09:02 , Processed in 0.142050 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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