在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: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 jackz007 发表于 2019-5-22 11:19
sum1 紧随 array1 之后,占 2 个字节,sum2 紧随 array2 之后,占 2 个字节。
所以:
...
谢谢啦~
页:
[1]