王爽 彙編 實驗7尋址方式在結構化數據訪問中的應用

1、需求編程

編程將data段中的數據按以下格式寫入到table段中,並計算21年中的人均收入(取整),結果也按照下面的格式保存在table段中
工具

 2、代碼實現 oop

 1 ;目的:尋址方式在結構化數據訪問中的應用
 2 ;編寫:Tony
 3 ;語言:asm
 4 ;時間:2020.3.26
 5 
 6 assume cs:code,ds:data,es:table
 7 
 8 ;數據段(原始數據)
 9 data segment
10     db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
11     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
12     db '1993','1994','1995'
13     ;以上是表示21年的21個字符串
14     
15     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
16     dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
17     ;以上是表示21年公司總收入的21個doword型數據
18     
19     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
20     dw 11542,14430,15257,17800
21     ;以上是表示21年僱員人數的21個word型數據
22 data ends
23 
24 ;數據段(須要填充數據的表)
25 table segment
26     db 21 dup('year summ ne ?? ')    ;字符串共佔用16個字節
27 table ends
28 
29 ;代碼段
30 code segment
31         ;初始化數據段
32 start:  mov ax,data
33         mov ds,ax
34         mov ax,table
35         mov es,ax
36 
37         ;初始化臨時變量        
38         mov bx,0
39         mov dx,0
40         mov si,0
41         mov di,0
42         mov cx,21
43                     
44         ;向table表中添加年份
45 s:      mov ax,word ptr ds:[si]    
46         mov dx,word ptr ds:[si+2]            
47         mov word ptr es:[bx],ax
48         mov word ptr es:[bx+2],dx
49         
50         ;向table表中添加收入    
51         mov ax,word ptr ds:54h[si]    
52         mov dx,word ptr ds:54h[si+2]            
53         mov word ptr es:[bx+5],ax
54         mov word ptr es:[bx+7],dx    
55         
56         ;向table表中添加僱員人數
57         mov ax,word ptr ds:0a8h[di]            
58         mov word ptr es:[bx+0ah],ax
59         
60         ;向table表中添加人均收入(須要計算)
61         mov ax,word ptr es:[bx+5]
62         mov dx,word ptr es:[bx+7]
63         div word ptr es:[bx+0ah]
64         mov word ptr es:[bx+0dh],ax
65         
66         add si,4
67         add di,2
68         add bx,10h
69         
70         loop s        
71         mov ax,4c00h
72         int 21h    
73 code ends
74 end start

 3、上機調試學習

詳細教你一步一步調試程序實現數據表中數據的填充spa

編譯工具:masm611(包含ml.exe、masm.exe、link.exe三個文件),在網上隨便下載一個就行,搜索masm611debug

編譯環境:vmware中的xp sp33d

1.首先對源程序進行編譯連接生成可執行文件(我這裏源程序名稱爲p185.asm,編譯連接生成p185.exe文件),而後就開始調試

debug p185.exe並查看各個寄存器的數據狀況code

2.用t指令開始單步調試程序,執行第一條指令mov ax,0b34,執行完成後,數據段地址0b34賦值給寄存器axblog

 3.繼續單步,執行完mov ds,ax後,寄存器ax中的值傳遞給數據段寄存器ds

 此時,咱們須要查看一下,數據段data中初始化的數據,一共初始化了210個字節

4.繼續單步,執行指令mov ax,0b42後,附加段地址0b42賦值給寄存器ax

 5.繼續單步,執行完mov es,ax後,寄存器ax中的值傳遞給數據段寄存器es 

 此時,咱們須要查看一下,數據段table中初始化的數據,一共初始化了336個字節

6.連續執行5條指令,初始化臨時變量

 

7.連續執行4條指令,將數據段中的年份數據填充到es段的table表中

8.連續執行4條指令,將數據段中的收入數據填充到es段的table表中

9.連續執行2條指令,將數據段中的僱員人數數據填充到es段的table表中

10.連續執行3條指令,將數據段中的人均收入數據填充到es段的table表中

11.連續執行3條指令,爲table表中的下一行作準備

12.在上圖的狀態下,執行-p指令,讓計算機自動執行完循環體,在執行-t -p指令程序正常退出

13.忘記了點事情,沒有查看table中的數據,程序在從新走一遍吧~_~……,把結果補上

從圖中能夠看出,原始數據已經正確的填充到了table表中

總結:相信你一步一步的這樣調試,對彙編中尋址方式在結構化數據訪問中的應用會很大幫助與提升,

感謝仔細觀看這篇文章的朋友!學習彙編語言,最重要的就是多上機debug調試本身寫的程序,這樣

如此下去,你會有意想不到的收穫和驚喜,^_^,祝君每天有好心情!

相關文章
相關標籤/搜索