簡體   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