匯編語言實驗七完整代碼
準備開發工具:notepad++(用來撰寫匯編代碼)
DOSBOX(windows系統中用來運行和除錯匯編代碼的編譯器,在VMware的虛擬機linux環境下也可以實作運行,這里不做演示)
Tips:此實驗是目前為止匯編語言最復雜的實驗代碼及功能實作,匯編語言作為底層語言,在本實驗中足以證明其魅力所在,程式本身一定要自己先動手寫,以后一定還會涉及到該程式中的相關知識點,需要耐心且嚴謹,
下面是代碼及詳解:(notepad++中完成開發)
assume cs:codesg,ds:data,es:table
data segment ;表明資料段的開始
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;以上是表示21年的21個字串
;db定義位元組型別變數,一個位元組資料占1個位元組單元,讀完一個,偏移量加1
dd 16,22,382,1356,2390,8000,16000,24486,50065,94749,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5973000
;以上是表示21年公司總收入的21個dword型資料
;dd定義雙字型別變數,一個雙字資料占4個位元組單元,讀完一個,偏移量加4
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,11430,45257,17800
;dw定義字型別變數,一個字資料占2個位元組單元,讀完一個,偏移量加2
data ends ;表明資料段的結束,即為資料定義完成
table segment ;定義一個表格
db 21 dup('year summ ne ?? ') ;dup中的內容回圈存盤21次,是表格內容
table ends ;表格定義結束
codesg segment ;代表代碼段開始
start:
mov ax,data
mov ds,ax
mov ax,table
mov es,ax ;這里es是額外的暫存器,是用來存放table的資料,其功能和ds相似
mov bx,0
mov si,0
mov di,0 ;bx,ei,di在這里我們也都用來控制回圈變數
mov cx,21 ;定義回圈次數為21,因為有21年的資料
s: ;進入回圈
mov al,[bx]
mov es:[di],al
mov al,[bx+1]
mov es:[di+1],al
mov al,[bx+2]
mov es:[di+2],al
mov al,[bx+3]
mov es:[di+3],al
;以上八行代碼的作用是存放年份資料(只存放了一個資料,每兩行存放一個數字,并且該數字是低位的)
mov ax,54h[si] ;收入的偏移為54h
mov es:5h[di],ax ;因為收入資料是緊挨著年份資料來存放的,所以這里要轉到table中的時候要挨著上面的年份繼續存放,所以收入資料在5h的地方開始繼續存放在table中
mov dx,56h[si];因為資料型別是dd型別,所以我們將低位的資料存放在ax中,高位資料存放在dx中
mov es:7h[di],ax ;以此類推即可,高位資料存放在高位置
;以上四行代碼的作用是存放年收入的資料
mov ax,0a8h[bx];偏移地址位0a8h
mov es:0Ah[di],ax
;以上兩行代碼的作用是存放雇員的資料
mov ax,54h[bx]
mov dx,56h[bx] ;以上兩句是初始化被除數
div word ptr ds:0A8h[di] ;進行除法
mov es:0dh[di],ax
;以上代碼的作用是計算平均收入
add si,4
add bx,2
add di,16;改變回圈變數的值
loop s;回圈終止
mov ax,4c00h
int 21h ;這兩句代碼代表程式結束,為stipulate
codesg ends
end start
在DOSBox中輸入r指令進行查看暫存器內容:

實驗七知識點總結:
一、資料定義
db定義位元組型別變數,一個位元組資料占1個位元組單元,讀完一個,偏移量加1
dd定義雙字型別變數,一個雙字資料占4個位元組單元,讀完一個,偏移量加4
dw定義字型別變數,一個字資料占2個位元組單元,讀完一個,偏移量加2
二、DOSBOX運行指令匯總
- R :查看 、改變cpu暫存器的內容
- D:查看記憶體中內容
- E:改寫記憶體中內容
- U :將記憶體中機器指令翻譯成匯編指令
- T:執行一潭訓器指令
- A:以匯編指令的格式在記憶體中寫入一潭訓器指令
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344313.html
標籤:其他
上一篇:專案實戰--用戶消費資料分析
