[英]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.