转载请注明出处
assume cs:codesg
data 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'
;以上是表示21年的21个字符串
dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
;以上是表示21年公司总收入的21个dword型数据
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
dw 11542, 14430, 15257, 17800
;以上是表示21年公司雇员人数的21个word型数据
;可以看成 3 个数组
; ds:[0] 0
; ds:[54h] 84
; ds:[a8h] 168
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
; stack segment
; db 16 dup ('0')
; stack ends
codesg segment
start: mov ax, data
mov ds, ax ;初始化 ds 段
mov ax, table
mov es, ax ;初始化 es 段
; mov ax, stack
; mov ss, ax
; mov sp, 10h ;初始化 ss 栈
mov bp, 0 ;控制数组索引
mov di, 0
mov bx, 0 ;控制table的每一行
mov cx, 21 ;循环次数21次,21个结构体
s:
mov si, 0;
mov ax, ds:[0 + bp]
mov es:[bx].0[si], ax
add si, 2
mov ax, ds:[0 + bp + 2]
mov es:[bx].0[si], ax
;
mov byte ptr es:[bx + 4], ' ' ;空格
mov si, 0;
mov ax, ds:[54h + bp]
mov es:[bx].5[si], ax
add si, 2
mov ax, ds:[54h + bp + 2]
mov es:[bx].5[si], ax
;
mov byte ptr es:[bx + 9], ' ' ;空格
mov si, 0;
mov ax, ds:[168 + di]
mov es:[bx].10[si], ax
;
mov byte ptr es:[bx + 12], ' ' ;空格
mov si, 0
; push bx ;把bx存起来,因为除法要用
mov ax, ds:[168 + di];用内存也可以存除法的除数
mov ds:[0], ax
; mov bx, ds:[168 + di] ;mov bx, ax ;因为ax值暂没被覆盖,除数为16位
mov ax, ds:[54h + bp] ;除数为16位,被除数32位,低16位放入ax
mov dx, ds:[54h + bp + 2];高16位放入dx
div word ptr ds:[0]
; pop bx ;除法算完之后再复原
mov es:[bx].13[si], ax
;
mov byte ptr es:[bx + 15], ' ' ;空格
add bp, 4 ;每次复制两个字节
add di, 2 ;每次复制一个字节
add bx, 16 ;每次移动一个结构体的数据
loop s
mov ax, 4c00h
int 21h
codesg ends
end start