汇编语言-王爽-第八章实验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