1.教材實驗一結論
(1)將下面的程序段分別用e命令和a命令兩種方式寫入內存
b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax 01 d8 add ax,bx b8 1a 00 mov ax,001AH bb 26 00 mov bx,0026H 00 d8 add al,bl 00 dc add ah,bl 00 c7 add bh,al b4 00 mov ah,0 00 d8 ad al,bl 04 9c add al,9CH
e命令寫入0100:0開始的內存單元,並用u命令查看
或者使用a命令寫入0100:0開始的內存單元
修改CS寄存器中的內容為0100,IP寄存器中的內容為0000后,使用t命令,逐條執行這個程序段
可以發現AX,BX中的內容隨着指令中的執行而改變,IP寄存器中的內容在執行完一個指令后,會自動指向下一條指令的地址
(2)將下面3條指令寫入從2000:0開始的內存單元中,利用這3條指令計算2的8次方
mov ax,1 add ax,ax jmp 2000:0003
接下來用t命令執行這個程序段
調試開始(ax起初是0):
調試結束(ax最后為8):
(3)查看內存中的內容
從FFF00H~FFFFFH中找到生產日期,並試圖改變它
找到類似生產日期的位置在FFF0:00F5至FFF0:00FC內存單元中
試將其值修改為09/10/20
可見修改值的操作無效,因為向地址C0000~FFFFF的內存單元中寫入數據是無效的,因為它是一個只讀存儲器ROM
(4)向內存從B8100H開始的單元中填寫數據
可以看到向B8100開始的內存單元中修改數據,會顯示出一些彩色的圖標,這是因為A0000~BFFFF在8086PC機內是顯存地址空間
2.教材實驗二結論
(1)使用debug將下面的程序段寫入內存,逐條執行
mov ax,0022 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ax= 5150 add ax,[2] ax = A4A2 mov bx,[4] bx= 5554 add bx,[8] bx = ACAA push ax sp = 00FE 修改的內存單元的地址是: 2200:00FE 內容為:A4A2 push bx sp = 00FC 修改的內存單元的地址是: 2200:00FC 內容為:ACAA
pop ax sp = 00FE AX=ACAA
pop bx sp = 00FC BX = A4A2
push [4] sp = 00FE 修改的內存單元的地址是:2200:00FE 內容為:5554
push [6] sp = 00FC 修改的內存單元的地址是: 2200:00FC 內容為:5756
a指令書寫程序:
內存單元改寫:
調試開始:
調試過程:
調試結束:
(2)運行以下程序,並分析為什么2000:0~2000:f中的內容會發生改變
修改2000中的內容
mov ax,2000:將2000送入寄存器ax中
mov ss,ax mov sp,10:將ax中的值作為棧的段地址,並將sp中的值設置為10,內存單元中值的變化可能是為了標識這個空間是一個棧
mov ax,3123:將3123送入寄存器中
push ax:將ax中的內容壓入棧
mov ax,3366:將3366送入ax中
push ax:將ax中的值壓入棧
前三行匯編語言指令的意思是:設置棧的起始地址為2200:0,並設置棧的大小為10
五、實驗總結
學會了dosbox中的debug工具的幾個常用指令
實踐的知識:8086機的內存空間的划分,內存單元地址的編寫,棧的使用
仍未解決的知識:申明棧空間時的存儲空間中的一串亂碼究竟是何含義?為什么執行mov ss,ax操作時,順便執行了mov sp,10