在debug后必须接程序的完整名称 比如pro1.exe
然后 输入r 就可以查看当前 寄存器的情况,输入t就单步执行,需要注意的是 源码必须要有start标记 否则 t执行也不会 正确。
输入 d DS地址:偏移地址 就可以内存的数据了,需要注意的是 dw定义的是字型数据,一个字型数据占两个字节,分高位和低位 比如 ,0123H,就分01 高位,和 23低位。
在 -d命令 查询到的 数据就是 23 01 这样子的 。
附上上一篇文章的源码:(以及注释)
64.asm
assume cs:code,ds:data,ss:stack
;数据段
data segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends
;栈段
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
;代码段开始
;stack会被编译器编译成 栈段地址 需要把它负值到ss 还需要设置 sp偏移地址
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
;同理 设置data 与ds
mov ax,data
mov ds,ax
;循环入栈
mov bx,0
mov cx,8
s:push [bx]
add bx,2
loop s
;循环出栈 把ds逆序
mov bx,0
mov cx,8
s0:pop [bx] ;栈顶弹出 到 ds:[bx]里面
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
附上几个图片
t 单步执行继续调试,当出现,INT 21的时候 就执行完了,此时再去看 -d 就发现 数据段的 数据 通过 栈段 全部倒序了。