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

时间:2019-02-21 19:26:11

标签: assembly x86 nasm i386

我想用汇编语言创建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

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

1 个答案:

答案 0 :(得分:2)

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

堆栈指针确定位置将数据存储在内存中。   当堆栈指针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