. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点6.1(1),那里出问题了?  [已解决] 回复[ 3次 ]   点击[ 430次 ]  
sjy9816
[帖 主]   [ 发表时间:2009-07-15 16:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2009-06-21 14:14
程序编写如下:
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
       mov ds,ax
       mov bx,0
       mov cx,8
    s: mov ax,[bx]
       mov cs:[bx],ax
       add bx,2
       loop s
       mov ax,4c00h
       int 21h
codesg ends
end start
********************************************
debug测试如下:
C:\DOCUME~1\ADMINI~1>cd c:\masm
C:\MASM>debug c:\example\jcd6d1.exe
-r
AX=0000  BX=0000  CX=002A  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0C58  ES=0C58  SS=0C68  CS=0C68  IP=0010   NV UP EI PL NZ NA PO NC
0C68:0010 B80000        MOV     AX,0000
-d cs:0 f
0C68:0000  23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09   #.V.............
-d 0:0 f
0000:0000  68 10 A7 00 8B 01 70 00-16 00 A5 03 8B 01 70 00   h.....p.......p.
-u cs:10 29
0C68:0010 B80000        MOV     AX,0000
0C68:0013 8ED8          MOV     DS,AX
0C68:0015 BB0000        MOV     BX,0000
0C68:0018 B90800        MOV     CX,0008
0C68:001B 8B07          MOV     AX,[BX]
0C68:001D 2E            CS:
0C68:001E 8907          MOV     [BX],AX
0C68:0020 83C302        ADD     BX,+02
0C68:0023 E2F6          LOOP    001B
0C68:0025 B8004C        MOV     AX,4C00
0C68:0028 CD21          INT     21
-t

AX=0000  BX=0000  CX=002A  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0C58  ES=0C58  SS=0C68  CS=0C68  IP=0013   NV UP EI PL NZ NA PO NC
0C68:0013 8ED8          MOV     DS,AX
-t

AX=0000  BX=0000  CX=002A  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0000  ES=0C58  SS=0C68  CS=0C68  IP=0015   NV UP EI PL NZ NA PO NC
0C68:0015 BB0000        MOV     BX,0000
-g 0025

AX=0672  BX=0010  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0000  ES=0C58  SS=0C68  CS=0C68  IP=0025   NV UP EI PL NZ AC PO NC
0C68:0025 B8004C        MOV     AX,4C00
-d cs:0 f
0C68:0000  68 10 A7 00 BB 13 72 06-16 00 A5 03 B1 13 72 06   h.....r.......r.
*********************
-d 0:0 f             (复制前面的内容进行对比)
0000:0000  68 10 A7 00 8B 01 70 00-16 00 A5 03 8B 01 70 00   h.....p.......p.
************************************
程序那个地方出错了?为什么程序不能全部用内存0:0~0:15单元的内容改写程序中的数据。
怎么改啊?
crazyman
[第1楼]   [ 回复时间:2009-07-16 10:34 ]   [引用]   [回复]   [ top ] 
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
你的博客里有回复。

你运行完毕对照一下0~15单元的数据和你代码段中的数据,应该是一样的。但是,0~15中的数据却不一定是你开始看到的数据,应该是你在使用debug的时候,有程序使用到了这些内存,修改了这里面的这些数据。因为从0:0开始好像是中断向量表,中断例程的地址将会写入这里。这个前面说的中断使用当前栈空间还不是一回事。
sjy9816
[第2楼]   [ 回复时间:2009-08-06 08:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2009-06-21 14:14
哦,谢谢,就是中断这块听的还是有点迷糊,哈哈!
sjy9816
[第3楼]   [ 回复时间:2009-08-06 08:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2009-06-21 14:14
此贴由 贴主 于 [ 2009-08-06 08:54 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(crazyman):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved