我想用汇编语言创建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
您能使用内存寻址,分段和偏移量抽象逐行向我解释此代码
答案 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