出现提示符-
输入 r //查看寄存器的值
输入 u100 //查看地址100开始的代码
-u100
141E:0100 B80400 MOV AX,0004
141E:0103 CD21 INT 21
2、写代码,先敲a100 定位到地址100 (修改代码也用axxx--16机制地址)
敲入 mov ax,4 //mov指令学习,只是填充ax寄存器,没有实际意义。
int 21 //调用DOS 20号中断,终止程序,将控制权交回给 DEBUG
回车结束输入
输入 p=100 单步从地址100开始运行,后面单步可以直接输入p即可。
输入 g=100 执行所有代码
3、INT 21H 中断指令,需要在ah中填写功能号,
例如 01键盘输入并回显;
-a100
141E:0100 mov ah,1
141E:0102 int 21h
141E:0104 int 20h
141E:0106
-g=100
d //我按下了键盘上的字母d,所以回显了字母d
Program terminated normally
02 显示输出 DL=输出字符
-a100
mov dl,41 //十六进制,字母A的ASCII码
mov ah,02
int 21hint 20h
-g
A //输出字母A
Program terminated normally
例子3、获取当前日期和时间
u=100
141E:0100 B42A MOV AH,2A //2A 获取日期
141E:0102 CD21 INT 21
141E:0104 B42C MOV AH,2C //2C 获取时间
141E:0106 CD21 INT 21
141E:0108 CD20 INT 20
-p //CX=07DF 年份 2015 ; DX=0914 月份+日期 09月20日
AX=2A00 BX=0005 CX=07DF DX=0914 SP=FFEE BP=0000 SI=0000 DI=0000
DS=141E ES=141E SS=141E CS=141E IP=0104 NV UP EI NG NZ NA PE NC
循环的例子
-u100
141E:0100 B241 MOV DL,41 //十六进制,字母A的ASCII码
141E:0102 B402 MOV AH,02 //功能号,输出字符
141E:0104 B90500 MOV CX,0005 //计数器 5
141E:0107 CD21 INT 21
141E:0109 FEC2 INC DL //每次给dl++,从而使得打印内容为ABCDE
141E:010B E2FA LOOP 0107 //goto到地址107,并执行,每执行一遍,cx--,直到cx==0; 其实就是循环5次
141E:010D CD20 INT 20
输出数据区的字符串
-a100
141E:0100 mov dx,109 //字符串的首地址是109
141E:0103 mov ah,9 //功能码 9
141E:0105 int 21 //输出
141E:0107 int 20 //调用DOS 20号中断,终止程序,将控制权交回给 DEBUG
141E:0109 db 'gaofeng$' //数据区定义,字符窜必须用$标识结束。
141E:0111
-g
gaofeng
Program terminated normally
单步跟踪是t,不是p
用了p之后,看不到循环过程,直接把循环执行完了,然后跳到循环的下面一句。
先用p=100进入单步跟踪模式。