實驗一 用機器指令和匯編指令編程——匯編語言實驗


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM