假设内存10000H中的值为23,10001H中的值为11,10002H中的值为22,10003H的值为11
在debug中执行以下代码
mov ax,1000H
mov ds,ax
mov ax,[0]
mov bx,[2]
mov cx,[1]
add bx,[1]
add cx,[2]
- 分析:8086CPU中由于段地址寄存器,无法直接赋值,因此需要先将值赋给通用寄存器然后再给ds赋值代码如下
mov ax,1000H
mov ds,ax
mov ax,23
mov [0],ax
mov ax,11
mov [1],ax
mov ax,22
mov [2],ax
mov ax,11
mov [3],ax
mov ax,[0]
mov bx,[2]
mov cx,[1]
add bx,[1]
add cx,[2]
第一行回不去了… 代码地址是 0482:0139
-r 查看当前的cs:ip
当前执行的汇编代码是 mov ax,1000
cs = 0482, ip = 0100
我们需要改变ip 来执行上面的代码
-r ip
0139
此时开始执行我们写的代码段
-t 按段执行代码
下面提供正确的解法
- 上面是第一次用写的…
- 下面的是正解 - -
- -d查看内存中的数据
-d 1000:0
可以看到,此时内存1000:0000 到 1000:0003的值都为0
- 下面使用-e 写入数据
-e 1000:0 23 11 22 66
- 再次使用-d查看
-d 1000:0
- 内存中的值已经写入完毕,下面执行汇编代码
- -a是以汇编指令的形式,再内存中写入一段代码
-a
mov ax,1000
mov ds,ax
mov ax,[0]
mov bx,[2]
mov cx,[1]
add bx,[1]
add cx,[2]
- -r查看下一条cpu执行的指令
- -r ip改变指令偏移
-r
-r ip
0100
可以看到,此时cpu正好执行我们的程序段,因此不需要更改cs和ip直接-t 即可执行
- 后面一直-t执行即可