汇编指令
.定义栈
stack segment
db 100 dup (0) ;定义100个0,长度100bytes
stack ends
. ret(return)
pop ip
或
(IP) = ((SS)*16 + (SP))
(SP) = (SP) + 2
.retf(return far)
pop ip
pop cs
或
(IP) = ((SS)*16 + (SP))
(SP) = (SP) +2
(SS) = ((SS)*16 + (SP)
(SP) = (SP) + 2
.call 标号 (将当前的IP压入栈后,转到标号处执行指令)
(SP) = (SP) -2
((SS)*16 + (SP)) = (IP)
(IP) = (IP) + 16位位移
或
push ip
jmp near ptr 标号
16位位移=“标号”处的地址-call指令后的第一字节的地址;
16位位移的范围为-32768~32767,用补码表示;
16位位移由编译程序在编译时算出
.call 16位寄存器
.call word ptr 内存单元地址
.call dword ptr 内存单元地址
标志寄存器
.ZF
记录相关指令执行后,其结果是否为0
如果结果为0,那么ZF=1,如果结果不为0,那么ZF=0
.PF
奇偶标志位
.SF
符号标志位
.CF(无符号)
进位标志位
.OF(有符号)
溢出标志位
.int
1)取中断类型码n
2)标志寄存器入栈,IF=0,TF=0
3)CS,IP入栈
4)(IP)=(N*4),(CS)=(N*4+2)
.iret
pop IP
pop CS
popf
.nop
站一个字节的指令
.IF
IF=1响应可屏蔽中断
IF=0不响应可屏蔽中断
.int
1)取中断类型码n
2)pushf,IF=0,TF=0
3)push IP,push CS
4)(IP)=(n*4),(CS)=(n*4+2)