王爽《汇编语言》课程设计1

原创 2018年04月17日 11:39:25
assume cs:codesg
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'
 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
 dw 11542,14430,15257,17800
data ends
table segment
 db 21 dup ('year summ ne ?? ')
table ends
string segment
 db 21 dup ('                         ',0)       ;该段用来放要显示内容的ascll码,以0结束,以便判断该行显示结束,每行26字节
string ends
codesg segment
start:mov ax,data                                ;这是实验七的中的过程,将原始数据放到table中,并求人均收入
      mov ds,ax
      mov ax,table
      mov es,ax
      mov cx,21
      mov bx,0
      mov di,0
      mov bp,0




    s:mov si,0
      mov ax,ds:[si+bp]
      mov es:[di],ax
      mov ax,ds:[si+2+bp]
      mov es:[di+2],ax


      mov si,84
      mov ax,ds:[si+bp]
      mov es:[5+di],ax
      mov ax,ds:[si+2+bp]
      mov es:[7+di],ax


      mov si,168
      mov ax,ds:[si+bx]
      mov es:[10+di],ax


      mov ax,es:[di+5]
      mov dx,es:[di+7]
      div word ptr es:[di+10]
      mov es:[di+13],ax


      add bp,4
      add bx,2
      add di,16
      loop s
      
      mov ax,table                        ;下面开始转移table中的数据到string中(全部转换为对应的ascll码)
      mov ds,ax
      mov bx,0
      mov si,0
      mov ax,string                       ;重新定义ds和es
      mov es,ax
      mov bp,0
      mov di,0
      
      mov cx,21
   s1:mov dx,ds:[bx+si]                     ;将年份转移
      mov es:[bp+di],dx
      mov dx,ds:[bx+si+2]
      mov es:[bp+di+2],dx
      add bx,16                              ;table每行16个字节,所以加16
      add bp,26                              ;string每行26个字节(空格字符多一些),加26
      loop s1 
     
      mov bx,0
      mov si,5
      mov bp,0
      mov di,6                                ;注意在table中,我们数据间一个空格,string我用了两个空格
      mov cx,21
   s2:mov ax,ds:[bx+si]                       ;将收入转移
      mov dx,ds:[bx+si+2]
      call dtoc                               ;用dtoc(修改过,不会产生溢出的除法)将数据转换为ascll码并放入string段中
      add bx,16
      add bp,26
      loop s2


      mov bx,0
      mov si,10
      mov bp,0
      mov di,15
      mov cx,21
   s3:mov ax,ds:[bx+si]                       ;将人数转移
      mov dx,0                                ;这里人数是16位数据,直接放到ax中,所以高位dx中补0
      call dtoc
      add bx,16
      add bp,26
      loop s3


      mov bx,0
      mov si,13
      mov bp,0
      mov di,22
      mov cx,21
   s4:mov ax,ds:[bx+si]                     ;将人均收入转移
      mov dx,0
      call dtoc
      add bx,16
      add bp,26
      loop s4


      mov ax,string                        ;下面将string段数据显示到屏幕上
      mov ds,ax
      mov dh,0
      mov dl,0
      mov cl,2
      mov bl,cl                             ;由于需要用cx做循环计数器,所以暂存显示属性
      mov cx,21                            ;循环次数
      mov si,0
   sx:call showstr
      add si,26
      inc dh                                   ;行数加一
      loop sx
     
