汇编语言-王爽-第八章实验7

如果从每次循环写入一个数据行考虑的话,关键是储存年份、收入、人数3个信息的地址来保证每次读取能找到数据的位置,每完成一行后这3个地址分别增加4、4、2。

网上的例子有使用bx、bp、si、di中的3个来存储,另1个存储写入行的地址。也有减少为2个来存储的,因为有2个的增量都是4,使用1个寄存器,另一个用偏移量来定位。

我用堆栈来储存这3个地址,使用时移动到si寄存器。没贴出数据部分。

 1 stack segment
 2        dw 0,84,168
 3 stack ends
 4 
 5 code segment
 6     assume cs:code,ds:data,ss:stack
 7 start:
 8     mov ax,data
 9     mov ds,ax
10     mov ax,stack
11     mov ss,ax
12     
13     mov bx,0e0h    
14     mov cx,21
15     l1:    ;构造21行
16         ;年份
17         mov si,ss:[0]
18         mov ax,[si]
19         mov [bx].0,ax
20         mov ax,2[si]
21         mov [bx].2,ax
22         
23         ;收入
24         mov si,ss:[2]
25         mov ax,[si]
26         mov [bx].5,ax
27         mov ax,2[si]
28         mov [bx].7,ax
29         
30         ;雇员
31         mov si,ss:[4]
32         mov ax,[si]
33         mov [bx].0ah,ax
34         
35         ;人均收入
36         mov ax,[bx].5
37         mov dx,[bx].7
38         div word ptr [bx].0ah
39         mov [bx].0dh,ax
40         
41         add word ptr ss:[0],4
42         add word ptr ss:[2],4
43         add word ptr ss:[4],2
44         add bx,16
45     loop l1
46     
47     mov ah,4ch
48     int 21h
49 code ends
50 end start

 

posted @ 2013-10-10 13:12  ZackCoder  阅读(384)  评论(0编辑  收藏  举报