彙編實驗4 [bx]和loop的使用
阿新 • • 發佈:2018-11-21
實驗內容
1.實驗1
- 原始碼:
1 assume cs:code 2 code segment 3 mov ax,0b800h 4 mov ds,ax 5 mov ax,0403h 6 mov bx,07b8h 7 8 mov cx,10h 9 s: mov [bx],ax 10 inc bx 11 inc bx 12 loop s 13 14 mov ax,4c00h 15 int 21h 16 code ends 17 end
- 按要求將0403H修改為0441H
經彙編連線執行可得:
2.實驗2
原始碼:
1 assume cs:code 2 code segment 3 mov ax,0 4 mov ds,ax 5 mov bx,0200h 6 mov ax,0 7 mov cx,40h 8 s: mov [bx],ax 9 inc ax 10 inc bx 11 loop s 12 mov ax,4c00h 13 int 21h 14 code ends 15 end
- 用debug進行除錯
- 使用d命令檢視是否修改成功
成功!nice!
3.實驗3
補全程式碼,實現將“mov ax,4c00h”前的指令複製到記憶體0:200處。
老實說,剛看到題目的時候還是有點懵的,因為之前都是對資料進行操作,但是怎樣複製指令呢???
於是乎,就隨便填了點內容,想著就先試試看看
1 assume cs:code 2 code segement 3 mov ax,00h 4 mov ds,ax 5 mov ax,0020h 6 mov es,ax 7 mov bx,0 8 mov cx,10h 9 10 s: mov al,[bx] 11 moves:[bx],al 12 inc bx 13 loop s 14 15 mov ax,4c00h 16 int 21h 17 code ends 18 end
剛用u查看了一下命令,就意識到自己的學的是多麼爛,竟然會忘了機器是如何儲存指令的,也忘了指令同時也是資料,只是存放的暫存器不同。
所以,我也馬上就意識到,需要複製的指令不過是放存放在073A:0000到0016中的資料,想到這,自然就簡單了,指令存放在段暫存器cs中
1 assume cs:code 2 code segment 3 mov ax,cs 4 mov ds,ax 5 6 mov ax,0020h 7 mov es,ax 8 9 mov bx,0 10 mov cx,17h 11 12 s: mov al,[bx] 13 mov es:[bx],al 14 inc bx 15 loop s 16 17 mov ax,4c00h 18 int 21h 19 code ends 20 end
先用u命令檢視指令:
在用g命令執行:
執行完畢檢視0:200後的記憶體單元:
emmm......
這樣雖然看的出,但看著很不舒服,不過,我突然想到,既然是指令,何不用u命令檢視看呢
完成。
- 複製的是存放在cs:ip中的“資料”,即指令,從076A:0000到076A:0016
- 有17H個位元組,值得一提的是,我並不是直接輸入17H的,而是之前嘗試了其他的值,然後用u命令檢視的出的(本覺得那一部分沒必要寫,沒想到還問了。。。。)
結論與體會
實驗2中用棧來實現那一部分我並未完成,並不是我學習彙編的熱情沒了,而是我確實沒想出來,雖然我也可以偷偷借鑑一下別人的部落格來補全,但總感覺那沒啥意思。就想著先把基礎的,我能夠理解的部分弄熟一點,再進階吧,雖然已經是第十二週了。。。看來課後得多花點時間了