FinalDestiny117 发表于 2019-5-22 02:10:19

在debug中如何使用-d指令查看变量的内容

本帖最后由 FinalDestiny117 于 2019-5-22 02:12 编辑

程序功能为:使用调用子程序的方法,对于给定的数组ARY1和ARY2,对其进行求和并将结果保存到放入存储器中
代码如下:
STACK   SEGMENT   PARA STACK 'STACK'
SPAE    DW   20 DUP(?)
TOP   EQU    LENGTH SPAE   ; 等价于 TOP LABEL WORD; 栈底指针
STACK   ENDS
DATA    SEGMENT
;ARY1    DB   100 DUP(?)    ; 定义数组1
ARY1    DB 75, 10, 217, 157, 87, 37, 92, 45
      DB 130, 4, 83, 213, 156, 5, 56, 63
        DB 217, 62, 232, 78, 104, 28, 118, 14
      DB 237, 217, 210, 227, 168, 9, 153, 243
        DB 19, 114, 145, 106, 152, 237, 152, 26
      DB 241, 235, 240, 142, 240, 40, 205, 201
        DB 102, 181, 23, 206, 209, 142, 220, 190
      DB 103, 174, 162, 15, 183, 59, 3, 203
        DB 173, 148, 53, 69, 129, 205, 96, 114
      DB 184, 80, 0, 168, 120, 205, 113, 222
        DB 130, 137, 172, 83, 23, 136, 18, 126
      DB 55, 180, 141, 238, 239, 144, 185, 156
        DB 36, 239, 226, 165
SIZE1   EQU $-ARY1
SUM1    DW   ?
;ARY2    DB   200 DUP(?)    ; 定义数组2
ARY2    DB 75, 10, 217, 157, 87, 37, 92, 45, 130, 4, 83, 213, 156, 5, 56, 63
             DB 36, 239, 226, 165
SIZE2   EQU $-ARY2
SUM2    DW   ?
DATA    ENDS

MAIN    SEGMENT            ; 主程序段
      ASSUME CS:MAIN, DS:DATA, SS:STACK
STR:    MOV    AX,DATA
      MOV    DS,AX
      MOV    AX, SIZE1          ; SIZE ARY1
      PUSH   AX            ; SUM 过程的入口参数1进栈
      MOV    AX,OFFSET ARY1
      PUSH   AX            ; SUM 过程的入口参数2进栈
      CALL   FAR PTR SUM
      MOV    AX, SIZE2      ;SIZE ARY2
      PUSH   AX
      MOV    AX,OFFSET ARY2
      PUSH   AX
      CALL   FAR PTR SUM
      MOV    AX, 4C00H
      INT    21H
MAIN    ENDS


PROCE   SEGMENT             ; 过程段
      ASSUME   CS:PROCE, DS:DATA,SS:STACK
SUM   PROC   FAR          ; 因为SUM和MAIN在不同的代码段内
      PUSH   AX            ; 保护现场
      PUSH   BX
      PUSH   CX
      PUSH   BP
      MOV    BP,SP         ; 将 BP 设为栈顶
      PUSHF                ; 保存标志
      MOV    CX,    ; CX 设为数组元素个数
      MOV    BX,    ; BX 设为数组首地址(段内偏移地址)
      MOV    AX,0          ; 将 AX 清零
ADN:    ADD    AL,
      INC    BX            ; 将BX指向下一个元素
      ADC    AH,0          ; 将进位加至AH
      LOOP   ADN
      MOV    ,AX       ; 数据之和送到结果区
      POPF               ; 恢复现场
      POP    BP
      POP    CX
      POP    BX
      POP    AX
      RET    4             ; 返回并废除参数 1 和 2 (共4个字节)
SUM   ENDP
PROCE   ENDS
      END STR


在两次从子程序返回后,如何使用-d命令显示并记录 SUM1和SUM2值?

jackz007 发表于 2019-5-22 11:19:09

本帖最后由 jackz007 于 2019-5-22 11:35 编辑

      sum1 紧随 array1 之后,占 2 个字节,sum2 紧随 array2 之后,占 2 个字节。
      所以:
            sum1 地址 = array1 起始地址 + array1 字节长度
            sum2 地址 = array2 起始地址 + array2 字节长度
0775:0000 B86D07      MOV        AX,076D          <--- 注意数据段地址 076D                        
0775:0003 8ED8          MOV        DS,AX                              
0775:0005 B86400      MOV        AX,0064          <--- array1 长度                           
0775:0008 50            PUSH        AX                                 
0775:0009 B80000      MOV        AX,0000          <--- array1 起始地址                        
0775:000C 50            PUSH        AX                                 
0775:000D 9A00007807    CALL        0778:0000       <--- sum                        
                                                    <--- 调用完后,用命令 d 076d:64 l2 可以看到累加结果(64h = 0h + 64h)
0775:0012 B81400      MOV        AX,0014          <--- array2 长度                           
0775:0015 50            PUSH        AX                                 
0775:0016 B86600      MOV        AX,0066          <--- array2 起始地址                           
0775:0019 50            PUSH        AX                                 
0775:001A 9A00007807    CALL        0778:0000       <--- sum
                                                    <--- 调用完后,用命令 d 076d:7a l2 可以看到累加结果(7ah = 66h + 14h)                        
0775:001F B8004C      MOV        AX,4C00                           
0775:0022 CD21          INT        21                                 

FinalDestiny117 发表于 2019-5-23 17:20:02

jackz007 发表于 2019-5-22 11:19
sum1 紧随 array1 之后,占 2 个字节,sum2 紧随 array2 之后,占 2 个字节。
      所以:
   ...

谢谢啦~
页: [1]
查看完整版本: 在debug中如何使用-d指令查看变量的内容