找回密码
 立即注册
楼主: newlined

学习32G的地址分配记录贴

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-9-10 09:23:49 来自手机 | 显示全部楼层
现在用汇编语言的不多了吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-9-10 09:27:12 | 显示全部楼层
newl*** 发表于 2024-9-10 09:22
单片机毕竟是本来就是跑机器语言的,如果能彻底搞懂,也不错。

当时为了计算十进制6位数的四则运算,用单片机模拟的方式写的计算程序。一个字节存两个数字,计算的时候一个一个的按照十进制法则写。老费劲了,写了一周。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 06:12:04

35

主题

189

回帖

861

积分

高级会员

积分
861
发表于 2024-9-10 10:50:46 | 显示全部楼层
liuzon*** 发表于 2024-9-10 09:27
当时为了计算十进制6位数的四则运算,用单片机模拟的方式写的计算程序。一个字节存两个数字,计算的时候 ...

6位数的加减乘除,要考虑多少进位啊
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-9-10 11:48:52 | 显示全部楼层
21cns*** 发表于 2024-9-9 18:08
8位8051用汇编有的玩,32位8051感觉真心没必要用汇编了:一是32位8051比8位的寄存器和指令复杂太多,二是32 ...

其实32位8051汇编编程比8位8051汇编容易多了,251指令虽多但规律性很强,并且用32位指令再也不用考虑多字节运算了,比如比较32位有符号数是否大于,用251一条指令就行了,你可以用51汇编试试麻烦不麻烦
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 06:12:04

35

主题

189

回帖

861

积分

高级会员

积分
861
发表于 2024-9-10 13:36:45 | 显示全部楼层
zxcv*** 发表于 2024-9-10 11:48
其实32位8051汇编编程比8位8051汇编容易多了,251指令虽多但规律性很强,并且用32位指令再也不用考虑多字 ...

看来您对251的指令比较熟悉,您看看访问edata区域100H~0FFFH的方法还有哪几种?谢谢。
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-9-10 14:38:42 | 显示全部楼层
newl*** 发表于 2024-9-10 13:36
看来您对251的指令比较熟悉,您看看访问edata区域100H~0FFFH的方法还有哪几种?谢谢。 ...

1、直接寻址(可按8位、16位、32位访问),比如MOV R0,EDATA 100H
2、16位寄存器的间接寻址和偏移寻址(可按8位、16位访问),比如MOV R0,@WR4和MOV R0,@WR4+10
3、32位寄存器的间接寻址和偏移寻址(可按8位、16位访问),比如MOV R0,@DR4和MOV R0,@DR4+10
4、堆栈寻址
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 06:12:04

35

主题

189

回帖

861

积分

高级会员

积分
861
发表于 2024-9-10 16:02:09 | 显示全部楼层
本帖最后由 newlined 于 2024-9-10 16:05 编辑
zxcv*** 发表于 2024-9-10 14:38
1、直接寻址(可按8位、16位、32位访问),比如MOV R0,EDATA 100H
2、16位寄存器的间接寻址和偏移寻址( ...

zxcv1973老师谢谢您的回复,关于第一条,       想不到可以直接访问100H~0FFFH 的地址,按照这个方法,80H-FFH是不是也可以这样直接访问,比如MOV R0,EDATA 80H?
                                        关于第二、三条,“可按8位、16位访问”是什么意思?按8位访问,语句是什么样的,按16位访问,语句是什么样的?我虽然用汇编,也是照着一 些例程写,并没有彻底领会其中的含义,所以我也想借着这次机会,再进一步学习下。
                                       关于第四条           是不是我想把堆栈定义到100H~0FFFH,是不是可以这样   STACK   EQU    100H     MOV    WR0, #WORD0 STACK     MOV    SPX,WR0       需要使用堆栈时 就可以 PUSH    SPX   或者POP   SPX


回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-9-10 16:23:56 | 显示全部楼层
newl*** 发表于 2024-9-10 16:02
zxcv1973老师谢谢您的回复,关于第一条,       想不到可以直接访问100H~0FFFH 的地址,按照这个方法,80H ...

1、80H-FFH可以这样直接访问,比如MOV R0,EDATA 80H
2、8位指目标操作数为字节寄存器,比如MOV R0,@WR4。16位指目标操作数为字寄存器,比如MOV WR0,@WR4
3、不用再用寄存器倒一下,直接MOV SPX,#STACK即可,并且MOV SPX,WR0也不正确,SPX为双字寄存器,WR0为字寄存器,两者不能直接MOV
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 06:12:04

35

主题

189

回帖

861

积分

高级会员

积分
861
发表于 2024-9-10 16:42:37 | 显示全部楼层
zxcv*** 发表于 2024-9-10 16:23
1、80H-FFH可以这样直接访问,比如MOV R0,EDATA 80H
2、8位指目标操作数为字节寄存器,比如MOV R0,@WR4。 ...

好的,谢谢您的回复,我再领会下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 06:12:04

35

主题

189

回帖

861

积分

高级会员

积分
861
发表于 2024-9-11 09:24:36 | 显示全部楼层
本帖最后由 newlined 于 2024-9-11 14:03 编辑

今天看STC32G手册,在10.2.5中看到:在汇编语言中,内部扩展 RAM(XDATA) 通过 MOVX 指令访问,MOVX A , @DPTR;MOVX @DPTR , A; MOVX A , @Ri;MOVX @Ri , A
有个疑问,DPTR是16位的数据指针,XDATA的地址是01:0000H-7F:FFFFH,即使通过MOVX访问,默认从01:0000H开始访问,那到了后面的高的地址怎么办?难道不是应该用DPX代替DPTR吗?
刚才我写了一个简单的 C程序:unsigned int xdata i; void main() { i=5; }  发现在 C251汇编后是这样的 :MOV  WR6,#0005; MOV  DPTR,#0X0000; MOV  @DR56,WR6
请问跟手册上的可以完成相同功能吗?
@众位高手
@zxcv1973




回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 09:15 , Processed in 0.187312 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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