x86

    0热度

    1回答

    我有一个调用另一个函数的主函数。我已经在很多地方读到,发生以下情况时,函数调用发生: push %ebp movl %esp, %ebp 我的目标是前和函数调用后找到堆栈的顶部。 以下是我的主: #include <stdio.h> long *ebp; int main(){ asm("movl %ebp,ebp"); printf("Top of stack be

    0热度

    1回答

    装配中的初学者级别。 我接收在Visual Studio中的错误是: 1> File2.asm(27):错误A2006:未定义的符号:sprintf的 1> File2.asm(28):错误A2006:未定义的符号:MessageBoxA 文件1是什么处理的计算 文件2就是打印结果的一个窗口。 行处理打印指令是: invoke sprintf, addr szBuf, offset $interm

    0热度

    2回答

    网上的一些程序似乎做同样的工作,甚至没有使用int指令,,如直接写入bx800。在这种情况下,BIOS究竟应该如何知道某些文本是否应该写入控制台?是否确保初始中断发生?如果是这样,何时,什么是做同样工作的等效流水线(或中断向量和ah的组合)?

    0热度

    1回答

    我想了解命令行参数如何工作的细节。 这就是我的想法发生了: 当您编译包含在C main()功能的源代码,生成的目标文件将与CRT相连,且入口点计划将会是_start()函数(它存在于CRT中),并且_start()将会调用main()。 现在,当你运行你的程序,并通过它的一些命令行参数,命令行参数将被传递给_start()功能,然后_start()将重新通过命令行参数main()。 我正确吗?

    -1热度

    1回答

    我想编写一个小程序来获取x86 CPU的功能。指CPUID文档后,我发现有2部分: (1)EAX=1: ...... As of January 2011, the standard Intel feature flags are as follows: ...... (2)EAX=80000001h: ...... AMD feature flags are as follows:

    3热度

    1回答

    当您使用内存覆盖前缀但所有操作数都是寄存器时会发生什么? 因此,假设您的代码为mov eax, ebx或add eax, ebx,默认值为32位,但您使用67h覆盖。 处理器如何处理这种情况?

    1热度

    1回答

    是否可以使用索引寻址模式语法计算地址并将其存储到寄存器中?像下面(错误)的表达(在AT & T汇编语法): movl $dataarray(,%edi,8), %eax 我知道变址寻址模式,可以用于移动数据: movl dataarray(,%edi,8), %eax 然而,在这种情况下,我想要做的是将dataarray元素的地址存储在%eax寄存器中,其索引为%edi。

    0热度

    1回答

    我正在创建一个x86解码器,我正在努力理解并找到计算指令助记符的有效方法。 我知道操作码6 MSB是操作码位,但我找不到在助记表中使用这6位的任何地方。我发现唯一的助记表是整个操作码字节本身,而不仅仅是6个MSB。 我想问一下哪些有效的方法可以解码操作码字节中编码的助记符,以及是否有使用6个MSB而不是整个操作码字节的表引用。

    0热度

    1回答

    我已阅读“英特尔软件开发人员手册”第3卷第20节,其中介绍了虚拟8086模式的工作原理,包括使用VIF和VIP标志。不过,我仍然对一些事情感到困惑。 VIF标志用作IF标志的替代品,因此即使它仿真的实模式程序不希望8086仿真程序(可能是某些用户空间程序)可以接收可屏蔽的硬件中断至。 为什么模拟器想要这样做? VIP被用作标记何时收到中断的空间。根据手册,如果处理器接收到一个可屏蔽的中断,但被仿真

    0热度

    1回答

    我正在制作一个操作系统,我被困在GDT中。我尝试过不同的教程,例如http://www.osdever.net/bkerndev/Docs/gdt.htm和http://www.jamesmolloy.co.uk/tutorial_html/4.-The%20GDT%20and%20IDT.html,但是我的操作系统总是崩溃。我怎样才能解决这个问题?我使用grub,所以内核已经处于保护模式。 bo