汇编网首页登录博客注册
fpamc的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2012-05-02 19:36] 课程设计1

图片载入中
assume cs:code,ds:data,es:table
table 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'
  ;以上是表示21年的21个字符串
  
  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  ;以上是表示21年公司总收入的21个dword型数据
  
  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  dw 11542,14430,15257,17800
  ;以上是表示21年公司雇员人数的21个word型数据
table ends

data segment
  db 32 dup (0)                  ;设置数据暂存库
data ends

code segment
start:  mov ax,table
        mov es,ax
        mov ax,data
        mov ds,ax
        mov si,0
        mov di,0
     mov bx,0
        mov cx,21
        ;以上为初始化各寄存器数据
  
     mov dh,3                  ;设置行数
     mov dl,25                 ;设置列数
  
a:      push cx                   ;将行循环次数入栈
        push dx                   ;将行列设置压栈,这两个寄存器下面将用到
  
        mov ax,es:[bx]
        mov [si],ax
     add si,2
     mov ax,es:[bx].2
        mov [si],ax               ;将年份送入data段中
     add si,6
  
     mov ax,es:[bx].84
     mov dx,es:[bx].86
     call dtoc                 ;将公司收入转换成10进制形式,同时存放到data段中
     add si,10
  
     mov dx,0                  ;高位清零
     mov ax,es:[di].168
     call dtoc                 ;将公司人数转换成10进制形式,同时存放在data段中
     add si,6
  
     mov ax,es:[bx].84
     mov dx,es:[bx].86
     div word ptr es:[di].168  ;将人均收入计算出来
     mov dx,0                  ;高位清零
     call dtoc                 ;将人均收入转换成10进制形式,同时放在data段中
  
     mov si,0                  ;设置字符首地址指向ds:si
  
     mov cx,29                 ;设置字符检测次数
replace:push cx                   ;存储次数,为检测字符提供寄存器
        mov cl,[si]               ;将字符放到cl中
     jcxz a0                   ;当检测到0时,跳转到a0处
;设立检测字符替换功能是为了给show_str子程序的检测零,结束功能正常使用

scrn:   inc si                    ;指向下一个字符
        pop cx                    ;恢复检测次数
     loop replace              ;转移到replace处,循环检测替换
     mov byte ptr [si],0       ;设置结尾符
     mov si,0                  ;ds:si指向字符首地址
     pop dx                    ;将行列设置出栈
     mov cl,2                  ;设置字符属性
     call show_str             ;调用show_str子程序,将data段字符放到显存
     add di,2                  ;设置word型数据指向下一个字符串
     add bx,4                  ;设置dword型数据指向下一个字符串
     add dh,1                  ;进入下一行
     pop cx                    ;还原行循环次数
     loop a                    ;当cx不为零时转移到a处,进行下一行的处理。反之向下结束
  
     mov ah,7
     int 21h
     mov ax,4c00h
     int 21h
  
a0:     mov al,20h                ;将空格对应的数据放到al中
        mov [si],al               ;将al中的数据放到(ds:si)中
     jmp scrn                  ;继续回到检测
评论次数(3)  |  浏览次数(213)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2012-05-02 20:42  ]

a0:     mov al,20h                ;将空格对应的数据放到al中 
        mov [si],al               ;将al中的数据放到(ds:si)中 
     jmp scrn  

后面的这些代码不够标准。

[  tomato   发表于  2012-05-02 20:45  ]

要么是主程序,要么是子程序,应该互相是独立的。

[  fpamc   发表于  2012-05-02 21:14  ]

啊,明白了

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码