操作符byte0作用到32-bit变量,起着什么作用
<h2>问题描述</h2><p>无实物,用keil软件仿真为<strong>8051U</strong>编写的一个程序,想给一个双字类型的变量赋值,写出了不理解的代码,如下:</p>
<p>; 定义双字变量</p>
<p><code>DWDBGV: DSD 1D</code></p>
<p>不理解的语句:</p>
<p><code>MOV BYTE0 DWDBGV, A </code></p>
<p><code>MOV BYTE3 DWDBGV, A</code></p>
<p>build之后,没有任何错误。</p>
<h3>具体问题</h3>
<ol>
<li>
<p>我们知道,8051U用的是大端存储模式,按说第二行代码,应该是给双字变量的高字节地址赋值,然而,仿真时却给低字节地址赋值,这是怎么回事?</p>
</li>
<li>
<p>另外,第二、三行真有这种写法吗?它是什么意思呀,我也没明白。</p>
</li>
</ol>
1.我们知道,BYTE0 是指最低字节地址赋值,仿真时给低字节地址赋值,这完全正确!!!
2.BYTE0 是指最低字节地址赋值, 依次向高位地址赋值是 BYTE1,BYTE2, 最高位 是 BYTE4 , 共 4字节组成一个 long (大端存储模式). rt 汇编随便整,编译器不知道 LAOXU 发表于 2024-12-19 08:08
1.我们知道,BYTE0 是指最低字节地址赋值,仿真时给低字节地址赋值,这完全正确!!!
2.BYTE0 是指最低字 ...
可是第三行就不起作用了,调试时不会给在对应地址的内存赋值了,只有第二行会修改内存的内容 bkeuqoaq 发表于 2024-12-19 08:27
rt
我只知道常量可以这样操作,没见过有谁对内存地址这样操作 BeHappy 发表于 2024-12-19 09:32
我只知道常量可以这样操作,没见过有谁对内存地址这样操作
可以的,常量加#,直接地址不加 bkeuqoaq 发表于 2024-12-19 09:47
可以的,常量加#,直接地址不加
好的,感谢,又学习了 :-) bkeuqoaq 发表于 2024-12-19 09:47
可以的,常量加#,直接地址不加
<h3>不对</h3>
<p>就下面这样一段程序,改不掉寄存器<strong>B</strong>的值</p>
<p>DSEG AT 30H<br />
COLOR: DSW 1</p>
<p>MOV WR14, #11FFH<br />
MOV COLOR, WR14<br />
MOV WR30, COLOR<br />
MOV B, BYTE0 COLOR<br />
MOV A, BYTE1 COLOR</p>
<p>验证了,操作符BYTE0有作用,BYTE1没有作用。不知道你们是不是在信口开河。</p>
页:
[1]
2