. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  当debug 已经加载了exe程序时,如何修改cs:ip的值且保证程序可继续执行?  [待解决] 回复[ 5次 ]   点击[ 442次 ]  
kgate
[帖 主]   [ 发表时间:2011-04-04 18:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-04 12:01
今天再测试如下程序时出现书上p118页的那种”无效指令的指令选择关闭窗口“的情况,后来又试了一次,但dos自动推出debug,不知什么原因,望高手解惑。

程序如下(是例题应该没问题,除非我打错了):
assume cs:codesg,ds:datasg
datasg segment
        db 'BaSiC'
        db 'iNfOrMaTiOn'
datasg ends
codesg segment
start:         mov ax,datasg
        mov dx,ax
        mov bx,0
        mov cx,5
s:        mov al,[bx]
        and al,0efh
        mov [bx],al
        inc bx
        loop s
        mov cx,11
s0:        mov al,[bx]
        or al,20h
        mov [bx],al
        inc bx
        loop s0
        mov ax,4c00h
        int 21h
codesg ends
end start
kgate
[第1楼]   [ 回复时间:2011-04-05 09:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-04 12:01
前辈出现吧,指点一下小弟吧,今儿debug又出现个问题了如下:


为什么源代码 为int 21h执行时就变成了int 01,而且也停不下来,望解惑。
u
0B89:0000 B8850B        MOV     AX,0B85
0B89:0003 8ED8          MOV     DS,AX
0B89:0005 BB0000        MOV     BX,0000
0B89:0008 BE0000        MOV     SI,0000
0B89:000B 8A4702        MOV     AL,[BX+02]
0B89:000E 24DF          AND     AL,DF
0B89:0010 884702        MOV     [BX+02],AL
0B89:0013 83C30A        ADD     BX,+0A
0B89:0016 E2F3          LOOP    000B
0B89:0018 B8004C        MOV     AX,4C00
0B89:001B CD21          INT     21
0B89:001D 740F          JZ      002E
0B89:001F 43            INC     BX
-g 0018

AX=0B8B  BX=03A2  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B85  ES=0B75  SS=0B85  CS=0B89  IP=0018   NV UP EI PL NZ AC PO NC
0B89:0018 B8004C        MOV     AX,4C00
-t

AX=4C00  BX=03A2  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B85  ES=0B75  SS=0B85  CS=0B89  IP=001B   NV UP EI PL NZ AC PO NC
0B89:001B CD01          INT     01
kgate
[第2楼]   [ 回复时间:2011-04-05 09:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-04 12:01
要是问题描述不清楚,请各位亲亲&观客说一声。偶有耐心等到侠客的出现……
zaixuexi
[第3楼]   [ 回复时间:2011-04-06 18:13 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
assume cs:codesg,ds:datasg 
datasg segment 
        db 'BaSiC' 
        db 'iNfOrMaTiOn' 
datasg ends 
codesg segment 
start:  
        mov ax,datasg 
        mov ds,ax 
        mov bx,0 
        mov cx,5 
s:     
        mov al,[bx] 
        and al,0dfh 
        mov [bx],al 
        inc bx 
        loop s 
        mov cx,11 
s0:     
        mov al,[bx] 
        or al,20h 
        mov [bx],al 
        inc bx 
        loop s0 
        mov ax,4c00h 
        int 21h 
codesg ends 
end start

自己比对了
cdylss
[第4楼]   [ 回复时间:2018-10-19 12:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2018-10-19 10:17
貌似  mov ds, ax 被打成 mov dx, ax了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved