組合語言 實驗一

2021-09-25 20:23:18 字數 2217 閱讀 7723

一、實驗目的

掌握彙編程式設計規範,熟悉程式設計環境。

二、實驗內容

1. 程式設計:向記憶體0:200-0:23f依次傳送資料0-63(3fh)。

2. 程式設計:編寫code段**,用push指令將a段中的word資料逆序儲存到b段中。

三、實驗步驟演算法及關鍵**

1. 程式設計:向記憶體0:200-0:23f依次傳送資料0-63(3fh)。

1.2 關鍵**

assume cs:code

code segment

mov ax,0

mov ds,ax

mov bx,0200h ;以上,設定ds:bx=0:200

mov cx,64

s: mov ds:[bx],ax

inc bx

inc ax

loop s

mov ax,4c00h

int 21h

code ends

end

1.3 實驗結果截圖

2. 程式設計:編寫code段**,用push指令將a段中的word資料逆序儲存到b段中。

2.1 演算法步驟

① 將a段設定為資料段,b段設定為棧段,設定sp為棧底+1;

② 由暫存器ax通過ds獲取a段的段位址,bx控制偏移位址,讀取a段中資料;

③ 由暫存器ax通過ss獲取b段的段位址,sp控制偏移位址,向b段中push資料ax;

④ 設定bx+2,然後暫存器ax可以讀取a段中的下乙個資料,sp會自動減2,然後暫存器可以向上儲存暫存器ax中的資料,再重複②③④操作7次;

⑤ 完成將a段中資料逆序儲存在b段中。

2.2 關鍵**

assume cs:code

a segment

dw 1,2,3,4,5,6,7,8

a ends

b segment

dw 0,0,0,0,0,0,0,0

b ends

code segment

start:

mov ax,b ;將b段設定為棧

mov ss,ax ;設定ss為b的段位址

mov sp,16 ;設定sp為棧底+1

mov ax,a ;將a段設定為資料段

mov ds,ax ;設定ds為a的段位址

mov bx,0

mov cx,8

s: mov ax,ds:[bx]

;暫存器ax不斷從a段向後獲取資料

push ax ;將從ax中獲得的資料不斷壓入棧b中,越早壓入的資料在越下面

add bx,2 ;bx加2,控制從a中讀取下乙個資料

loop s

mov ax,4c00h

int 21h

code ends

end start

2.3 實驗截圖

注:**段第一**是mov ax,b即獲取b段的段位址,在debug中直接是顯示

mov ax,0771即b段的段位址為0771,所以直接用-d 0771:0可檢視b執行後b段的資料。

四、實驗小結(簡單說明實驗過程**現的問題和解決方法)

4.1 第一小題中由於對debug操作指令不熟悉,導致一直沒有結果,最終仔細翻看書本實驗一關於debug的相關命令得知程式在除錯中一直沒有編譯執行,所以是沒有結果的。題目本身學習書本知識之後並無困難之處。需要注意的是程式**格式問題,剛開始學習彙編,對**編寫格式不熟悉,需多練習。

4.2 第二小題主要在於實驗思路的設計,對push操作要熟悉原理。實驗在檢驗結果時先是一步一步執行可以得到正確結果,但是通過g指令直接執行後,找不到b段資料在**。後來通過閱讀書本第3章和第6章前言,得知b段的段位址直接在debug中的編碼中有顯示,問題得以解決。

組合語言實驗一

datas segment 此處輸入資料段 datas ends stacks segment 此處輸入堆疊段 stacks ends codes segment assume cs codes,ds datas,ss stacks start mov ax,datas mov ds,ax 實驗一 ...

組合語言 實驗一

1 將下面3條指令寫入從2000 0開始的記憶體單元中,利用這3條指令計算2的8次方。記得把當前cs ip修改成2000 0000,這樣才可以用 t執行我們的彙編指令 2的8次方 256,轉換為十六進製制為0100h 由此圖我們可以得知,jmp是乙個可以立即跳到指定的ip位址,其次可以迴圈mov a...

組合語言 實驗一

一。掌握使用 debug 工具編寫和除錯彙編命令的方法 1.進入debug 2.常用debug功能 1.用r命令檢視 改變cpu暫存器內容 2.改變暫存器的值 3.用d命令檢視記憶體中的內容 4.使用d 1000 9檢視1000 9處的內容 5.檢視1000 0 1000 9 6.使用e命令改寫內容...