汇编网首页登录博客注册
asm_sande的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  笨鸟学飞,勤习方飞.
  • 『姓名』:石冬                
  • 『性别』:保密  『发送消息
  • 个人说明:笨不是问题,笨不求知才是问题.
  • 详细信息『加为好友』
学习动态
最新留言

[2008-07-09 16:25] 实验三


assume cs:code_sg
code_sg segment
        mov ax,2000h
        mov ss,ax
        mov sp,0h
        add sp,10h 

;上句原值为4H,调试中出错。

;///////////////////////////////////////////////////
;//  command prompt_debug 4_1.exe
;//  NTVDM CPU 遇到无效的指令
;//  CS:0000 IP:0077 OP:F0 37 05 0E 02 终止应和程序
;///////////////////////////////////////////////////

;  本机在WIN XP模拟DOS环境下的DEBUG,运行此处出错。初步分析是栈顶越界时win模拟DOS保护问题。偿试增加SP值至10H,通过。~0~

        pop ax
        pop bx

        push ax
        push bx

        pop ax
        pop bx

        mov ax,4c00h
        int 21h
code_sg ends
end
//************************

D:\asmlx>masm 4_1;
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987.  All rights reserved.


  50850 + 415630 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors

D:\asmlx>link 4_1;

Microsoft (R) Overlay Linker  Version 3.60
Copyright (C) Microsoft Corp 1983-1987.  All rights reserved.

LINK : warning L4021: no stack segment

D:\asmlx>


D:\asmlx>debug 4_1.exe
-r
AX=0000  BX=0000  CX=0016  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=13C8  ES=13C8  SS=13D8  CS=13D8  IP=0000   NV UP EI PL NZ NA PO NC
13D8:0000 B80020        MOV     AX,2000
-u
13D8:0000 B80020        MOV     AX,2000H ;ax=2000H,ds=13c8H,ss=cs=13d8H,sp=0000H
13D8:0003 8ED0          MOV     SS,AX   ;SS=2000H,SP=0000H
13D8:0005 BC0000        MOV     SP,0000H ;(与上一句同时进行)
13D8:0008 83C410        ADD     SP,+10H  ;SP=0010H
13D8:000B 58            POP     AX      ;AX=743EH SP=0012H
13D8:000C 5B            POP     BX      ;BX=0016H SP=0014H
13D8:000D 50            PUSH    AX      ;SP=0012H
13D8:000E 53            PUSH    BX      ;SP=0010H
13D8:000F 58            POP     AX      ;AX=0016H SP=0012H
13D8:0010 5B            POP     BX      ;BX=743EH SP=0014H
13D8:0011 B8004C        MOV     AX,4C00H ;AX=4C00H
13D8:0014 CD21          INT     21      ;CS=00A7H IP=107CH

-U 00A7:107C
00A7:107C 90            NOP
00A7:107D 90            NOP
00A7:107E E8E000        CALL    1161
程序在执行到INT 21时并未结束,而是转到 CS:IP=00A7:107C的空NOP指令处。出现这种情况,初步判断是DEBUG为调试方便而设置的原因,



-D DS:0 F
13C8:0000  CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 DD 0D 8A 03   . ........O.....

POP 前二字节为CD 20
多次调用,并偿试改变代码增加汇编指令其值仍未变化。说明PSP是特定的。
评论次数(3)  |  浏览次数(479)  |  类型(实验报告) |  收藏此文  | 

[  游客   发表于  2008-07-09 20:53  ]

在debug下遇到INT 21时,用-p命令可以执行int 21 并返回Dos界面。

[  游客   发表于  2008-07-09 20:55  ]

POP 前二字节为CD 20 
多次调用,并偿试改变代码增加汇编指令其值仍未变化。说明PSP是特定的。
--------------
因为还不是很清楚这两个字节代表的什么意思,不一定是自己想想的那样的。
可惜这本书上没有讲。不过,好像这些头信息暂时不会影响到学习的。有时间偶去查查资料先。呵呵

本机在WIN XP模拟DOS环境下的DEBUG,运行此处出错。初步分析是栈顶越界时win模拟DOS保护问题。偿试增加SP值至10H,通过。~0~ 
---------------
这个理解比较有道理。支持!以后学习中断后就明白了。加油!

[  asm_sande   发表于  2008-07-09 21:44  ]

十分感谢热心批复。
我对INT 21H 中断确实不了解。同时对DEBUG的命令集也了解不全,没有用P命令,呵呵。因此出现这种理解偏差。
我几次改变源程序,编译后调试,发现PSP不止CD 20的值未变,其连续的16字节内容都未变。对CD 20,我有点模糊认识,因为INT 21代码是CD 21,因PSP是EXE程序头部文件,我估计如果这是程序代码的话,这代表着INT 20中断的意思,具体如何,待后续学习中弄清了呵。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码