s0512 发表于 2012-11-6 19:37:53

汇编 课程设计1 交作业啦!

**** Hidden Message *****assume cs:code ,ds:data ,ss:stack

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'
;======================================================================
d2 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 456980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;======================================================================
d3 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;======================================================================
d4 dw 20 dup (0)
data ends
;======================================================================
stack segment
dw 20 dup (0)
stack ends
;======================================================================
;======================================================================
code segment
;======================================================================

strat: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov ax,stack
mov ss,ax
mov sp,20
;-----------------初始化寄存器
mov bx,160
mov si,0
mov di,0
;-----------------DI指向显存
mov bp,offset d2
;-----------------BP指向D2
mov cx,21
;======================================================================
;显示日期
zhuxh: call riqi


;======================================================================
;显示收入

push di
xor di,di
add di,30
call shouru
pop di
;----------------------写人数间距加20
;======================================================================
;显示人数
push di
xor di,di
add di,60
call renshu
pop di
;----------------------与平均娄间距加20

;======================================================================
;显示平均
push di
xor di,di
add di,90
call pingjun
call dtoc
;----------------------结果转ASCII码
call show_str
pop di
;----------------------显示
;======================================================================
add bx,160
mov di,0
add si,2
add bp,4
loop zhuxh

mov ah,01
int 21h



;========= ====================================================
;=====================================================================
;=====================显示show_str=======================================
show_str:
push bp
push cx
mov bp,offset d4
xssj: mov cl,ds:
mov ch,0
inc bp
jcxz xswk
mov es:,cl
inc di
mov es:,2
inc di
jmp xssj
xswk: pop cx
pop bp

ret
;=====================================================================
;========================转换DTOC=======================================
dtoc: push si
push di
push bp
push cx
push bx
mov bx,10
mov si,0
;-----------保存数据
d_hys: mov bp,ax
;-----------转移L位
mov ax,dx
xor dx,dx
;-----------H转AX D清零
div bx
;-----------H/10
mov di,ax
;-----------H结果=DI
mov ax,bp
;-----------L重赋给AX
div bx
;-----------REG+L/10 DX=余娄 H结果=DI
;=========== L结果AX

mov cx,bp
jcxz d_wk
;-----------余数为空jmp 到出栈
add dx,30h
push dx
inc si
xor dx,dx
;------------余数+30H=ASCII
mov dx,di
;------------H重赋给DX
jmp d_hys
;------------判断H为0,不为0循环
;============ 为0做L位除法
d_wk: mov cx,si
;------------设定循环数
jcxz d_ecs
;------------CX为0 jmpECS
mov si,offset d4
;------------d4数据给SI
d_cz: pop ds:
inc si
loop d_cz
;-------------循环出栈

d_ecs: pop bx
pop cx
d_2: pop bp
pop di
pop si
ret
;=====================================================================
;==========================除法divdd=====================================
divdd: push si
push bp
push bx
push cx
;-------------保存数据
mov bp,ax
;-------------L转BP
mov ax,dx
mov dx,0
;-------------H给AX
div bx
;-------------H/10
mov si,ax
;-------------H结果给SI
mov ax,bp
;-------------L重赋给AX
div bx
mov dx,si
;-------------H赋值给DX
pop cx
pop bx
pop bp
pop si
ret
;====================================================================
;==========================日期riqi=====================================
riqi: push si
;------------------保存数据
;push
add si,si
mov ax,ds:
mov ds:0d2h,ax
mov ax,ds:2
mov ds:0d4h,ax
mov ds:0d6h,0
call show_str
pop si
ret
;====================================================================
;==========================收入shouru==================================
shouru: push si
push bp
;------------------保存数据
mov si,offset d4
;------------------d4=si
mov ax,ds:
mov dx,ds:2
;-------------------AX&DX赋值
call dtoc
call show_str
;-------------------转换ASCII&显示

pop bp
pop si
ret
;====================================================================
;==========================人数renshu===================================
renshu: push si
;------------------保存数据
;mov dx,offset d3
mov ax,ds:0a8h
mov dx,0
call dtoc
call show_str
pop si
;===================================================================
;==========================平均pingjun=================================
pingjun: push si
push bx
push di
push bp
;-------------------;保存数据
mov ax,ds:
mov dx,ds:2
;-------------------DX&AX赋值 被除数
mov bx,ds:0A8H
;-------------------BX赋值 除数
call divdd


pop bp
pop di
pop bx
pop si
ret

code ends
end strat


s0512 发表于 2012-11-6 19:39:11

{:5_109:}搞了几天~~哈哈!!!

冥木 发表于 2012-12-18 23:35:43

看了一下挺厉害的吗   我是初学者里面的代码也认识的不太全

madalin 发表于 2013-2-16 18:04:07

楼主,我编译怎么通不过啊,提示99、197有无效的指令操作:L

牡丹花下死做鬼 发表于 2013-2-17 20:28:32

大牛 您好 崇拜啊

s0512 发表于 2013-2-18 11:26:40

madalin 发表于 2013-2-16 18:04 static/image/common/back.gif
楼主,我编译怎么通不过啊,提示99、197有无效的指令操作

多谢指点!没有指明数据长度,所以报错。我在EMU8086下写的,疏忽疏忽{:5_109:}

dycc 发表于 2013-4-23 18:42:16

强烈支持楼主ing……

┈━═☆佳佑 发表于 2013-6-16 00:11:32

我真的很感悟……这编码 看起来 就漂亮唉我的 编码 自己都看着晕:funk::funk:

wenqianmin 发表于 2013-9-5 20:07:57

强烈支持楼主ing……
页: [1]
查看完整版本: 汇编 课程设计1 交作业啦!