組合語言程式設計實驗一

2022-05-10 06:42:10 字數 1565 閱讀 4568

經過過去的五周的組合語言的學習,現在對intel 80x86的基本指令已經了解得差不多了。對組合語言的指令的學習,相當於對c++中的cout、邏輯運算子、關鍵字和算術運算子等的學習。同時還學習了組合語言編寫程式的基本框架,就如同對c++中的main函式、子函式等的學習,這個學習過程主要了解用組合語言編寫程式的基本格式。因為有c++的基礎,也因為平時的自我學習,組合語言的整個學習過程感覺還是很輕鬆的。所以在了解了以上的內容後,就開始翻開實驗指導書從頭開始進行實現程式的編寫了。

第乙個彙編實驗

實驗內容:x、 y、 z、 v 均為字變數,在 x、 y、 z、 v 字單元中存放是 16 位帶符號數。試編寫組合語言程式完成以下功能:

①計算表示式值( v–( x*y+z-720)) /x;

②將上述表示式運算結果整數放在 sum1 單元,餘數放在 sum2 單元。

對於剛開始學習彙編的我,開始寫的時候如果不注意就會在乙個地方犯下錯誤,就是在進行x和y相乘的時候,因為x和y都是16位的,所以結果算出來是32位的,儲存在dx和ax暫存器中。正因為這樣,在後面進行+z和-720的運算過程中,都需要使用cwd對運算元進行位擴充套件,然後再進行加減運算。否則,可能會得到錯誤的結果。所以,對於乘除運算需要特別小心(當然,熟悉了之後這個就不再是什麼陷阱了^_^)。注意到這個問題之後,只要按照面向過程的程式設計思想將該表示式的計算過程翻譯成組合語言**就可以了。

;x,y,z,v均為字變數,在x,y,z,v字單元中存放的是16位帶符號數

;試編寫匯程式設計序實現

;1、計算表示式(v-(x*y+z-720))/x的值;2

、將計算結果整數放在sum1中,餘數放在sum2中

stack segment stack

db 1024 dup(?)

stack ends

data segment

'data

'x dw

2y dw

3z dw -1

v dw

10num dw

720sum1 dw ?sum2 dw ?data ends

code segment

'code

'assume cs:code,ds:data,ss:stack

start:

mov ax,data

mov ds,ax

mov ax,x

mov bx,y

imul bx

mov bx,ax

mov cx,dx

mov ax,z

cwdadd bx,ax

adc cx,dx

mov ax,num

cwdsub bx,ax

sbb cx,dx

mov ax,v

cwdsub ax,bx

sbb dx,cx

mov bx,x

idiv bx

mov sum1,ax

mov sum2,dx

mov ax,4c00h

int21h

code ends

end start

;sum1=o16ah

;sum2=1

組合語言程式設計實驗二

一 實驗目的 掌握彙編程式設計規範,熟悉程式設計環境。二 實驗內容 程式設計 參考教材實驗9,在螢幕中間分別顯示綠色 綠底紅色 白底藍色的字串 welcome to masm 三 實驗步驟演算法及關鍵 80x25彩色字元模式顯示緩衝區的結構 記憶體位址空間中,b8000h bffffh共32k空間為...

組合語言 《組合語言》王爽 實驗一

從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...

組合語言 實驗一

一 實驗目的 掌握彙編程式設計規範,熟悉程式設計環境。二 實驗內容 1.程式設計 向記憶體0 200 0 23f依次傳送資料0 63 3fh 2.程式設計 編寫code段 用push指令將a段中的word資料逆序儲存到b段中。三 實驗步驟演算法及關鍵 1.程式設計 向記憶體0 200 0 23f依次...