. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  分析一个奇怪的程序遇到问题?  [待解决] 回复[ 34次 ]   点击[ 2462次 ]  
lovecpu
[帖 主] [ 发表时间:2007-06-26 20:49 ] 
荣誉值:5
信誉值:3
注册日期:2007-06-26 20:40
分析下面的程序,在运行前思考:这个程序可以正确返回吗?  
  运行后再思考:为什么是这种结果?  
   
   
  assume   cs:codesg  
  codesg   segment  
   
  mov   ax,4c00h  
  int   21h  
   
  start: mov   ax,0  
  s: nop  
  nop  
  mov   di,offset   s  
  mov   si,offset   s2  
  mov   ax,cs:[si]  
  mov   cs:[di],ax  
   
  s0: jmp   short   s  
   
  s1: mov   ax,0  
  int   21h  
  mov   ax,0  
   
  s2: jmp   short   s1  
  nop  
   
  codesg   ends  
  end   start
thedaydreamwang
[第19楼] [ 回复时间:2010-01-10 01:47 ] 
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18
今天终于把实验做了一遍实验过程如下
C:\>debug32 c:\masm\qiguai.exe
Debug32 - Version 1.0 - Copyright (C) Larson Computing 1994

CPU = 686, Virtual 8086 Mode, Id/Step = 067A, A20 enabled
-r
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=2186  ES=2186  SS=2196  CS=2196  IP=0005  NV UP DI PL NZ NA PO NC
2196:0005 B80000           MOV     AX,0000h
-u
2196:0008 90               NOP
2196:0009 90               NOP
2196:000A BF0800           MOV     DI,0008h
2196:000D BE2000           MOV     SI,0020h
2196:0010 2E8B04           MOV     AX,CS:[SI]
2196:0013 2E8905           MOV     CS:[DI],AX
2196:0016 EBF0             JMP     Short 0008

2196:0018 B80000           MOV     AX,0000h
2196:001B CD21             INT     21h
2196:001D B80000           MOV     AX,0000h
2196:0020 EBF6             JMP     Short 0018

2196:0022 90               NOP
-r
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=2186  ES=2186  SS=2196  CS=2196  IP=0005  NV UP DI PL NZ NA PO NC
2196:0005 B80000           MOV     AX,0000h
-t
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=2186  ES=2186  SS=2196  CS=2196  IP=0008  NV UP DI PL NZ NA PO NC
2196:0008 90               NOP
Trace Interrupt
-t
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=2186  ES=2186  SS=2196  CS=2196  IP=0009  NV UP DI PL NZ NA PO NC
2196:0009 90               NOP
Trace Interrupt
-t
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=2186  ES=2186  SS=2196  CS=2196  IP=000A  NV UP DI PL NZ NA PO NC
2196:000A BF0800           MOV     DI,0008h
Trace Interrupt
-t
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0008
DS=2186  ES=2186  SS=2196  CS=2196  IP=000D  NV UP DI PL NZ NA PO NC
2196:000D BE2000           MOV     SI,0020h
Trace Interrupt
-t
AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0020  DI=0008
DS=2186  ES=2186  SS=2196  CS=2196  IP=0010  NV UP DI PL NZ NA PO NC
2196:0010 2E8B04           MOV     AX,CS:[SI]
Trace Interrupt
-t
AX=F6EB  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0020  DI=0008
DS=2186  ES=2186  SS=2196  CS=2196  IP=0013  NV UP DI PL NZ NA PO NC
2196:0013 2E8905           MOV     CS:[DI],AX
Trace Interrupt
-u 2196:0
2196:0000 B8004C           MOV     AX,4C00h
2196:0003 CD21             INT     21h
2196:0005 B80000           MOV     AX,0000h
2196:0008 90               NOP
2196:0009 90               NOP
2196:000A BF0800           MOV     DI,0008h
2196:000D BE2000           MOV     SI,0020h
2196:0010 2E8B04           MOV     AX,CS:[SI]
2196:0013 2E8905           MOV     CS:[DI],AX
2196:0016 EBF0             JMP     Short 0008

2196:0018 B80000           MOV     AX,0000h
2196:001B CD21             INT     21h
-r
AX=F6EB  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0020  DI=0008
DS=2186  ES=2186  SS=2196  CS=2196  IP=0013  NV UP DI PL NZ NA PO NC
2196:0013 2E8905           MOV     CS:[DI],AX
-t
AX=F6EB  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0020  DI=0008
DS=2186  ES=2186  SS=2196  CS=2196  IP=0016  NV UP DI PL NZ NA PO NC
2196:0016 EBF0             JMP     Short 0008
Trace Interrupt
-u 2196:0
2196:0000 B8004C           MOV     AX,4C00h
2196:0003 CD21             INT     21h
2196:0005 B80000           MOV     AX,0000h
2196:0008 EBF6             JMP     Short 0000

2196:000A BF0800           MOV     DI,0008h
2196:000D BE2000           MOV     SI,0020h
2196:0010 2E8B04           MOV     AX,CS:[SI]
2196:0013 2E8905           MOV     CS:[DI],AX
2196:0016 EBF0             JMP     Short 0008

2196:0018 B80000           MOV     AX,0000h
2196:001B CD21             INT     21h
2196:001D B80000           MOV     AX,0000h
-u
2196:0020 EBF6             JMP     Short 0018

2196:0022 90               NOP
2196:0023 0000             ADD     [BX+SI],AL
2196:0025 0000             ADD     [BX+SI],AL
2196:0027 0000             ADD     [BX+SI],AL
2196:0029 0000             ADD     [BX+SI],AL
2196:002B 0000             ADD     [BX+SI],AL
2196:002D 0000             ADD     [BX+SI],AL
2196:002F 0000             ADD     [BX+SI],AL
2196:0031 0000             ADD     [BX+SI],AL
2196:0033 0000             ADD     [BX+SI],AL
2196:0035 0000             ADD     [BX+SI],AL
感觉最重要的地方是对EBF6的理解,其次是编译的问题,因为程序是要先经过编译再到cpu中运行,cup 并不执行编译的过程,我用的是masm5.0编译器
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved