我正在尝试使用 Turbo-C++ 同时获得鼠标和键盘输入。
我想使用两个函数。第一个函数是main可以接受键盘输入或调用该delay函数dos.h以暂时停止main().
第二个函数处理鼠标输入:
void mouse()
{
union REGS in,out;
in.x.ax=1; // Show mouse pointer
int86(0x33,&in,&out); //interrupt call
while(1)
{
//print the location whenever it changes (not required)
}
}
Run Code Online (Sandbox Code Playgroud) 人们可以快速学习以下形式的命令,例如 C 语言中的命令
printf("%d", x);
Run Code Online (Sandbox Code Playgroud)
或者
printf("%lu", x);
Run Code Online (Sandbox Code Playgroud)
但是对于x的二进制表示形式,不存在%lu或%d的类似物。
我的问题首先是为什么会这样,其次是在什么时候(在哪个抽象级别)二进制表示形式会转变为十进制或十六进制?
Stack 网络上的类似点似乎只能引出特定于语言的答案或实现/库建议。然而,我的问题是关于我对数据如何抽象的整体理解,以及操作系统是否见过二进制文件,或者是否有比操作系统更低级别的东西覆盖它。
为了进一步强调我的方向,考虑一个切题的问题:以十六进制编程源文件比以十进制编程(例如在常量或变量初始化期间)对性能(速度或存储)有任何好处吗?
对于一个新手/愚蠢的问题,我很抱歉,但这让我困扰了一段时间,而且似乎很难找到直接的答案。问题是关于计算机如何在低级别工作 - 更具体地说,是否有计算机可以执行的命令未包含在x86-64指令中。换句话说,您可能会问是仅使用 x86-64 指令编程的操作系统,并且操作系统运行的程序也是如此。请注意,我不是在询问特定于处理器的隐藏命令或附加命令,我们可能假设这些不存在。
提问的动机:
通常的说法是编译器将特定语言的程序编译为机器码。但是,有许多命令不能(据我所知)仅使用 x86-64 指令用汇编语言编写。甚至像“malloc”这样简单的东西。所以看起来为操作系统编写的实际程序由机器代码和操作系统指令组成?
如果查看 x86-64 指令集,似乎 I/O 命令(例如访问键盘、鼠标、硬盘驱动器、GPU、音频接口、时间、显示器、扬声器等)并没有针对它的所有命令,尽管可以使用 INT 命令来完成某些任务。根据这个答案“在现代体系结构上,外围设备的访问方式与内存类似:通过总线上的映射内存地址。”,无论在代码方面意味着什么。所以看起来甚至操作系统也不是只用 x86-64 指令编写的?
assembly operating-system cpu-architecture machine-code low-level
我的代码如下。当我检查值的地址时,它存储为280 288 290 298. 为什么要以这种模式存储?
package main
import "fmt"
func main() {
const a = 1111111111111111111
test := [7]int{a, 1, 33333,4,6,7,7}
fmt.Println(&test[0])
fmt.Println(&test[1])
fmt.Println(&test[2])
fmt.Println(&test[3])
fmt.Println(&test[4])
fmt.Println(&test[5])
fmt.Println(&test[6])
}
Run Code Online (Sandbox Code Playgroud)
输出 :
0xc00000e280
0xc00000e288
0xc00000e290
0xc00000e298
0xc00000e2a0
0xc00000e2a8
0xc00000e2b0
Run Code Online (Sandbox Code Playgroud) 目前,我正在尝试使用python访问操作系统时钟。
有什么方法可以让我在这个确切的时间访问时钟值,并获得返回返回的字符串,比如说太平洋标准时间12:00:00 am或只是时间?时区是一个加号:)
我目前已经这样做了,time.clock()但没有任何东西可以给我带来价值:/