「汇编语言 第 3 版 王爽」- 参考答案:实验 7 寻址方式在结构化数据访问中的应用

  CREATE BY JENKINSBOT
原文链接:「汇编语言 第 3 版 王爽」- 参考答案:实验 7 寻址方式在结构化数据访问中的应用
文章分类:「01.Section_of_the_Computer_Hardware:1.CPU_-_Central_Processing_Unit:x86_Assembly_Language:ISBN_-_9787302333142:EXP_07」
文章标识:「3a110609」
assume cs:codesg

datasg segment
	; 年份 21x4=84, 0-83
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
    db '1993','1994','1995'
	; 收入 21x4=84, 84-167 
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
	; 人数 21x2=42, 168-20H9
    dw 3,7,9,13,28,38,130,220H,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,15257,17800
datasg ends

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

codesg segment

start:
		; 21 条数据,21 次循环
		mov cx, 21
		; 用做下标,获取数据
		mov si, 0
		mov di, 0
		; 数据写入 table 段
		mov ax, table
		mov es, ax
		; 每次循环都要取年份、收入、人数数据
		mov ax, datasg
		mov ds, ax ; 年份 => ds:[0],收入 => ds:[84],人数 => ds:[168]
		
loop_01:
		; 写入年份
		mov ax, ds:0[si]
		mov es:[0], ax
		mov ax, ds:0[si+2]
		mov es:[2], ax
		
		; 写入空格
		mov al, 20H
		mov es:[4], al
		
		; 写入收入
		; 与计算收入时,一起写入
		
		; 写入空格
		mov al, 20H
		mov es:[9], al
		
		; 写入人数
		; 与计算收入时,一起写入
		
		; 写入空格
		mov al, 20H
		mov es:[0CH], al
		
		; 写入收入、人数、平均收入
		mov ax, ds:84[si]
		mov es:[5], ax
		mov dx, ds:84[si+2]
		mov es:[7], dx	
		
		mov bx, ds:168[di]
		mov es:[0AH], bx
		
		div bx ; 前面已经将除数、被除数放入相应的寄存器
		mov es:[0DH], ax
		
		; 写入空格
		mov al, 20H
		mov es:[0FH], al
		
		; 调整变量,进入下一轮循环
		mov ax, es
		inc ax
		mov es, ax
		add si, 4
		add di, 2
		loop loop_01
		
		mov ax, 4c00h
		int 21h

codesg ends

end start

参考文献

CSDN/汇编语言王爽第三版答案
百度文库/汇编语言实验答案 (王爽)