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調試本身寫的程序,這樣
如此下去,你會有意想不到的收穫和驚喜,^_^,祝君每天有好心情!