gpt4 book ai didi

c - 在 C 和汇编中移动

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:05 26 4
gpt4 key购买 nike

考虑以下对内存映射 I/O 进行写入和读取的 C 代码。

volatile int* switches = (volatile int*) 0x1b430010; 
volatile int* leds = (volatile int*) 0xabbb8050;
int temp = ((*switches) >> 6) & 0x3;
*leds = (*leds & 0xff9f) | XXX;

从上面的 C 代码可以得出,一些位是从 16 位开关端口读取的,用于打开或关闭一些 LED,而不影响 16 位 LED 端口上的其他 LED。一个缺失的表达式被标记为 XXX。写出 XXX 应该是什么表达式,以便正确打开或关闭 LED。

答案是 XXX = temp << 5 .当我尝试转换为汇编并以位为单位进行计算时,我得到的温度在 ((*switches) >> 6) & 0x3; 之后为 0。 ,那为什么 temp << 5在这里有效,因为移动 0 没有任何不同? (可能是我算错了,如果需要可以提供我所有的计算结果)

最佳答案

0xff9f 在二进制中是 1111111110011111。掩码将第 5 位和第 6 位归零,保留其他位。

temp 是一个 2 位的值,因为代码和掩码为 0x311 为二进制(所有其他位都为零) .您必须将它向左移动 5 次才能通过 | 掩码插入最终值。

(根据输入数据,temp 得到 0 的事实要么是错误,要么是预期的,它不会改变上面的答案)

关于c - 在 C 和汇编中移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54071833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com