Assembly language stack operations

assume cs:code, ds:data, ss:stack

data segment
	dw 0000H, 0002H, 0002H, 0004H, 0008H, 0001H, 0100H, 1000H
data ends

stack segment
	dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

code segment
start:	mov ax, stack		;ax=栈段首地址
		mov ss, ax			;ss赋值为栈段首地址
		mov sp, 16			;2*8=16
		mov ax, data		
		mov ds, ax			;data段首地址赋值给ds
		mov bx, 0			;bx=0
		mov cx, 8			;cx=8
	  s:push [bx]			;data段的数据入栈
		add bx, 2			;bx+2
		loop s
		
		mov bx, 0
		mov cx, 8
	 s0:pop [bx]			;出栈
		add bx, 2
		loop s0
		
		mov ax, 4c00H
		int 21H
code ends
end start

The above paragraph is equivalent to the following paragraph:

assume cs:code, ds:data, ss:stack

data segment
	dw 0000H, 0002H, 0002H, 0004H, 0008H, 0001H, 0100H, 1000H
data ends

stack segment
	dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

code segment

start:	mov ax, stack
		mov ss, ax
		mov sp, 16
		mov ax, data
		mov ds, ax
		push ds:[0]
		push ds:[2]
		push ds:[4]
		push ds:[6]
		pop ds:[6]
		pop ds:[4]
		pop ds:[2]
		pop ds:[0]
		
		mov ax, 4c00H
		int 21H
		
code ends
end start
78 original articles published · Like 3 · Visits 5596

Guess you like

Origin blog.csdn.net/qq_43071318/article/details/105413729