汇编语言:实验7寻址方式在结构化数据访问中的应用
生活随笔
收集整理的這篇文章主要介紹了
汇编语言:实验7寻址方式在结构化数据访问中的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實驗介紹
下面程序中,已經定義好了這些數據:
assume cs:codesg,ds:tabledata 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個字符串,0~83dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司總收入的21個dword型數據,84~167dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是表示21年公司雇員人數的21個world型數據,168~209 data ends
編程,將data段中的數據按如下格式寫入到table段中,并計算21年中的人均收入(取整),結果也按照下面的格式保存在table段中。
實驗結果
實驗過程
經過斷斷續續的幾個晚上,獨自思考不斷調試改變思路,終于把實驗做出來了,一股成就感油然而生。下面說一下代碼實現思路。
21年的數據,肯定需要使用循環將數據放入到table段中,我們同時也要訪問data段中的數據,我們復制數據,可以用es 和 ds段寄存器來存放源數據段和目標數據段 就可以了。然后源數據中的 年份、收入、員工數他們的相對于 data段中的起始位置是 已知的,那么每次循環訪問的數據,往相應的起點進行偏移就ok了。這里就要用到嵌套的loop循環了。那么我們肯定需要存儲cx的值了,我們自己再定義一個stack棧段用于存放cx的值。比如說年份和收入的偏移值每次累加4,雇員的偏移值每次累加2,目標數據段訪問每次偏移16字節?。把相應的值復制到目標數據段就OK了,代碼中寫的很詳細。然后就是除法運算了,用對應的規則很好計算。
這個實驗還是比較綜合的,獨自思考很重要,你會領悟到更多。
實驗代碼
;編程,將data段中的數據按如下格式寫入到table段中,并計算21年中的人均收入(取整) ;結果也按照下面的格式保存在table段中。 assume cs:codesg,ds:table,ss:stackdata 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個字符串,0~83dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司總收入的21個dword型數據,84~167dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是表示21年公司雇員人數的21個world型數據,168~209 data endstable segmentdb 21 dup('year sumn ne ?? ') ;table段中 每16個字節按照這個格式進行存儲 data段中的數據 table endsstack segmentdw 0 ;存儲cx值 stack endscodesg segment start:;設置棧段 存儲cx值mov ax,stackmov ss,axmov sp,3;設置目標數據段mov ax,tablemov ds,ax;設置源數據段mov ax,datamov es,ax;設置初始偏移量mov bx,0mov di,0mov si,0mov cx,21s:push cx ;保存cx值;放年份mov ax,es:0[si]mov 0[bx],axmov ax,es:2[si]mov 2[bx],ax;放收入mov ax,es:84[si]mov 5[bx],axmov ax,es:86[si]mov 7[bx],ax;放雇員mov ax,es:168[di]mov 10[bx],ax;放人均收入,被除數32位 高16位放dx中 低16位放ax中,除數可以在10[bx]中mov ax,5[bx]mov dx,7[bx]div word ptr 10[bx];mov 13[bx],axpop cx ;還原cx值add bx,16;讀入數據 每次偏移16個字節add si,4; 讀取年份、收入數據 每次偏移增加4個字節add di,2; 讀取雇員每次偏移增加2個字節loop smov ax,4c00hint 21h codesg endsend start總結
以上是生活随笔為你收集整理的汇编语言:实验7寻址方式在结构化数据访问中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】linux ln文件夹的链
- 下一篇: 栈的顺序存储及实现(一)