【汇编语言第四版 课程设计1代码(自己敲的)】

assume cs:code,ds:data,ss:stack,es:table

data segment

db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

db '1984','1985','1986','1987','1988','1989','1990','1991'

db '1992','1993','1994','1995'

;以上是表示21年的21个字符串

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417

dd 197514,345980,590827,803530,1183000,1843000,2759000,3753000

dd 4649000,5937000

;以上表示21年公司总收入

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037

dw 5635,8226,11542,14430,15257,17800

;以上是表示21年的公司雇员人数

data ends

stack segment

dd 30 dup (0)

stack ends

table segment

db 21 dup ('year summ ne ?? ')

table ends

code segment

start:mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

mov sp,30

mov ax,table

mov es,ax

mov cx,21

mov bx,0

mov si,0

mov bp,0

mov di,0

s1:mov ax,[bx][si]

mov es:[bp][di],ax

mov ax,[bx][si + 2]

mov es:[bp][di + 2],ax ;存入年份

add bx,84

mov ax,[bx][si]

mov dx,[bx][si + 2]

mov es:[bp][di + 5],ax

mov es:[bp][di + 7],dx ;存入当年的收入

mov bx,0

add si,4

add bp,16

loop s1

mov cx,21

mov bx,168

mov si,0

mov bp,0

mov di,0

s2:push cx

mov ax,[bx][si]

mov es:[bp][di + 10],ax ;存入当年的雇员人数

mov ax,es:[bp][di + 5] ;L

mov dx,es:[bp][di + 7] ;H

mov cx,es:[bp][di + 10] ;除数

call divdw

mov es:[bp][di + 13],ax ;存入人均工资

add si,2

add bp,16

pop cx

loop s2

;所有数据都迁移至 table 后,开始进行显示工作

mov cx,21

mov ax,table

mov ds,ax

mov bx,0

mov si,0

mov di,1

show1:push cx ;显示年份

mov ax,di

mov dh,al

mov dl,1

mov cl,2

call show_str1

mov ax,16

mul di

mov si,ax

inc di

pop cx

loop show1

mov cx,21

mov di,1

mov ax,stack

mov ss,ax

mov sp,30

mov ax,table

mov es,ax

mov bx,0

show2:

push cx

push bx

push di

mov ax,table

mov es,ax

mov ax,es:[bx + 5] ;要显示的数据的低4位

mov dx,es:[bx + 7] ;要显示的数据的高4位

mov bx,data

mov ds,bx

mov si,0

mov di,0 ;计算位数

call dtoc

pop di

mov ax,di

mov dh,al ;行号

mov dl,10 ;列号

mov cl,2

mov ax,data

mov ds,ax

mov si,0

call show_str2

pop bx

add bx,16

pop cx

inc di

loop show2

mov cx,21

mov di,1

mov ax,stack

mov ss,ax

mov sp,30

mov ax,table

mov es,ax

mov bx,0

show3:

push cx

push bx

push di

mov ax,table

mov es,ax

mov ax,es:[bx + 10] ;要显示的数据的低4位

mov dx,0 ;要显示的数据的高4位

mov bx,data

mov ds,bx

mov si,0

mov di,0 ;计算位数

call dtoc

pop di

mov ax,di

mov dh,al ;行号

mov dl,25 ;列号

mov cl,2

mov ax,data

mov ds,ax

mov si,0

call show_str2

pop bx

add bx,16

pop cx

inc di

loop show3

mov cx,21

mov di,1

mov ax,stack

mov ss,ax

mov sp,30

mov ax,table

mov es,ax

mov bx,0

show4:

push cx

push bx

push di

mov ax,table

mov es,ax

mov ax,es:[bx + 13] ;要显示的数据的低4位

mov dx,0 ;要显示的数据的高4位

mov bx,data

mov ds,bx

mov si,0

mov di,0 ;计算位数

call dtoc

pop di

mov ax,di

mov dh,al ;行号

mov dl,45 ;列号

mov cl,2

mov ax,data

mov ds,ax

mov si,0

call show_str2

pop bx

add bx,16

pop cx

inc di

loop show4

mov ax,4c00h

int 21h

dtoc:mov bx,10 ;dtoc的功能:先将各个位置的数字压入栈中,再调用

push ax

mov ax,dx ;将H放到低4位

mov dx,0

div bx ;此时ax中存储int(H/N),dx中存储rem(H/N)

mov bp,ax

;乘上65536=16^4,相当于左移四位,也就是将数据放入高4位

pop ax

div bx ;此时ax中存储int(rem(H/N)*65536+L)/N 的商,dx储存余数

add dx,30h

push dx

inc di

mov dx,bp

mov cx,ax ;判断商的低4位是否为0,为0则跳转到dtoc1,继续判断商的高4位是否为0

jcxz dtoc1

inc cx

loop dtoc

dtoc1:mov cx,dx

jcxz dtoc2 ;商的高4位也为0,说明dtoc的运算可以结束了

inc cx

loop dtoc ;否则继续运算

dtoc2:mov cx,di

dtoc3:pop ax

mov [si],ax

inc si

loop dtoc3

ret

divdw:push bp

push ax

mov ax,dx ;将H放到低4位

mov dx,0

div cx ;此时ax中存储int(H/N),dx中存储rem(H/N)

mov bp,ax

;乘上65536=16^4,相当于左移四位,也就是将数据放入高4位

pop ax

div cx ;此时ax中存储int(rem(H/N)*65536+L)/N,dx储存余数

mov cx,dx

mov dx,bp

pop bp

ret

show_str1:mov ah,0

mov al,dl

mov bp,ax

sub bp,1

add bp,bp

mov ax,0b800h

mov es,ax

mov ch,0

push cx

mov cl,dh

sub cx,1

jcxz str1

ss1:add bp,0a0h

loop ss1

str1:mov ch,0

mov cl,ds:[si]

sub cl,20h

jcxz ok1 ;获取当前元素后,判断是否为0

mov al,ds:[si]

mov es:[bp],al

pop cx ;取出字的属性

inc bp

mov es:[bp],cl

push cx ;保存字的属性

inc si

inc bp

loop str1

ok1:pop cx

ret

show_str2:mov ah,0

mov al,dl

mov bp,ax

sub bp,1

add bp,bp

mov ax,0b800h

mov es,ax

mov ch,0

push cx

mov cl,dh

sub cx,1

jcxz str2

sss:add bp,0a0h

loop sss

str2:mov ch,0

mov cl,ds:[si]

jcxz ok2 ;获取当前元素后,判断是否为0

mov al,ds:[si]

mov es:[bp],al

pop cx ;取出字的属性

inc bp

mov es:[bp],cl

push cx ;保存字的属性

inc si

inc bp

loop str2

ok2:pop cx

ret

code ends

end start

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值