. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验四(3)中应用debug的g命令出现问题  [已解决] 回复[ 3次 ]   点击[ 712次 ]  
492668570
[帖 主]   [ 发表时间:2007-12-12 16:20 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:1
注册日期:2007-12-02 21:14
题目中要求把
mov ax , 4c00h
int 21h 之前的内容复制到0020:0处,我想把整个程序(包含 mov ax,4c00h ;int 21h)也复制过来。

assume cs:code   
code segment   
    mov ax,cs   ;ax,填空   
    mov ds,ax   
    mov ax,0020h   
    mov es,ax   
    mov bx,0   
    mov cx,1ch 
s:      
    mov al,[bx]   
    mov es:[bx],al   
    inc bx   
    loop s                   

    mov ax,4c00h   
    int 21h   
code ends   
end   
用debug跟踪时 用g命令先执行完 mov ax,4c00h之前的内容,接着调用一次t命令,一次p命令,整个程序执行结束。
用 u es:0 察看结果时发现最后一条命令 int 21h 的 复制为 int 3;


但我一直用t命令重新执行一次时发现完全正确;


用 g 命令一下执行到int 21h(包含)在查看也是完全正确。

不知道g命令中到底藏着什么秘密。呵呵,不知我的论述大家能看明白吗?谢谢!
fishboy
[第1楼]   [ 回复时间:2007-12-12 19:32 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
确实是楼主说的那样,除非用T一步步运行或者g运行到int 21h(包含),才能看出复制到了int 21h这条,如果在loop处用到了p命令,或者g命令没执行完所有代码,就会发现loop s后的一条指令是int 3,就连mov ax,4c00这条语句都没有赋值到。
查了一下int3:是设置一个断点,程序执行到这条指令将停止在当前位置。
是不是p命令或者g命令在执行loop的时候,设置了这个断点的呢?!
搞不明白,希望有人能点指点,期待中....
luo_x
[第2楼]   [ 回复时间:2007-12-24 11:23 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:0
注册日期:2007-12-08 20:03
确实,是这样,
   不懂,发现loop s后的一条指令是int 3,就连mov ax,4c00这条语句都没有赋值到。
492668570
[第3楼]   [ 回复时间:2008-03-11 09:13 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:1
注册日期:2007-12-02 21:14
此贴由 贴主 于 [ 2008-03-11 09:13 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(fishboy):2分   2楼(luo_x):1分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved