小编Pet*_*des的帖子

嵌入式设备是否仍然需要硬件中断(而不是标志)?

一般来说,嵌入式设备上硬件中断的ISR应该非常短:通常只需设置一个标志,该标志将在正常执行过程中(例如在任务循环中)被读取。

这就引出了一个问题:如果是这样,成熟的硬件中断和中断控制的目的是什么?为什么MCU不简单地设置一个标志(在指定的寄存器中,内存映射中),同样可以通过任务循环检查该标志?如果我们要做的只是设置一个标志,为什么还要花费实际转移执行的费用(MCU 电路、执行中断和复杂性)?

背景:我的目标是理解。如果答案是“99% 的情况下,你是对的,但只有 1% 的情况下它会产生影响……”,这将实现我的目标。

hardware embedded cpu interrupt cpu-architecture

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

使用汇编除以 2 的可变幂

我有这个任务:

\n
\n
除幂2
\n

计算x /2 n,对于 0 \xe2\x89\xa4 n \xe2\x89\xa4 30。向零舍入。

\n
    \n
  • 论点1:x
  • \n
  • 论据2:n
  • \n
\n

例子:

\n
    \n
  • dividePower2(15,1) = 7
  • \n
  • dividePower2(-33,4) = -2
  • \n
\n
\n

这是我到目前为止所得到的,但我不知道我是否朝着正确的方向前进(需要 AT&T 语法):

\n
.global dividePower2\n   dividePower2:\n   sar $2, %esi\n   ret\n
Run Code Online (Sandbox Code Playgroud)\n

assembly bit-manipulation x86-64 bit-shift integer-division

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

为什么这段代码打印由 clang 和 gcc 编译的不同值?

汇编:

.intel_syntax noprefix
.global Foo
Foo:
    mov ax, 146
    ret
Run Code Online (Sandbox Code Playgroud)

主要.c:

#include <stdio.h>

extern int Foo(void);

int main(int argc, char** args){
    printf("Asm returned %d\n", Foo());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我编译并链接:

(compiler name) -c asm.s -o asm.o
(compiler name) asm.o main.c -o  main
./main
Run Code Online (Sandbox Code Playgroud)

我正在使用 Windows 和 LLVM 的 x64 windows 二进制文件。

GCC 打印 146(如预期),但 clang 生成的代码打印随机值,为什么?在 Windows 上使用 gdb 调试 clang 二进制文件显然存在一些问题,因此我无法提供任何 gdb 日志。GCC 二进制文件正在执行我期望的操作,但不是 Clang。

c assembly x86-64 calling-convention

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

C++中的汇编程序

我有以下代码.

#include<iostream>
using namespace std;
int main() {
    int result=0;
    _asm {
         mov eax,2
         mov eax,result;
    }

    cout<<result<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道汇编程序很好,但为什么程序输出2到屏幕?

c++ x86 inline-assembly visual-c++ intel-syntax

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

在 8086 上将两个 32 位数字相乘得到一个 64 位数字(32x32 =&gt; 64 位与 16 位相乘)

我如何将汇编中的两个 32 位数字或一个 32 位与另一个 16 位相乘,有人知道算法吗?

data1 dw 32bit
data2 dw 32bit    
mov ax,data2
Mul data1
Run Code Online (Sandbox Code Playgroud)

assembly multiplication bigint x86-16

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

有人在x86处理器上有关于16位DOS/BIOS软件中断的书或链接吗?

任何人都可以推荐一本书或提供描述x86-16汇编语言软件中断的Web引用吗?

例如,

mov ah,1
int 21h
Run Code Online (Sandbox Code Playgroud)

读一个字符.

assembly dos bios x86-16

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

将 DB 变量中的字节值加载到 16 位寄存器中(符号或零扩展字节)

我正在使用 MASM 编译器和 DOSBOX。我想将变量的值保存到寄存器中。我想将num1值保存到cx寄存器中。我怎样才能做到这一点?

      .MODEL SMALL
.STACK  50H
.DATA
num1 db '5'
    NL  DB  0DH, 0AH, '$'        
    msg     db ?,0AH,0DH,"Enter an odd number between 0 to 10:$"
     nxtline db 0Ah,0DH,"$"
.CODE
MAIN PROC
    MOV AX, @DATA
    MOV DS, AX
    
    
            
              LEA DX,msg     
              mov ah,9
              int 21H
              LEA DX,nxtline    
              mov ah,9
              int 21H
              
              MOV AH,1                    
              INT 21H 
              LEA DX,nxtline    
              mov ah,9
              int 21H
              
              
              
       mov bl,al   ;save the value from input
              mov num1,bl
               LEA DX,num1     
              mov ah,9
              int 21H …
Run Code Online (Sandbox Code Playgroud)

assembly dos masm dosbox x86-16

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

在数字之前0x表示什么?

有谁知道为什么人们在数字之前使用0x?

例如:

mov ah, 0x16

mov ah, 16
Run Code Online (Sandbox Code Playgroud)

它们之间有区别吗?

assembly x86-16

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

微控制器(esp32)使用x86还是arm,我可以在这些MCU中安装Linux

我正在进入微控制器,所以我想知道像esp32和esp8266这样的微控制器和其他同类产品是基于x86还是arm架构?我尝试在互联网上搜索,但没有得到足够的线索

如果它使用这两种架构中的任何一种,是否有机会在这些控制器中安装Linux,我想到了这一点,因为freeRTOS说它是微控制器的操作系统,我认为它不是

但不知何故,如果它是一个操作系统,那么像Linux这样的其他操作系统呢,他们今天有机会安装在MCU中吗?或者甚至在未来五年内他们有机会吗?

microcontroller x86 operating-system arm xtensa

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

Nand2Tetris C 指令组合中的“a”是什么意思?

当我研究 Nand2Tetris 汇编程序部分时,我并没有真正理解“a”。它是如何运作的?

在单位中,无论如何它都不使用它存在的原因。

在此输入图像描述

assembly nand2tetris

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