灵感来自这个问题.
我经常看到人们将JavaScript称为低级语言,特别是在GWT和类似工具包的用户中.
我的问题是:为什么?如果您使用其中一个工具包,那么您将从一些使JavaScript非常适合编程的功能中脱颖而出:作为对象的功能,动态类型等.特别是当与一个流行的框架(如jQuery或Prototype)结合使用时.
这就像调用C++低级别一样,因为标准库比Java API小.我不是C++程序员,但我非常怀疑每个C++程序员都编写自己的GUI和网络库.
我知道在linux中它就像/ dev/sda一样简单但在Windows中如何打开磁盘并开始在低级别读取数据?
在python我尝试过:
f = open("K:", "r")
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 13] Permission denied: 'K:'
Run Code Online (Sandbox Code Playgroud)
即使是管理员,我也会收到此错误.
我想知道为什么在现实世界中,编译器会生成汇编代码,而不是微指令.
如果您已经绑定了一个架构,那么为什么不进一步让处理器免于在运行时将汇编代码转换为微指令?
我想也许某个地方存在实施瓶颈,但我在谷歌上找不到任何东西.
通过微指令编辑我的意思是:如果汇编指令是ADD(R1,R2),那么微指令就是.将R1加载到ALU,将R2加载到ALU,执行操作,将结果加载回R1.另一种看待这种情况的方法是将一个微指令等同于一个时钟周期.
我的印象是微指令是"官方"名称.显然这里有一些里程变化.
F A
architecture compiler-construction optimization assembly low-level
我发现了一点点好奇心; 当我有很多优化标志时,GCC似乎生成以下代码:
00000000004019ae: test %si,%si
00000000004019b1: movups %xmm0,%xmm0
00000000004019b4: je 0x401f40 <main(int, char**)+1904>
Run Code Online (Sandbox Code Playgroud)
问题:第二条指令的用途是什么?它看起来不像/做/什么; 那么,在指令缓存中对齐程序是否有一些优化?或者它是无序执行的东西?(-mtune=native如果有帮助,我正在Nehalem上编译:D).
没什么急事,当然,只是好奇.
我无法理解为什么要在 Python 等高级语言中使用按位运算符。从我对高级语言和低级语言的了解来看,高级语言通常被设计为您不必太担心进入计算机的机器代码。我不认为用一种语言一点一点地操作程序的意义,据我所知,这种语言旨在避免它。
我 2 年前开始编程,当我编程并沉默时,有一个问题一直困扰着我。
我了解微处理器架构和低级编程的基础知识,并且我了解没有数据类型这样的东西。它只是一种限制数据处理方式和控制内存资源的抽象。
所以我知道这是一个深刻且有些不清楚的问题,但希望您能理解我所缺少的拼图中的部分,以了解高级编程与硬件中的实际情况之间的联系。
所以我的问题是:究竟什么是数据类型,它是如何、在何处、何时实现的?
我正在 Linux 设备上编写与 Epson tm-t88iv 热敏打印机的低级通信,该打印机仅接收十六进制包。我已阅读手册试图了解校验和是如何构建的,但我无法重新创建它。
手册上说校验和是 4 个字节,表示发送的包中所有数据的 2 个字节之和。
我目前有四个工作示例,是通过使用不同的程序监听 Windows 计算机上的端口而找到的。最后 4 个十六进制是校验和(根据手册,03 标记数据的结束并包含在校验和计算中)。
02 AC 00 01 1C 00 00 03 30 30 43 45
02 AC 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 32 31
02 AD 07 01 1C 00 00 1C 31 30 03 30 31 35 33
02 AD 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 …Run Code Online (Sandbox Code Playgroud) 众所周知,C++ bool的大小必须至少为1个字节,以便为每个[/sf/answers/144519581/]创建指针.但是Java中没有指向原始类型的指针.然而,他们仍然至少占用1个字节[/sf/answers/26851821/].
为什么会这样 - 为什么Java不能boolean是1位大小?除了计算时间,如果有一个大boolean数组,肯定可以设想一个编译器进行适当的移位以检索对应于某个boolean值的单个位?
我的板是 nucleo STM32L432KCU 板。我正在尝试使用低级 API 通过 SPI 发送字符。SPI 配置为“仅发送主机”并且硬件 NSS 信号被禁用。
不幸的是,我的代码不起作用(见下文)。当我连接逻辑分析仪时,我看不到任何东西。
这是我的代码:
SPI初始化(由CubeMX生成)
void MX_SPI1_Init(void)
{
LL_SPI_InitTypeDef SPI_InitStruct;
LL_GPIO_InitTypeDef GPIO_InitStruct;
/* Peripheral clock enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
/**SPI1 GPIO Configuration
PA1 ------> SPI1_SCK
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = SCLK1_to_SpW_Pin|MOSI1_to_SpW_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_5;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8;
SPI_InitStruct.BitOrder = …Run Code Online (Sandbox Code Playgroud) low-level ×10
assembly ×3
optimization ×2
python ×2
architecture ×1
arrays ×1
checksum ×1
definition ×1
disk ×1
epson ×1
gcc ×1
high-level ×1
java ×1
javascript ×1
memory ×1
spi ×1
stm32 ×1
types ×1
x86-64 ×1