无我

让内心永远燃烧着伟大的光明的精神之火!
灵活的思考,严谨的实现
豪迈的气魄、顽强的意志和周全的思考

王爽《汇编语言第二版》第8章实验7 解答

实验7 寻址方式在结构化数据访问中的应用
我的程序如下,代码已经在debug中测试。
DATAS 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,2258,2793,4037,5635,8226
    dw 
11542,14430,15257,17800
DATAS ENDS

table segment
    db 
21 dup ('year summ ne ?? ')
table ends

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    mov ax,table
    mov ss,ax
    
    mov bp,
0
    mov si,
0 ;for year and summ
    mov di,
0 ;for ne
    mov cx,
21
    S:
    ;year
    mov ax,[si]
    mov [bp].
0,ax
    mov ax,[si
+2]
    mov [bp].
2,ax
    
    ;收入summ
    mov ax,
84[si]
    mov [bp].
5,ax
    mov dx,
84[si+2]
    mov [bp].
7,dx
    
    add si,
4
    
    ;雇员数ne
    mov bx,
168[di]
    mov [bp].
10,bx
    add di,
2    
        
    ;人均收入
     div bx
     mov [bp].
13,ax
     
     ;space table初始化时已经是空格,可以不处理
    ;mov 
byte ptr [bp].4,20h
    ;mov 
byte ptr [bp].9,20h
    ;mov 
byte ptr [bp].12,20h
    ;mov 
byte ptr [bp].15,20h
    
    add bp,10h
    loop S
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

 

本题设计的好处就在于:

1、年份year是用ascii表示,所以要4个字节。而公司收入又是一个dd类型,也是4个字节。所以这两个数据可以共用一个寄存器表偏移,我的程序用的是si。

2、读入收入时,就有意用dx存高位,用ax存低位;读入雇员数时,用bx来存储,这样就能直接用div求人均收入,也就不需要额外的寄存器转存的过程。

3、故意将table段地址用ss存,这样就顺理成章的用bp作为table段的偏移。就不需要显式标出段寄存器了。

基于以上设计,也就不需要额外弄堆栈,寄存器等,而且一个循环就能实现了。

posted on 2012-06-01 14:41 Tim 阅读(1665) 评论(1)  编辑 收藏 引用 所属分类: 汇编语言

评论

# re: 王爽《汇编语言第二版》第8章实验7 解答[未登录] 2014-05-19 09:26 none

看群一席码,胜读十年书  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2014年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

本博客原创文章,欢迎转载和交流。不过请注明以下信息:
作者:TimWu
邮箱:timfly@yeah.net
来源:www.cppblog.com/Tim
感谢您对我的支持!

留言簿(9)

随笔分类(173)

IT

Life

搜索

积分与排名

最新随笔

最新评论

阅读排行榜