思考retf指令
assume cs:code,ss:stack
stack segment
db 16 dup(0)
stack ends
code segment
mov ax, 4c00h
int 21h
start:
mov ax, stack
mov ss, ax
mov sp, 16
mov ax, 0
push cs
push ax
mov bx, 0
retf
code ends
end start
思考:为什么执行mov ss,ax后 cs进入了栈 01a4又是什么
此时ax寄存器中的值进栈,sp-2
此时cs为什么发生变化?
应该是先ip入栈但实验结果为cs先入栈又是为何?且cs为何不是0000而是01a4呢?
为什么没执行第一行的程序 mov ax, 4c00h呢?
下面看ret指令
assume cs:code,ss:stack
stack segment
db 16 dup(0)
stack ends
code segment
mov ax, 4c00h
int 21h
start:
mov ax, stack
mov ss, ax
mov sp, 16
mov ax, 0
push ax
mov bx, 0
ret
code ends
end start
执行mov ss,ax后 cs进入了栈 01a4又是什么
结果同上
感觉现实栈清零,然后cs入栈,ip在入栈?但IP为什么不是0000,而是01a4?
且与retf指令不同的是,ret指令cs未变,而retf执行后cs发上变化?
ret执行后跳转至mov ax, 4c00h,而retf指令去没有,以为cs变化了?
retf程序少了一句 push cs 严重错误
assume cs:code,ss:stack
stack segment
db 16 dup(0)
stack ends
code segment
mov ax, 4c00h
int 21h
start:
mov ax, stack
mov ss, ax
mov sp, 16
mov ax, 0
push cs
push ax
mov bx, 0;这一句的作用是什么呢?
ret
code ends
end start
依旧是cs 和01a4入栈
mov bx, 0;这一句的作用是什么呢?
现在唯一的问题就是 mov ss, ax 后栈中出现的变化的问题,日后进行深入研究