mirror of
https://github.com/cfenollosa/os-tutorial.git
synced 2025-12-17 12:24:37 +03:00
lesson 4, manipulating the stack
This commit is contained in:
42
04-bootsector-stack/boot_sect_stack.asm
Normal file
42
04-bootsector-stack/boot_sect_stack.asm
Normal file
@@ -0,0 +1,42 @@
|
||||
mov ah, 0x0e
|
||||
|
||||
mov bp, 0x8000 ; this is an address far away from 0x7c00 so that we don't get overwritten
|
||||
mov sp, bp
|
||||
|
||||
push 'A'
|
||||
push 'B'
|
||||
push 'C'
|
||||
|
||||
; to show how the stack grows downwards
|
||||
mov al, [0x7ffe] ; 0x8000 - 2
|
||||
int 0x10
|
||||
|
||||
; however, don't try to access [0x8000] now, because it won't work
|
||||
; you can only access the stack top so, at this point, only 0x7ffe (look above)
|
||||
mov al, [0x8000]
|
||||
int 0x10
|
||||
|
||||
|
||||
; recover our characters using the standard procedure: 'pop'
|
||||
; We can only pop full words so we need an auxiliary register to manipulate
|
||||
; the lower byte
|
||||
pop bx
|
||||
mov al, bl
|
||||
int 0x10 ; prints C
|
||||
|
||||
pop bx
|
||||
mov al, bl
|
||||
int 0x10 ; prints B
|
||||
|
||||
pop bx
|
||||
mov al, bl
|
||||
int 0x10 ; prints A
|
||||
|
||||
; data that has been pop'd from the stack is garbage now
|
||||
mov al, [0x8000]
|
||||
int 0x10
|
||||
|
||||
|
||||
jmp $
|
||||
times 510-($-$$) db 0
|
||||
dw 0xaa55
|
||||
Reference in New Issue
Block a user