. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  16.1例子的跟踪调试时有大大的问题,a[si]所取得的值根本就不对!敬请各位高手帮看看  [已解决] 回复[ 2次 ]   点击[ 541次 ]  
njutyangxiao
[帖 主]   [ 发表时间:2009-09-15 11:29 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-16 13:20
我在用单步调试下面代码时,所遇到的问题:
源代码:
assume cs:codesg
codesg segment
    a: db 1,2,3,4,5,6,7,8
    b: dd 0

    start:

    mov si,0 
    mov cx,8

    s:
    mov ax,a[si]   
    add b,ax
    adc b,0
    add si,2
    loop s

    mov ax,4c00h
    int 21h



codesg ends
end start
调试的过程如下:
-r

AX=0000  BX=0000  CX=0022  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=000A   NV UP EI PL NZ NA PO NC 
0B85:000A BE0000        MOV        SI,0000                            
-u

0B85:000A BE0000        MOV        SI,0000                            
0B85:000D B90800        MOV        CX,0008                            
0B85:0010 8A840000      MOV        AL,[SI+0000]                       
0B85:0014 B400          MOV        AH,00                              
0B85:0016 01060800      ADD        [0008],AX                          
0B85:001A 46            INC        SI                                 
0B85:001B E2F3          LOOP        0010                               
0B85:001D B8004C        MOV        AX,4C00                            
0B85:0020 CD21          INT        21                                 
0B85:0022 21BC0072      AND        [SI+7200],DI                       
0B85:0026 16            PUSH        SS                                 
0B85:0027 03D3          ADD        DX,BX                              
0B85:0029 13C8          ADC        CX,AX                              
-t


AX=0000  BX=0000  CX=0022  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=000D   NV UP EI PL NZ NA PO NC 
0B85:000D B90800        MOV        CX,0008                            
-t


AX=0000  BX=0000  CX=0008  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0010   NV UP EI PL NZ NA PO NC 
0B85:0010 8A840000      MOV        AL,[SI+0000]                       DS:0000=CD
-t


AX=00CD  BX=0000  CX=0008  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0014   NV UP EI PL NZ NA PO NC 
0B85:0014 B400          MOV        AH,00 
-t


AX=00CD  BX=0000  CX=0008  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0016   NV UP EI PL NZ NA PO NC 
0B85:0016 01060800      ADD        [0008],AX                          DS:0008=F01D
-t


AX=00CD  BX=0000  CX=0008  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=001A   NV UP EI NG NZ AC PO NC 
0B85:001A 46            INC        SI                                 
-t


AX=00CD  BX=0000  CX=0008  DX=0000  SP=0000  BP=0000  SI=0001  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=001B   NV UP EI PL NZ NA PO NC 
0B85:001B E2F3          LOOP        0010                               
-t


AX=00CD  BX=0000  CX=0007  DX=0000  SP=0000  BP=0000  SI=0001  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0010   NV UP EI PL NZ NA PO NC 
0B85:0010 8A840000      MOV        AL,[SI+0000]                       DS:0001=20
-t


AX=0020  BX=0000  CX=0007  DX=0000  SP=0000  BP=0000  SI=0001  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0014   NV UP EI PL NZ NA PO NC 
0B85:0014 B400          MOV        AH,00                              
-t


AX=0020  BX=0000  CX=0007  DX=0000  SP=0000  BP=0000  SI=0001  DI=0000  
DS=0B75  ES=0B75  SS=0B85  CS=0B85  IP=0016   NV UP EI PL NZ NA PO NC 
0B85:0016 01060800      ADD        [0008],AX                          DS:0008=F0EA
-t
很明显的是这里面a[si]所取得的值根本就不对,a[si]取得的是ds:a[si]中的值,究竟是为什么?按照书上说来应该是取的cs:a[si]中的值啊。敬请各位高手解 答!!
njutyangxiao
[第1楼]   [ 回复时间:2009-09-15 13:43 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-16 13:20
我查出错误在哪里了,原来在定义a、b时,其后面并无冒号。这一点很关键,我就是没有注意到这一点,导致调试程序的时候,a[si]取得的值并不正确,本来应该是在地址cs:a[si]取得的,但是如果有冒号的话,它则是从地址ds:a[si]取得。所以看书还是要小心仔细啊
njutyangxiao
[第2楼]   [ 回复时间:2009-09-15 13:44 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:2
注册日期:2009-08-16 13:20
此贴由 贴主 于 [ 2009-09-15 13:44 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved