小编Jey*_*ram的帖子

.s文件可以直接执行吗?

我正在寻找解释为什么我不能.s直接使用文件.

我试图在X86_64上学习汇编语言,这给了我汇编代码:

gcc -S sample.c 
Run Code Online (Sandbox Code Playgroud)

为什么我不能直接使用它nasm

我改名sample.ssample.asm,并试图做到这一点:

 nasm -f elf -l sample.lst  sample.asm
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误(如果需要将发布).我以为中间文件是汇编代码.请澄清.

c linux assembly x86-64

1
推荐指数
1
解决办法
2833
查看次数

多处理器架构中堆栈指针和程序状态字是如何维护的?

在多处理器架构中,寄存器是如何组织的?

例如,在 4 核处理器中,一次至少可以运行 4 个进程。
堆栈指针、程序状态寄存器和程序计数器是如何组织的?

其他通用寄存器呢?

我的猜测是,每个内核都有一组单独的寄存器。

operating-system processor computer-architecture cpu-registers multiprocessing

1
推荐指数
1
解决办法
1080
查看次数

具有C语言功能的枚举

当我检查ffmpeg的源代码时,我看到这一行:

enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method
(const AVFormatContext* ctx);
Run Code Online (Sandbox Code Playgroud)

enum这里有什么功能?

c

1
推荐指数
2
解决办法
185
查看次数

使用fgets +动态内存分配

我有一个需要帮助的作业问题.我需要实现一个功能char *getStrFromFile(FILE*);.我只是不明白它.我试图弄清楚这个问题.

此函数从fpin指向的打开文件中安全地读取未知长度的完整行.它返回的行最多为CHUNKSZ-1个字符,长度超过保持行所需的最小值.它最初分配一个DEFLEN字符数组来保存字符串,如果这个空间不足以容纳字符串,它将迭代地创建一个更大的CHUNKSZ字符串,将旧字符串复制到它释放旧字符串,然后读取从文件中的更多字符,并继续这个,直到可以返回任意长度的整行.

RETURNS:如果fpin中没有剩余字符,则返回NULL;否则:指向分配数组的指针最多为CHUNKSZ-1个字符,长度超过文件fpin保持任意长行所需的miminum

 int main(int nargs, char *args[])
 {
    FILE *fpin;
    char *getStrFromFile(FILE*);
    if (nargs != 2)
    {
       fprintf(stderr, "USAGE: %s <file>\n", args[0]);
       exit(1);
    }
    fpin = fopen(args[1], "r");
    while(1)
    {
       char *ln;
       ln = getStrFromFile(fpin);
       if (!ln)
          break;
       printf("%s", ln);
       free(ln);
    }
    fclose(fpin);
    return(0);
 }
Run Code Online (Sandbox Code Playgroud)

这是我必须使用的主要方法.这是我目前所知道的.

char *getStrFromFile(FILE *fpin)
{
  char string[DEFLEN];
  if(fgets(string, CHUNKSZ, fpin) != NULL) {
    int l = lstr(string);
    if(string[l-1] = '\n') {
      return string;
    } else {
      int size = 1;
      int …
Run Code Online (Sandbox Code Playgroud)

c fgets dynamic-memory-allocation

0
推荐指数
1
解决办法
2209
查看次数