skw 发表于 2014-8-1 14:03:33

执行iret出栈的CS,IP ,是怎么压入栈的?

assume cs:code
data segment
      db 'conversation',0
data ends
code segment
start:
      mov ax,cs
      mov ds,ax            
      mov si,offset nr      
      mov ax,0
      mov es,ax            
      mov di,200h
      mov cx,offset nrend-offset nr   
      cld
      rep movsb               
      ;以上9句为安装中断例程

      mov word ptr es:,200h   
      mov word ptr es:,0   

      mov ax,data
      mov ds,ax
      mov si,0
      mov ax,0b800h
      mov es,ax
      mov di,12*160

s:      cmp byte ptr ,0   ;es:si处的数据跟0比较
      je ok               
      mov al,
      mov es:,al
      mov word ptr es:,0cah
      inc si
      add di,2
      mov bx,offset s-offset ok      
      int 7ch
ok:   mov ax,4c00h
      int 21h

nr:   push bp         ;定义中断例程[开始]
      mov bp,sp
      add ,bx
nrret:pop bp
      iret            ;中断返回   执行iret后出栈的CS,IP是怎么指向s处的 它是在什么地方被压栈的?望指教。谢谢!

nrend:nop             ;定义中断例程[结束]

code ends
end start


SunshineMXT 发表于 2014-8-2 01:32:57

add ,bx ,对压入栈中的ip进行了偏移。

oggplay 发表于 2014-8-4 09:09:59

int 7ch

cable5881 发表于 2014-8-4 12:18:53

好像很复杂的样子:sad
页: [1]
查看完整版本: 执行iret出栈的CS,IP ,是怎么压入栈的?