gpt4 book ai didi

assembly - 16位汇编代码中的OFFSET是什么意思?

转载 作者:行者123 更新时间:2023-12-02 01:09:30 31 4
gpt4 key购买 nike

我正在查看 16 位实模式的一些示例汇编代码。

我遇到过这样的情况:

    mov    bx, cs
mov ds, bx
mov si, OFFSET value1
pop es
mov di, OFFSET value2

这是在做什么?那里有“OFFSET”有什么作用?

最佳答案

正如其他一些答案所说,offset关键字是指距定义它的段的偏移量。但请注意,段可能会重叠,并且一个段中的偏移量可能与另一段中的不同。例如,假设您在实模式下有以下片段

data SEGMENT USE16 ;# at segment 0200h, linear address 2000h

org 0100h
foo db 0

org 01100h
bar db 0

data ENDS

汇编器发现 foo 位于距 data SEGMENT 基点的偏移 0100h 处,因此无论它看到 offset foo 它将输入值 0100h,无论当时 DS 的值如何。

例如,如果我们将 DS 更改为 data 段基址以外的内容,则汇编器会假设:

mov ax, 200h            ; in some assemblers you can use @data for the seg base
mov ds, ax

mov bx, offset foo ; bx = 0100h
mov byte ptr [bx], 10 ; foo = 10


mov ax, 300h
mov ds, ax

mov bx, offset foo ; bx = 0100h
mov byte ptr [bx], 10 ; bar = 10, not foo, because DS doesn't match what we told the assembler

在第二个示例中,DS0300h,因此 DS 指向的段的基址为 03000h >。这意味着 ds:[offset foo] 指向地址 03000h + 0100h,它与 02000h + 01100h 相同,后者指向

关于assembly - 16位汇编代码中的OFFSET是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1669662/

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