繁体   English   中英

具有段和偏移量的推入寄存器的含义

[英]Meaning of push registers with segment and offset

我想用汇编语言创建MBR。 但是我有代码,由我不理解的人给出。 当你写

push ax
push bx

什么是段和偏移量

有关更多详细信息,请阅读以下代码:

    [BITS 16]
[ORG 0x0]

mov ax, 0x07C0
mov ds , ax
mov es , ax
mov ax , 0x8000
mov ss , ax
mov sp , 0xf000

mov si ,msgDebut
call afficher

end :
    jmp end

msgDebut db "HelloWorld!!!!",13,10,0

afficher :
    push ax
    push bx

.debut :
    lodsb
    cmp al ,0
    jz .fin
    mov ah , 0x0E
    mov bx , 0x07
    int 0x10
    jmp .debut

.fin :
    pop bx
    pop ax
    ret

times 510-($-$$) db 144
    dw 0xAA55

您能使用内存寻址,分段和偏移量抽象逐行解释此代码吗?

push指令将其操作数放在堆栈上以进行保存。
堆栈是为此目的预留的内存区域。

所述stackpointer确定其中数据将被存储在存储器中。 当堆栈指针SS:SP等于0x8000:0xEFFE时, push ax将首先将堆栈指针降低2,使其变为0x8000:0xEFFC,然后将AX寄存器的内容写入该内存地址。
此后, push bx将再次使堆栈指针降低2,因此它现在变为0x8000:0xEFFA,然后将BX寄存器的内容写入该内存地址。

pop指令使push操作反向。 您可以使用它们将寄存器恢复到其原始值。

afficher :
    push ax   ; Preserve AX
    push bx   ; Preserve BX
    ...
    pop bx    ; Restore BX
    pop ax    ; Restore AX
    ret

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM