zoukankan      html  css  js  c++  java
  • [汇编语言]-debug跟踪执行

    ffff:0-ffff:d内存中数值求和放入dx寄存器中

    代码:

    add.asm

     1 assume cs:code
     2 code segment
     3     mov ax,0ffffH
     4     mov ds,ax
     5     
     6     mov dx,0
     7     
     8     mov al,ds:[0]
     9     mov ah,0
    10     add dx,ax
    11     
    12     mov al,ds:[1]
    13     mov ah,0
    14     add dx,ax
    15     
    16     mov al,ds:[2]
    17     mov ah,0
    18     add dx,ax
    19 
    20     mov al,ds:[3]
    21     mov ah,0
    22     add dx,ax
    23     
    24     mov al,ds:[4]
    25     mov ah,0
    26     add dx,ax
    27 
    28     mov al,ds:[5]
    29     mov ah,0
    30     add dx,ax
    31 
    32     mov al,ds:[6]
    33     mov ah,0
    34     add dx,ax
    35     
    36     mov al,ds:[7]
    37     mov ah,0
    38     add dx,ax
    39 
    40     mov al,ds:[8]
    41     mov ah,0
    42     add dx,ax
    43 
    44     mov al,ds:[9]
    45     mov ah,0
    46     add dx,ax
    47     
    48     mov al,ds:[0ah]
    49     mov ah,0
    50     add dx,ax
    51     
    52     mov al,ds:[0bh]
    53     mov ah,0
    54     add dx,ax
    55     
    56     mov ax,4c00H
    57     int 21h
    58 code ends
    59 end

    编译,链接add.adm

    masm add;

    link add;

    执行add.exe

    如上图

    -r 将显示寄存器值. cs:ip 为 0B60:0000为程序起始地址

    -t 则执行程序 显示为上一次执行后的寄存器内容,最后一行为 将要执行的指令,

    -u 显示汇编代码,及内存中得位置.如现在程序开始地址为  0B60:0003 MOV DS,AX 默认从cs:ip指向的地址显示代码

    接上图

    -g 偏移地址, 表示执行到001D为止, 001D处的代码还未执行.类似断点跟踪

    -p int 21h要用p命令执行

    以上程序可用loop优化,优化后为:

    连续内存可以使用[bx]方法

     1 assume cs:code
     2 code segment
     3     mov ax,0ffffH
     4     mov ds,ax
     5     mov bx,0
     6     
     7     mov dx,0
     8     
     9     mov cx,12
    10   s:mov al,[bx]
    11     mov ah,0
    12     add dx,ax
    13     inc bx
    14     loop s
    15     
    16     mov ax,4c00H
    17     int 21h
    18     
    19 code ends
    20 end

    执行LOOP循环:

    (1)  用-g直接指定到 0015 loop代码段,使用-p

      -p 在遇到LOOP 000E时,用-p命令执行,Debug自动重复执行loop中内存,直到(cx) = 0 

      最后一次执行loop 000E后, (cx) = 0 (IP) = 0017H,当前CS:0017处的mov ax,4c00H.

          

    (2)  用 -g 直接执行到 cs:0017

       -g 0017

      

  • 相关阅读:
    is 和 == 的区别,utf和gbk的转换,join用法
    python字典的整理信息
    poj分类
    cloud computing
    POJ1007 关于STL排序方法 动态数组的创建 和向量的使用
    math类
    研究生考试感想
    4.11
    重看设计模式 观察者模式
    子串计算 2010北京大学复试机试题
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3543984.html
Copyright © 2011-2022 走看看