本文共 2321 字,大约阅读时间需要 7 分钟。
这个实验我自己摸索了好几个小时才弄出来,最后想通了发现自己把问题想复杂了。
assume cs:code,ds:datadata 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' dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2558,2793,4037,5635,8226 dw 11542,14430,15257,17800data endstable segment db 21 dup ('year summ ne ?? ')table endscode segmentstart: mov ax,data mov ds,ax mov ax,table mov es,ax ;初始化变量 mov bx,0 ;table 段的行 mov si,0 ;操作年份、收入数据的变量 mov di,0 ;操作雇员数的变量 mov cx,21s0: ;年份存入table段 mov ax,[si] mov es:[bx],ax mov ax,[si+2] mov es:[bx+2],ax ;收入存入table段 mov ax,[si+84] mov es:[bx+5],ax mov dx,[si+86] mov es:[bx+7],dx ;雇员数存入table段 mov bp,word ptr [di+168] mov es:[bx+10],bp ;人均收入存入table段 div bp mov es:[bx+13],ax add bx,16 add si,4 add di,2 loop s0 mov ax,4c00h int 21hcode endsend start
这个实验重点是:对数据的寻址方式,以及合理使用寄存器。
推荐一篇文章:
对上面这两点讲的比较细。弄清楚了这两点,再写代码就清楚了。
表示代码逻辑再次看自己都看不懂
:(
哈哈。当时我是想尽量用到那个实验之前学到的所有知识点。事实也是如此我用到了之前学过的绝大部分知识。虽然最后代码逻辑复杂,但是收获满满。
assume cs:code,ds:data,ss:stackstack segment db 200 dup(0)stack endsdata 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' dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2558,2793,4037,5635,8226 dw 11542,14430,15257,17800data endstable segment db 21 dup ('year summ ne ?? ')table endscode segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov ax,table mov es,ax mov di,0 ;全局读取数据的索引变量 mov bx,0 ;表格行 push 0 ;先将读取雇员数时的索引变量入栈 mov cx,21s0: mov si,0 ;表格列 push di push cx mov cx,4 ;年份 s1: mov ax,[di] mov es:[bx+si],ax inc si inc di loop s1 pop cx ;分别用ax、dx储存收入的高四位和第四位 mov si,0 pop di mov ax,[di+84] mov es:[bx+5+si],ax add si,2 add di,2 mov dx,[di+84] mov es:[bx+5+si],dx add di,2 ;算出人均收入 pop si div word ptr [si+168] ;雇员数存入table段 mov dx,word ptr [si+168] mov es:[bx+10],dx add si,2 push si ;人均收入存入table段 mov es:[bx+13],ax add bx,16loop s0 mov ax,4c00h int 21hcode endsend start
转载地址:http://ktden.baihongyu.com/