小编Bil*_*med的帖子

对堆栈中值的地址感到困惑

下面是一些工作 - 16 位 x86 程序集


        global    _start

        section   .text
_start: mov ah, 0x0e

        mov bp, 0x8000
        mov sp, bp

        push "A"
        push "B"
        push "C"

        pop bx
        mov al, bl
        int 0x10

        pop bx
        mov al, bl
        int 0x10

        mov al, [0x7ffe]
        int 0x10
        
        jmp $
        
        times 510 -( $ - $$ ) db 0
        dw 0 xaa55
Run Code Online (Sandbox Code Playgroud)

我将 3 个值压入堆栈,然后打印前 2 个值。我试图通过间接寻址打印第三个值,因此 mov al, [0x7ffe] - 但问题是,因为堆栈的基数为 0x8000 并且只能弹出 16 位值,要打印的最后一个字符的地址不是,-“a”是 0x8000 - 0x1 = 0x7FFF 而不是 0x8000 …

x86 assembly x86-16

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

标签 统计

assembly ×1

x86 ×1

x86-16 ×1