匯編語言實驗一

發布日期:2019-10-25

本次實驗中需要用到的命令:

- R:查看和修改 CPU 中寄存器的內容- D:查看內存中的內容- E:修改內存中的內容(可以寫入數據或者指令,在內存中,它們實際上沒有區別)- U:將內存單元中的內容翻譯為機器指令和匯編指令- T:執行 CS:IP 指向的內存單元處的指令- A:以匯編指令的形式向內存中寫入指令

?實驗任務:

(一)使用 Debug,將下面的程序段寫入內存,逐條執行,并觀察每條指令執行后 CPU 相關寄存器的內容變化

B8 20 4E? -----------------------? ?mov ax,4E20H05 16 14? ?-----------------------? ?add ax,1416HBB 00 20? -----------------------? ?mov bx,2000H01 D8? ? ? ?-----------------------? ?add ax,bx89 C3? ? ? ?-----------------------? ?mov bx,ax01 D8? ? ? ?-----------------------? ?add ax,bxB8 1A 00? -----------------------? ?mov ax,001AHBB 26 00? -----------------------? ?mov bx,0026H00 D8? ? ? ?-----------------------? ?add al,bl00 DC? ? ? -----------------------? ?add ah,bl00 C7? ? ? -----------------------? ? add bh,alB4 00? ? ? -----------------------? ? mov ah,000 D8? ? ? -----------------------? ? add al,bl04 9C? ? ? -----------------------? ? add al,9CH

可以使用 E 命令或者 A 命令向內存中寫入指令。注意用 T 命令執行的時候, CS:IP 的指向。

其中 E 命令是寫入機器碼,A 命令寫入匯編指令。

上面總共有 14 條指令,其中前 7 條指令我使用 E 命令寫入內存,后 7 條指令使用 A 命令寫入內存。

下面是動圖演示向內存中輸入指令的過程:

可以看到我在使用匯編指令的方式輸入的時候,第一條指令輸入 mov bx,0026H 報錯了,是因為向 8086PC 機內存輸入指令的時候,默認使用的是 16 進制,所以不需要在指令中指明。

下面動圖演示使用 T 命令執行上述寫入的各條指令,注意內存中寄存器的內容變化,特別是 CS 和 IP 的內容是如何變化的。

可是看到為了執行我們輸入內存中的指令,首先我將 CS 的值置為 1000H,然后將 IP 的值置為 0000H,這下 CPU 接下來執行的第一條指令就是從內存單元的 1000:0 開始。

然后我使用了 14 個 T 命令,完成了指令的執行,在執行過程中可以仔細注意各個相關寄存器內容的變化。

(二)將下面 3 條指令寫入從 2000:0 開始的內存單元中,利用這 3 條指令計算 2 的 8 次方

mov ax,1add ax,axjmp 2000:0003

?將指令寫入內存后,執行 T 命令,直到 AX 中的值為 0100H。

動圖演示如下:

首先寫入指令后,照樣是將 CS:IP 的值設置為 2000:0,即第一條需要執行的指令地址。

然后輸入 T 指令執行,這道題使用了 jmp 這條匯編指令,例如 jmp 2000:0003 即是將 CS 中的值置為 2000H ,IP 中的值置為 0003H。

這樣我們在指令執行的過程中沒有去主動的修改過 CS:IP 的值,而是通過內存單元中的一條指令來完成的。

(三)查看內存的內容

PC機主板上的ROM寫有一個生產日期,在內存FFF00H~FFFFFH的某幾個單元中,請找到這個生產日期并試圖改變它。

使用 D 命令去內存中的相關區域查看,動圖演示如下:

首先用 D 命令查看了這段生產日期為 06 / 23 / 99 且內存地址單元為 ffff:5 ~ ffff:c

然后我使用 E 命令向該段內存中寫入 8 個字節,試圖修改這段內存的內容。

點擊確認后再次查看該段內存的內容還是沒變,說明了ROM 中的內容是不可改變的。

下面是 8086PC 機內存地址空間分配情況:

(四)向內存從 B8100H 開始的單元中填寫數據

如:B810:0000 01 01 02 02 03 03 04 04?

請讀者先填寫不同的數據,觀察產生的現象;再改變填寫的地址,觀察產生的現象。

動圖演示如下:

明顯觀察到圖中右上方出現了變化,當輸入不同數據時,出現的圖形和顏色也不同。

這說明了上面那個內存起始地址是處于顯存的范圍,向里面寫入數據其實是在向顯存中寫入數據,顯卡再將顯存中的數據輸出到屏幕上。

(完)

澳洲快乐8数据分析