鱼C论坛

 找回密码
 立即注册
查看: 4001|回复: 2

[已解决]在debug中如何使用-d指令查看变量的内容

[复制链接]
发表于 2019-5-22 02:10:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

程序功能为:使用调用子程序的方法,对于给定的数组ARY1和ARY2,对其进行求和并将结果保存到放入存储器[BX]中
代码如下:
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,[BP+14]    ; CX 设为数组元素个数
        MOV    BX,[BP+12]    ; BX 设为数组首地址(段内偏移地址)
        MOV    AX,0          ; 将 AX 清零
ADN:    ADD    AL,[BX]
        INC    BX            ; 将BX指向下一个元素
        ADC    AH,0          ; 将进位加至AH
        LOOP   ADN
        MOV    [BX],AX       ; 数据之和送到结果区
        POPF                 ; 恢复现场
        POP    BP
        POP    CX
        POP    BX
        POP    AX
        RET    4             ; 返回并废除参数 1 和 2 (共4个字节)
SUM     ENDP
PROCE   ENDS
        END STR

在两次从子程序返回后,如何使用-d命令显示并记录 SUM1和SUM2值?
最佳答案
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                                 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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                                 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-23 17:20:02 | 显示全部楼层
jackz007 发表于 2019-5-22 11:19
sum1 紧随 array1 之后,占 2 个字节,sum2 紧随 array2 之后,占 2 个字节。
        所以:
   ...

谢谢啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-5 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表