在debug.exe中学习汇编指令

1、在cmd中敲debug
出现提示符-
输入 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 21h
int 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进入单步跟踪模式。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值