【问题标题】:Storing the memory address of a pointer as an integer将指针的内存地址存储为整数
【发布时间】:2013-02-11 17:03:57
【问题描述】:

好的,我正在尝试使用一些内联汇编来编写 outportb 函数。但是,VS2010 中的(内联)汇编将不接受 char 变量作为操作数。我想要做的是创建一个指向 char 输入的指针,然后将输入字符的内存地址作为整数传递,然后将数据从该地址复制到目标地址。如果我创建一个 char 指针并传递输入 char 变量的地址,如何将数据的内存地址提取为一个短整数以将其作为 asm 操作数传递?

【问题讨论】:

  • 我知道您可以使用 cout 函数打印指向屏幕的指针的地址,但如果我要写:char data;字符 *c = &data;短 i = c;然后我得到一个编译器错误,所以这种方法显然不起作用。
  • 显示你正在尝试的代码和你得到的错误。
  • 无符号字符数据; _asm MOV dx,[数据]
  • 或者这样:unsigned char data /*(输入参数)*/, unsigned char *c= &data.我想获取数据的内存地址以将其作为 asm 操作数放在括号中。
  • 如果你解决了参数问题,你将面临下一个问题——that you are not allowed to directly access the hardware under Windows

标签: c++ pointers visual-c++ assembly inline-assembly


【解决方案1】:

由于无符号字符数据类型使用 ASCII 码,处理器无法将其与无符号 8 位整数区分开来。所以我想出的方法是创建一个 char 指针并将输入参数的内存地址传递给指针,然后将 char 指针移动到一个 16 位寄存器,然后可以将其直接 MOVd 到内存中。内联汇编代码实际上绕过了 Windows 内存管理;这就是它的美妙之处。 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多