showstr:push ax      
        push bx
        push cx
	push dx
        push di
        push es
	push si
	mov ax,0b800h                                ;显存段地址
        mov es,ax 


	mov al,160
        mul dh
        mov di,ax
        mov al,2
        mul dl
        add di,ax                       ;di中放显存首地址
        
	mov cl,bl                         ;显示属性还原
        mov ah,cl         
    str:mov cl,ds:[si]   
        mov ch,0        
        jcxz ok           
        mov ch,ah        
        mov es:[di],cx 
        inc si           
        add di,2         
      jmp short str      
     ok:pop si
        pop es
        pop di
	pop dx
        pop cx
        pop bx
        pop ax
        ret
      
      mov ax,4c00h
      int 21h


 dtoc:push ax
      push bx
      push cx
      push dx
      push di

                                     ;这里用到的子程序是除法不会产生溢出的子程序,没有专门调用子程序,直接编写了源程序
       mov bx,0                      ;bx做计数器,记录转换的位数
 dtoc1:push bx                       ;将”位数计数器”暂存                      
       push ax
       mov ax,dx
       mov dx,0
       mov cx,10
       div cx
       mov bx,ax                   ;高位暂存到bx
       pop ax
       div cx
       mov cx,dx                  ;余数放到cx中
       mov dx,bx                  ;高位放到dx        
       add cx,30h                 ;转换成ascll码
       pop bx                        ;恢复位数计数器         
       push cx                      ;将ascll码入栈暂存
       inc bx                          ;转换的位数+1
       add ax,dx                    ;我们将商的高位低位加到一起,目的是判断商是否为0,以确定所有位数转换完成
       mov cx,ax                    ;将“商”放到CX
       jcxz dok1                    ;判断cx是否为0
       jmp short dtoc1
        
   dok1:mov cx,bx                ;将“位数计数器”值放到循环计数器中
    ds1:pop dx                       ;将各位的ascll码出栈
        mov es:[bp+di],dl           ;将ascll码转移到string段
	inc di                             
	loop ds1
        pop di
        pop dx
	pop cx
	pop bx
	pop ax
        ret


codesg ends
end start


汇编语言 王爽(第三版)课程设计一

assume cs:codedata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' ...
  • love_jing_forever
  • love_jing_forever
  • 2016-11-24 11:03:40
  • 1072

《汇编语言(第3版)》王爽 课程设计2

本次课程设计的任务是编写一个可以自行启动的计算机,不需要在现有的操作系统环境中运行的程序。 该程序功能如下: (1 )、列出功能选项,让用户通过键盘进行选择,界面如下: 1)、reset  pc  ;...
  • lipanxu
  • lipanxu
  • 2017-01-02 12:28:15
  • 1143

王爽《汇编语言》第十章 课程设计1 解答

2小时code,2小时调试,终于把这个课程设计搞定了,主要是程序大了,要调试起来不好弄,幸亏有Debug的G和T 指令,否则都没法活了。这个题目实际是前几个题目代码的整合,难点还是在于如何计算显示的行...
  • dylgsy
  • dylgsy
  • 2009-03-19 16:31:00
  • 7209

王爽《汇编语言》课程设计二续(包含软盘操作)

之前完成了课程设计的第一部分(CMOS的读取与修改等):王爽《汇编语言》课程设计二(只包含CMOS RAM操作不包含软盘操作) 但是由于没有软盘做不了第二部分(脱离操作系统引导程序),今天我们完善...
  • Apollon_krj
  • Apollon_krj
  • 2017-05-14 20:16:43
  • 563

王爽 汇编语言 课程设计1 独立完成

王爽 汇编语言 课程设计1 独立完成
  • huguanglinux
  • huguanglinux
  • 2016-12-18 19:09:45
  • 235

王爽《汇编语言》学习笔记----实验1

查看CPU和内存,用机器指令和汇编指令编程 ---------------------------------------------------------------------------...
  • a527606652
  • a527606652
  • 2013-01-28 17:27:34
  • 1324

王爽《汇编语言》第二版课程设计2,我的答案

  • 2010年03月01日 21:26
  • 10KB
  • 下载

王爽 汇编 课程设计1

assume cs:code;年份year segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1...
  • u010452022
  • u010452022
  • 2015-10-28 15:25:55
  • 568

王爽《汇编语言》检测点1.1详解

(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192...
  • qq_29134495
  • qq_29134495
  • 2016-06-13 23:33:12
  • 1078

王爽《汇编语言》答案 检测点3.2

1.mov ax,2000h    mov ss,ax    mov sp,fh2. mov ax,1000h    mov ss,ax   mov sp,fh
  • yj1981
  • yj1981
  • 2006-03-30 20:01:00
  • 1438
收藏助手
不良信息举报
您举报文章:王爽《汇编语言》课程设计1
举报原因:
原因补充:

(最多只允许输入30个字)