[汇编语言]-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

  

原文地址:https://www.cnblogs.com/galoishelley/p/3543984.html