assume cs:code
data segment
db
db
db
;以上是表示21年的21个字符串 起始位置 0
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型数据 起始位置 54H
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型数据 起始位置 A8H
db 10 dup (0) ; 转为字符串的存放位置, 起始位置 D2H
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0D2H
mov dh,2
mov di,0
mov bx,0
mov cx,21
s: mov dl,20
push cx
mov cl,02
mov ax,[bx]
mov [si],ax
mov ax,[bx+2]
mov [si+2],ax
call show_str ;显示每一行的年份
call back_zero ;显示年份后,将字符串区的值置为0
add dl,10 ;列数加10,将显示公司收入
push dx
mov ax,[bx].54h
mov dx,[bx].56h
call dtoc ;调用后ax中的值不变
pop dx
mov cl,02
call show_str ;显示公司收入
call back_zero
add dl,20 ;列数加20,显示人均收入
push dx
mov dx,[bx].56h
div word ptr [di].0A8h
sub dx,dx
call dtoc
pop dx
mov cl,02
call show_str ;显示人均收入
call back_zero
sub dl,10
push dx
mov ax,[di].0A8h
sub dx,dx
call dtoc
pop dx
call show_str ;显示公司人数
add bx,4
add di,2
inc dh
pop cx
loop s
mov ax,4c00h
int 21h
;功能:将dword型数据转变为表示十进制数的字符串,字符串以0为结尾符。
;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,ds:si 指向字符串的首地址。
;返回:无。
dtoc: push dx
push si
push cx
push bx
push ax
mov bx,0
dtoc_s: mov cx,10
call divdw
add cl,30h
push cx
inc bx
mov cx,ax
add cx,dx
inc cx
loop dtoc_s
mov cx,bx
dtoc_s1:pop ax
mov [si],al
inc si
loop dtoc_s1
pop ax
pop bx
pop cx
pop si
pop dx
ret
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=要显示字符的属性,ds:si指向字符串的首地址。
;返回:无
show_str: push dx
push ax
push es
push bx
push si
push cx
mov cl,dh
mov ch,0
mov ax,0
jcxz show_str_a
show_str_s: add ax,0a0h
loop show_str_s
show_str_a: mov cl,dl
jcxz show_str_a1
show_str_s0:add ax,2
loop show_str_s0
show_str_a1:mov bx,ax
mov ax,0b800h
mov es,ax
pop ax
show_str_show:mov cl,[si]
jcxz show_str_ok
mov es:[bx+1],al
mov es:[bx],cl
inc si
add bx,2
jmp short show_str_show
show_str_ok:push ax
pop cx
pop si
pop bx
pop es
pop ax
pop dx
ret
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,(cx)=除数。
;返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数。
divdw: push bx
push ax
mov ax,dx
mov dx,0
div cx
pop bx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
pop bx
ret
;功能:将字符串区的值置为0
;参数:无。
;返回:无。
back_zero: push ax
push cx
push bp
mov ax,0
mov cx,10
back_zero_s:sub cx,1
mov bp,cx
mov ds:[bp].0D2h,al
inc cx
loop back_zero_s
pop bp
pop cx
pop ax
ret
code ends
end start
转载请注明原文地址:https://blackberry.8miu.com/read-3566.html