汇编&栈基础

汇编&栈基础

说明

push寄存器:将一个寄存器中的数据入栈

pop寄存器:出栈用一个寄存器接收数据

sp:栈顶指针(段寄存器)

ax,bx,ss,sp 均为16位寄存器(2字节)

image-20220120153100262

image-20220120153415972

操作

assume cs:codesg    ;cs寄存器指向该程序的首地址
 
codesg segment
    mov ax,1000H    ;将1000H送入寄存器ax,相当于ax=1000H
    mov ss,ax
    mov sp,0010H
 
    mov ax,001AH    ;将ax,bx赋值
    mov bx,001BH
 
    push ax
    push bx         ;将ax中的值,bx中的值入栈
 
    sub ax,ax       ;sub为减法指令,相当于ax=ax-ax
    xor bx,bx       ;xor自身,相当于清零,与上一条指令功能一样
 
    pop ax          ;将栈中保存的数据送入ax,pop也有mov指令类似的功能
    pop bx
 
codesg ends
end

初始态

ax = 0000
bx = 0000
ss = 1CD3
sp = 0000

mov ax,1000H

ax = 1000
bx = 0000
ss = 1CD3
sp = 0000

mov ss,ax

ax = 1000
bx = 0000
ss = 1000
sp = 0000

mov sp,0010H

ax = 1000
bx = 0000
ss = 1000
sp = 0010

mov ax,001AH:

ax = 001A
bx = 0000
ss = 1000
sp = 0010

mov bx,001BH:

ax = 001A
bx = 001B
ss = 1000
sp = 0010

push ax;

ax = 001A
bx = 001B
ss = 1000
sp = 000E

image-20220120153554002

image-20220120155353271

push bx:

ax = 001A
bx = 001B
ss = 1000
sp = 000C

image-20220120155422576

sub ax,ax:

ax = 0000
bx = 001B
ss = 1000
sp = 000C

xor bx,bx:

ax = 0000
bx = 0000
ss = 1000
sp = 000C

pop bx:

ax = 0000
bx = 001B
ss = 1000
sp = 000E

image-20220120155614621

pop ax:

ax = 001A
bx = 001B
ss = 1000
sp = 0010

image-20220120155649320

注意

最后pop的时候,之所以先pop bx ,再ax,是因为栈是先进后出的,如果先pop ax,再bx的话,会导致ax得到的是bx的数值,bx得到的是ax的数值

posted @ 2022-01-20 15:59  MuRKuo  阅读(78)  评论(0编辑  收藏  举报