Значение нажимных регистров с сегментом и смещением
Я хочу создать 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 ответ
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