苏小白 发表于 2021-5-1 18:39:22

课程1.。。

assume cs:codesg,ds:datasg,ss:stacksg

stacksg segment
        db 64 dup (0)
stacksg ends

datasg segment
        db 16 dup (0)                ;存放待显示字符串
       
        db '1975','1976','1977','1978','1979','1980','1981'
        db '1982','1983','1984','1985','1986','1987','1988'
        db '1989','1990','1991','1992','1993','1994','1995'
        ;以上是表示21年的21个字符串
       
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
        dd 140417,197514,345980,590827,803530,1183000,1843000
        dd 2759000,3753000,4649000,5937000
        ;以上是表示21年公司总收入的21个dword型数据
       
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793
        dw 4037,5635,8226,11542,14430,15257,17800
        ;以上是表示21年公司雇员人数的21个word型数据
       
datasg ends

codesg segment
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址
show_str:        push es
                push ax
                push cx
                push dx
                push si
                push di
                mov ax,0b800h
                mov es,ax
                mov al,160
                mul dh
                mov di,ax
                add dl,dl
                mov dh,0
                add di,dx
                mov ah,cl
                mov ch,0
                show:        mov cl,
                        jcxz show0
                        mov al,
                        mov es:,ax
                        inc si
                        add di,2
                        jmp short show
                show0:        pop di
                        pop si
                        pop dx
                        pop cx
                        pop ax
                        pop es
                        ret

;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为 dword 型,除数为 word 型,结果为 dword 型。
;参数:(ax)=dword 型数据的低16位,(dx)=dword 型数据的高16位,(cx)=除数
;返回:(ax)=结果的低16位,(dx)=结果的高16位,(cx)=余数
divdw:        push bx
        push ax
        mov ax,dx
        mov dx,0
        div cx
        mov bx,ax
        pop ax
        div cx
        mov cx,dx
        mov dx,bx
        pop bx
        ret

;名称:dtoc
;功能:将 dword 型数据转变为表示十进制数的字符串,字符串以0为结尾符。
;参数:(ax)=dword型数据低16位,(dx)=dword型数据高16位,ds:si指向字符串的首地址
dtoc:        push ax
        push bx
        push cx
        push dx
        push si
        mov bx,0
        dtoc1:        mov cx,10
                call divdw
                inc bx
                add cx,30h
                push cx
                mov cx,dx
                jcxz dtoc2
                jmp short dtoc1
        dtoc2:        mov cx,ax
                jcxz dtoc3
                jmp short dtoc1
        dtoc3:        mov cx,bx
                dtoc4:        pop ax
                        mov ,al
                        inc si
                        loop dtoc4
                mov byte ptr ,0
                pop si
                pop dx
                pop cx
                pop bx
                pop ax
                ret

start:        mov ax,stacksg
        mov ss,ax
        mov sp,64          ;栈顶
        mov ax,datasg
        mov ds,ax
        mov si,0          ;待显示字符串首地址
        mov bx,16          ;指向年份
        mov di,184        ;指向人数
        mov bp,3          ;显示行数
        mov cx,21
        s:        push cx
                mov ax,
                mov ,ax
                mov ax,
                mov ,ax
                mov byte ptr ,0      ;年份字符串后面填0
                mov ax,bp
                mov dh,al          ;3行
                mov dl,25          ;25列
                mov cl,2          ;黑底绿字
                call show_str
                mov ax,          ;总收入低16位
                mov dx,          ;总收入高16位
                call dtoc
                mov ax,bp
                mov dh,al
                mov dl,32
                call show_str
                mov ax,        ;人数
                mov dx,0
                call dtoc
                mov ax,bp
                mov dh,al
                mov dl,42
                call show_str
                mov ax,
                mov dx,
                div word ptr           ;(ax)=人均收入
                mov dx,0
                call dtoc
                mov ax,bp
                mov dh,al
                mov dl,50
                call show_str
                add bx,4
                add di,2
                inc bp
                pop cx
                loop s
       
        mov ax,4c00h
        int 21h
codesg ends
end start
页: [1]
查看完整版本: 课程1.。。