v
1. 理论
e 0021:0,30H,31H,32H,33H,34H,34H,36H,37H
mov ax,0021
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,ax
move sp,0100
move ax,[0] ;ax=3130 h
add ax,[2] ;ax=6462h
move bx,[4] ;bx=3534h
add bx,[6] ;bx=6c6ah
push ax ;执行后sp=00FE ,修改的内存单元地址是22100;内容是将ax中的值6462h传递给栈
push bx ;执行后sp= 00FC ,修改的内存单元地址是22098; 内容是将BX中的值6c6ah传递给栈
pop ax ; 执行后sp=00FE,内容是将栈:22096中的值6c6ah传递给AX然后将SP=SP+2;
pop bx;执行后SP=0100.内容是将栈22098中的值6462h传递给bx然后SP=SP+2;
push [4] ;执行后sp =00FE;修改的内存单元地址是22100;内容是将0021:4字单元中的值3534h传递给栈
push[6];执行后sp=00FC;修改的内存单元地址是22098;内容是将0024:6字单元中的值3736h传递给栈
实际:
执行第一步:mov ax,0021
mov ds,ax
mov ax,2000
mov ss,ax 和mov sp,0100一起执行了
mov ax,[0]
add ax,[2]
mov bx,[4]
add bx,[6]
push ax
push bx
pop ax
pop bx
push [4]
push [6]
与理论一致
2。
-a
mov ax,2000
mov ss,ax
mov sp,10
mov ax,3123
push ax
mov ax,3366
push ax
-e 2000:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
执行mov ax,2000
mov ss,ax和mov sp 10 , 2000:0 f 的值发生变化了 寄存器IP ss,sp变了
ov
mov ax,3132 2000:0 f 继续发生变化:AX IP发生改变
push ax ; 2000:0 f改变,SP,IP改变
mov AX,3366: 2000:0 f改变 AX,IP 改变
PUSH ax,2000:0 f改变 IP SP改变
总结
使用T修改栈段寄存器SS的指令会使其与上一条指令一起执行
初始时栈顶 与栈底的值相同
2〉 2000:0 F 总是出现073F 这个地址和IP 地址 根据图片的对比从2000:f 到2000:0 一次性出现IP,CS的地址再出现指令例如: push ax :10 01 3F07 A3 01
翻译为: 073F:0110 01 A3