yuinitiatec++ 发表于 2014-3-30 16:41:16

int指令在课本中出现的si有两次,它们是如何运作以至于没有出错的呢?

------int框架程序------
assume cs:code

data segment
db 'conversation',0
data ends

code segment
start:
   mov ax,data
       mov ds,ax
       mov si,0;起作用是将索引data段中的数据
       int 7ch   ;调用7c中断程序
       
       mov ax,4c00h
       int 21h
code ends
end start

;将数据段中得数据利用int指令变成大写字母

;程序调试ok



------int处理程序-------
assume cs:code
code segment
start:            ;安装程序
         mov ax,cs      ;源地址
       mov ds,ax
       mov si,offset capital
       
       mov ax,0      ;目标地址
       mov es,ax
       mov di,200h
       mov cx,offset capitalend -offset capital
       cld
       rep movsb
       
       mov ax,0       ;设置中断向量表
       mov es,ax
       mov word ptr es:,200h
       mov word ptr es:,0
       mov ax,4c00h
       int 21h
       
                         ;设计中断处理程序
capital:       
           mov ch,0         
         push cx
           push si
change:
          mov al,ds:   ;将数据给了al
          mov cl,ds:   ;将数据给cl进行判断
          jcxz ok
         and al,11011111b   ;进行与运算
         mov ds:,al ;提示在下一行看效果
         inc si
       jmp short change
ok: pop si
       pop cx
       iret
capitalend:
             nop
code ends
end start       
        *****************
在int处理段中出现了两次si为什么没有影响到执行呢?
       

青玄 发表于 2014-3-30 16:41:17

因为在使用第二个si的时候,第一个si已经被压入了栈中,等到capital执行完后,它就POP si继续执行外面的程序!

黄种人 发表于 2014-6-27 14:42:10

你可以看看堆栈的内容
页: [1]
查看完整版本: int指令在课本中出现的si有两次,它们是如何运作以至于没有出错的呢?