鱼C论坛

 找回密码
 立即注册
查看: 3711|回复: 0

[汇编作业] 课程1.。。

[复制链接]
发表于 2021-5-1 18:39:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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,[si]
                        jcxz show0
                        mov al,[si]
                        mov es:[di],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 [si],al
                        inc si
                        loop dtoc4
                mov byte ptr [si],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,[bx]
                mov [si],ax
                mov ax,[bx+2]
                mov [si+2],ax
                mov byte ptr [si+4],0      ;年份字符串后面填0
                mov ax,bp
                mov dh,al          ;3行
                mov dl,25          ;25列
                mov cl,2          ;黑底绿字
                call show_str
                mov ax,[bx+84]          ;总收入低16位
                mov dx,[bx+86]          ;总收入高16位
                call dtoc
                mov ax,bp
                mov dh,al
                mov dl,32
                call show_str
                mov ax,[di]        ;人数
                mov dx,0
                call dtoc
                mov ax,bp
                mov dh,al
                mov dl,42
                call show_str
                mov ax,[bx+84]
                mov dx,[bx+86]
                div word ptr [di]          ;(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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表