定址方式與基本指令實驗

2023-01-30 07:27:05 字數 4112 閱讀 5310

微機原理實驗

2.1.1 實驗目的

1、熟悉80x86定址方式及基本指令的功能,進一步理解和鞏固課堂學習內容。

2、掌握組合語言程式設計上機過程, 掌握組合語言源程式結構,為後續組合語言程式設計打好基礎。

3、熟悉microsoft的debug或borland的turbo debug除錯工具的使用方法

2.1.2 實驗預習要求

1、認真閱讀本書第一部分第1章,熟悉組合語言程式設計上機步驟。

2、認真閱讀本書第三部分,熟悉debug除錯工具的使用方法。

3、複習80x86運算元定址方式及基本指令(資料傳送、算術運算和邏輯運算等)。

4、了解實驗內容,並在實驗前根據課堂所學知識回答有關問題(個別取決於程式實際執行環境的問題除外),以便在實驗時進行驗證。

2.1.3 實驗內容

1、 讀懂下列源程式,使用edit生成名為的源程式,彙編生成檔案和檔案,連線生成檔案;用edit開啟檔案,了解.lst檔案包含的資訊;使用debug除錯工具單步執行程式,注意觀察ip值的變化,並回答下列問題。

(1) 程式裝入後,**段暫存器cs的內容為____1112__h,**段第一條可執行指令mov ax, data對應的機器**為______b81111____h,它是乙個____3____位元組指令,注意觀察執行該指令時ip值的變化情況,該指令源運算元data的定址方式是____立即數定址______,其值為_____0003h____。

(2) 執行完mov ds, data指令後,資料段暫存器ds的內容為___1111_____h,源程式在資料段中定義的資料82h、68h和88h被裝入的儲存單元的實體地址分別為___1110_____h、___1111_____h和____1112____h。

(3) 程式中第一條add al, [bx] 指令對應的機器**為____0207______h,它是乙個___2_____位元組指令,注意觀察執行該指令時ip值的變化情況;該指令中源運算元的定址方式為_____暫存器間接定址_____,該運算元所在儲存單元的邏輯位址(ds): (bx)為_ 1111:0001___,其實體地址為____11111______h;執行完該指令後(al)=___ea___h,cf=___nc__,of_=__nv_,zf=__nz__,sf=pl,af=na,pf=po;若兩運算元為無符號數,計算結果是否正確__是____?

若兩運算元為帶符號數,計算結果是否正確__是____?若計算結果正確,結果是正數還是負數___負___?

(4) 執行完第二條add al, [bx] 指令後(al)=___72___h,cf=__cy____,of=____ov_,zf__=_nz___,sf___=_pl__,af=_ac____,pf=__pe__;若兩運算元為無符號數,計算結果是否正確__否___?若兩運算元為帶符號數,計算結果是否正確___否_____?

(5) 指令mov sum, al中目的運算元的定址方式為___暫存器定址_______。該指令執行完後,注意觀察(ds):0003h單元中值的變化,該單元的值變為_72h__h。

data segment

num db 82h, 68h, 88h

sum db ?

data ends

code segment

assume cs:code, ds:data

start: mov ax, data

mov ds, ax

mov bx, offset num

mov al, [bx]

inc bx

add al, [bx]

inc bx

add al, [bx]

mov sum, al

mov ah, 4ch

int 21h

code ends

end start

2、 讀懂下列源程式;編輯、彙編、連線生成檔案;使用debug單步執行檔案,並回答以下問題。

(1) **段的前三條指令mov ax, stack、mov ss, ax和mov sp, length stl的功能為堆疊初始化,試問執行完這三條指令後,堆疊棧底所在單元的邏輯位址(ss): (sp)為__05ef:1000______;執行push ax指令後堆疊指標暫存器(sp)=___fe___h,此時,(ss):

(sp+1)和(ss): (sp)單元的值為____(05ef:fe+1)(05ef:

fe)___h;執行完push bx後(sp)=___fc___h,此時,(ss): (sp+1)和(ss): (sp)單元的值為____5fed,5fec___h;執行完pop ax後(sp)=___fe___h;執行完pop bx後(sp)=__100____h;此時(ax)=__4ca3____h,(bx)=____5b0a__h。

