gpt4 book ai didi

assembly - 字节ptr和字ptr的区别

转载 作者:行者123 更新时间:2023-12-04 16:48:24 25 4
gpt4 key购买 nike

我在试卷上看到了以下问题,

VarM DWORD ABBF01598h
给出寄存器的内容 al , bx , 和 dl执行后
  • mov al, byte ptr VarM + 1
  • mov bx, word ptr VarM + 2
  • mov dl, byte ptr VarM + 3

  • 现在我通过定义知道 word ptr 和 byte ptr ,但我无法理解它们的概念。
    据我
  • al = b
  • bx = 0
  • dl = F

  • 请帮助我理解这些。提前致谢。

    最佳答案

    在您查看的情况下,byte ptrword ptr不要完成太多。虽然无害,但汇编程序已经“知道”aldl是字节大小的,并且 bx是字大小的。

    你需要类似 byte ptr 的东西当(例如)您将立即值移动到间接地址时:

    mov bx, some offset
    mov [bx], 1

    这通常是不允许的——汇编器无法知道您是否需要 1写入一个字节,一个字,一个双字,可能是一个四字,或者什么。您可以使用尺寸规范来修复它:
    mov byte ptr [bx], 1  ; write 1 into a byte
    mov word ptr [bx], 1 ; write 1 into a word
    mov dword ptr [bx], 1 ; write 1 into a dword

    您可以让汇编程序接受没有(直接)大小规范的版本:
    mov bx, some_offset
    assume bx: ptr byte

    mov [bx], 1 ; Thanks to the `assume`, this means `byte ptr [bx]`

    编辑:(主要是回复@NikolaiNFettisov)。试试这个快速测试:
    #include <iostream>

    int test() {
    char bytes[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    _asm mov eax, dword ptr bytes + 1
    }

    int main() {
    std::cout << std::hex << test();
    return 0;
    }

    我得到的结果是:
    5040302

    表明即使我已经告诉过它 dword ptr ,它只向地址添加 1,而不是 4。当然,如果有人选择编写不同的汇编程序,他们可以做不同的事情。

    关于assembly - 字节ptr和字ptr的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10413759/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com