cpu-registers

    0热度

    1回答

    我有一个C代码在我面前,我不得不翻译成MIPS汇编语言。 我不是在寻找一个直接的答案,但我希望有人纠正我对这个问题的思考方式。 在我的前面的C代码: x = ((++z)<=y); 我在考虑到在x,y和z分别存储在寄存器$ 6,$ 7 $ 8 问题是我不能使用运算符来比较直接小于或等于。我仅限于使用以下比较操作数:bne,beq,ori,slt。 我走近这一问题的方法是这样: addi $8

    0热度

    1回答

    目前我正在研究一个使用AVR ATMega8微处理器的嵌入式系统的工作。由于它有一个非常小的内存区域,我试图使用__regvar命令将一些全局变量存储到寄存器中。 我需要从多个文件访问这些变量,而不是使所有这些变量都是外部的,我曾考虑过只使用外部指针指向第一个指针,并通过偏移量修改所有变量。 例如: 全球1 - > $的Reg4 全球2 - > $ REG5 全球3 - > $ REG6 全球4

    -1热度

    1回答

    我正在写一个函数在我的16位实模式汇编操作系统中打印每个寄存器。我遇到的几个问题: 1移动一个16位寄存器为8位的一个 mov al, bx 这给了我error: invalid combinations of opcodes and operands。无论如何,我可以做到这一点? 2是否将值移入ax影响ah和/或al? mov ah, 0x5 mov al, 0x10 mov ax, 0

    2热度

    2回答

    我知道CPU通过IO端口地址(通常是16位)与IO设备进行通信,但我想知道谁是IO端口地址分配? BIOS?中央处理器? OS?这些地址是预设的还是动态的?

    0热度

    2回答

    我想写一个未知数量的部件参数的函数,在一个点上我想莱亚尔到%尤指在一定取一个字节在栈上的偏移。我试图这样做: movl offset,%eax leal (%eax,%esp,1),%eax # movb %bl,(%eax) 其中偏移量是一个4字节.long存储%esp中最近使用的参数的偏移量。在组装这一段代码,但是,我得到这个消息: Error: `(%eax,%esp,1)'

    2热度

    1回答

    我正在将一些值转移到rax,但调试器显示它正在转移到eax。它有什么问题?它与调试器,nasm还是我的知识?无论如何,代码是完美的。我使用的调试器是Evan的调试器。

    0热度

    1回答

    当我给出1作为从键盘输入此代码的输入时,rbx更改为a31h。但是数字'1'的ASCII值是30h。那么为什么rbx成为30小时? section .text global _start _start: mov rax,1 mov rdi,1 mov rsi,msg mov rdx,len syscall mov rax,0 mov rdi,0 mov rsi,num

    0热度

    1回答

    我正在尝试编写一个类似于sprintf的函数(虽然有点简单)。我已经到了应该将整数打印到结果字符串 - 参数%d的地步。我的策略是将数字除以10,然后将48(ASCII偏移量)加到剩下的数字上,然后将它推入堆栈并增加esi,直到商数为0.然后,我将每个数字从堆栈中弹出,然后将它们添加到结果字符串。这是我当前的代码: addint: movl $0,%edx movl $1

    0热度

    3回答

    如果不是,你能解释图像中的编译器是什么意思吗? https://docs.google.com/document/d/1q3ZrTdat0VFgg3sSsTxZRuQXS3ODUDKMzG5tSAt9bIM/edit

    0热度

    1回答

    什么是可能出现的情况,当一个程序计数器或者指令指针得到零?