找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1730|回复: 0

汇编作业 课程设计

[复制链接]
  • TA的每日心情
    开心
    2018-10-31 14:26
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    78

    主题

    109

    回帖

    1019

    积分

    高级会员

    积分
    1019

    猴年

    龙龙实名认证 发表于 2015-6-22 03:11:37 | 显示全部楼层 |阅读模式
      
      assume cs:codesg, ds:data, es:data2
      data segment
      db 32 dup(20H)
      data ends
      data2 segment
      ; 年份
      db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
      db '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
      db '1991', '1992', '1993', '1994', '1995'
      ; 收入
      dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479
      dd 140417,197514, 345980, 590827, 803530, 1183000, 1843000
      dd 2759000, 3753000, 4649000, 5937000
      ; 雇员数
      dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793
      dw 4037, 5635, 8226, 11542, 14430, 15257, 17800
      data2 ends
      codesg segment
      start:
      mov ax, data
      mov ds, ax
      mov ax, data2
      mov es, ax
      mov cx, 21
      mov bp, 0   ; 年份的首地址
      mov bx, 54H ; 收入的首地址
      mov di, 0a8H  ; 雇员数的首地址
      mov dh, 4   ; 从第4行开始逐行显示表格
      mov dl, 0   ; 从第0列显示每行信息
      s:
      push cx
      push dx
      mov si, 0   ; 字符串的首地址
      ; 复制年份
      mov ax, es:[bp]
      mov [si], ax
      mov ax, es:2[bp]
      mov 2[si], ax
      add si, 9   ; 9列显示年份
      ; 复制收入
      mov ax, es:[bx]
      ; 收入的低16位
      mov dx, es:2[bx]
      ; 收入的高16位
      call dtoc
      add si, 9    ; 9列显示收入
      ; 复制雇员数
      mov ax, es:[di]
      mov dx, 0
      call dtoc
      add si, 9    ; 9列显示雇员数
      ; 复制人均收入
      mov ax, es:[bx]
      ; 收入的低16位
      mov dx, es:2[bx]
      ; 收入的高16位
      div word ptr es:[di]
      mov dx, 0
      call dtoc
      mov byte ptr 3[si], 0 ; 字符串结束标志设为0
      pop dx
      mov cl, 2     ; 字符显示为绿色
      call show_str
      inc dh      ; 行数+1
      add bp, 4     ; 下一个年份
      add bx, 4     ; 下一个收入
      add di, 2     ; 下一个雇员数
      pop cx
      loop s
      mov ax, 4c00H
      int 21H
      ; 子程序dtoc
      dtoc:
      push bx
      push cx
      push si
      mov bx, 0
      s00:
      mov cx, ax
      jcxz ok
      mov cx, 10
      call divdw
      add cx, 30H   ; 余数转换为ASCII
      push cx   ; 余数入栈
      inc bx    ; 数字位数+1
      jmp short s00
      ok:
      mov cx, bx
      c2m:
      pop bx
      mov [si], bl
      inc si
      loop c2m
      pop si
      pop cx
      pop bx
      ret
      ; 子程序divdw
      divdw:
      push bx
      mov bx, ax  ; 低16位L暂时存在bx
      mov ax, dx  ; 高16位H送到ax
      mov dx, 0
      div cx    ; H/N
      push ax   ; int(H/N)入栈
      mov ax, bx
      div cx    ; [rem(H/N)*65536+L]/N
      mov cx, dx  ; 余数送到cx
      pop dx    ; int(H/N)出栈
      pop bx
      ret
      ; 子程序show_str
      show_str:
      push ax
      push bx
      push bp
      push cx
      push si
      push di
      push es
      mov bl, cl    ; 字体颜色存在bl中
      mov ax, 0b800H
      mov es, ax    ; 显示缓冲区的段地址存在es
      mov ax, 0a0H
      mul dh
      mov bp, ax    ; 将第n行的首地址存在bp
      mov ax, 2
      mul dl
      mov di, ax    ; 将第n列存在di
      mov si, 0
      ctom:
      mov ch, 0
      mov cl, [si]
      jcxz exit
      mov es:[bp][di], cl
      inc di
      mov es:[bp][di], bl
      inc si
      inc di
      jmp short ctom
      exit:
      pop es
      pop di
      pop si
      pop cx
      pop bp
      pop bx
      pop ax
      ret
      codesg ends
      end start

    一个也看不懂!!

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

    本版积分规则

    QQ|手机版|小黑屋|虫虫联盟 ( 备案号:蜀ICP备15018121号-1 )

    GMT+8, 2024-11-21 20:59 , Processed in 0.331187 second(s), 26 queries .

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

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