請讀者通過對堆疊操作指令執**況的觀察,進一步掌握進、出棧操作過程。

(2) 執行add ax, bx指令後(ax)=___a7ad____h,cf=__0____,of=___0___,zf=0_,sf=___0__,af=_0____,pf=_1_____(注意考慮pf值與計算結果高8位有無關係);若兩運算元為無符號數,計算結果是否正確__是____?若兩運算元為帶符號數,計算結果是否正確__ 是_____?

(3) 執行and ax, bx指令後(ax)=____4802___h,cf=__0____,of=___0___,zf=____0__,sf_=__0___,af__=__0__,pf=_1_____。

stack segment stack

stl dw 100h dup(?)

stack ends

code segment

assume cs:code,ss:stack

start: mov ax, stack

mov ss, ax

mov sp, length stl

;表示式「length stl」的功能為計算stl中定義的變數的個數,

;彙編後其值為100h ,詳見教材5.2.2

mov ax, 0101101100001010b

mov bx, 0100110010100011b

push ax

push bx

add ax, bx

pop ax

pop bx

and ax, bx

mov ah,4ch

int 21h

code ends

end start

3、 指出下列指令的錯誤原因,上機執行,觀察匯程式設計序(給出的出錯資訊,改正後再上機驗證。

(1) mov bp, bl (格式不匹配2) mov [bx],[bp](格式不正確)

(3) mov [bx],20h 錯誤 (4) incsi](錯誤)

(5) add ax,[si+di6) shl ax,3(錯誤)

(7) push 2000h (錯誤8) pop al(錯誤)格式不正確

(9) mov cs,ax 正確 (10) mov ds,1000h(錯誤)不可以給資料段直接賦值

有關常見彙編錯誤的詳細內容見本書第三部分第3章「組合語言程式常見彙編錯誤分析」。

2.1.4 實驗報告要求

1、 簡要說明組合語言程式設計的步驟,每一步使用什麼工具軟體,生成什麼型別的檔案。

(1) 首先用記事本把正確**寫好,並將源程式儲存成.asm格式,生成源程式;

(2) 用匯程式設計序masm將asm檔案匯編成目標程式檔案(obj檔案);

(3) 用連線程式link生成可執行程式檔案(exe檔案);

(4) 用除錯程式debug進行除錯;

2、 實驗小結

通過本次實驗,我掌握了組合語言程式設計的上機步驟,了解了編譯連線的過程,以及除錯工具的各種命令。實驗中遇到了一些問題,例如:輸入源**時,一定要按照語句格式與語法來寫,並且少了空格會導致編譯錯誤;源程式中不能出現空行等。

實驗1定址方式練習

實驗一虛擬機器關於資料的定址方式練習 一 實驗目的 1.熟練掌握虛擬機器的各種定址方式及應用。2.掌握模型機虛擬編譯除錯系統 中一些常用命令的使用方法,為以後的實驗打下基礎。二 實驗儀器 微機 1臺 三 實驗內容 模型機提供了多種方式實現運算元定址,大體可分為7種 除隱含定址外 1 立即定址 2 暫...

計組實驗 CPU組成與機器指令執行

對機器指令系統組成的簡單程式進行解碼 接線本實驗接線比較多,需仔細 接線表只要把上表同列的訊號用線連線即可,一共接線33條.接好線後,將程式設計開關撥到 正常位置 合上電源,按clr 按鈕,使tec 5實驗系統處於初始狀態.3 存程式 設定通用暫存器r0,r1,r2,r3的第一組值及儲存器相關單元的...

有機實驗基本知識與基本技能問答

1.如何保持實驗室整潔?答 暫時不用的器材,不要放在桌面上。汙水 汙物 殘渣 火柴梗 廢紙 塞芯和玻璃 碎片等應分別放在指定的地點,不得亂丟,更不得丟入水槽 廢酸和廢鹼應分別倒入指定的容器中 廢溶液要倒入指定的密封容器中統一處理。2.實驗室安全守則的主要內容是什麼?答 a 實驗開始前檢查儀器 裝置,...