假設內存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執行即可