小编Rob*_*t B的帖子

你如何解释gcc对i386的IN,OUT指令的内联汇编约束?

据我所知,gcc内联汇编中使用的约束告诉gcc输入和输出变量必须(或必须),以便生成有效的汇编.正如精细手册所说,"对操作数放置的限制".

这是一个教程中特定的工作示例.

static inline uint8_t inb(uint16_t port)
{
    uint8_t ret;
    asm volatile ( "inb %1, %0"
                   : "=a"(ret)
                   : "Nd"(port) );
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

inb是AT&T语法 - 代表IN从I/O端口接收一个字节的i386 指令.

以下是本指令的规格,取自i386手册.需要注意的是端口号,从去0x00000xFFFF.

IN AL,imm8  // Input byte from immediate port into AL
IN AX,imm8  // Input word from immediate port into AX
IN EAX,imm8 // Input dword from immediate port into EAX
IN AL,DX    // Input byte from port DX into AL
IN AX,DX …
Run Code Online (Sandbox Code Playgroud)

x86 gcc g++ inline-assembly osdev

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

Python 3 bytes.index:更好的方法?

刚刚在7天内学习了Python 3,我觉得我对字节字符串的理解有点漏洞.在Python 3中,假设我有一个字节字符串b'1234'.它的迭代器返回整数:

Python 3.2.3 (default, May 26 2012, 18:49:27) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> for z in b'1234':
...   print(type(z))
... 
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'> 
Run Code Online (Sandbox Code Playgroud)

我可以在字节字符串中找到一个整数(定义in是它搜索相等):

>>> 0x32 in b'1234'
True
Run Code Online (Sandbox Code Playgroud)

但是,我想在字节字符串中找到给定整数的索引.bytes.index需要一个子字符串:

>>> b'1234'.index(b'2')
1
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个x我想要找到的变量,这是我提出的最好的变量:

>>> x = 0x32
>>> b'1234'.index(bytes([x]))
1
Run Code Online (Sandbox Code Playgroud)

我知道Python比这更优雅.我显然遗漏了一些明显的东西.除了创建单个整数的序列之外,有关更简单的方法吗?或者是真的吗?

python indexing byte bytestring python-3.x

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

标签 统计

byte ×1

bytestring ×1

g++ ×1

gcc ×1

indexing ×1

inline-assembly ×1

osdev ×1

python ×1

python-3.x ×1

x86 ×1