王爽汇编语言 课程设计1(学习笔记)

结果展示:

在这里插入图片描述

题目要求:

给出代码中的数据段,将数据段中的数据打印到屏幕上,数据包括年份、收入、雇员数、人均收入(需设计代码求出)

思路:

要输出四列数据,而屏幕一行可以显示80个字符,所以我给每列数据分配20列显示列,如上图
在给出的数据段中,除了年份是字符外,其余数据都是整型,无法直接打印在屏幕上,这就需要生成它们对应的字符码
为了打印方便,我先定义了一个table段,并开辟出21*80个内存来存储数据,格式如下:

年份(占20字节) 收入(占20字节) 雇员数(占20字节)平均收入(占19字节)0(1字节)

将求到的数据放入table段,最后一行一行进行打印

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 1680 dup (' ')

table ends

codesg segment
 start:mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax

       mov si,0
	   mov di,0
       mov cx,21

    L1:push cx
       mov cx,2
       
 
    s1:mov ax,[si]
       mov es:[di],ax
       add si,2
       add di,2
	   loop s1

	   add di,76        进行下一行年份的输入
	   pop cx
	   loop L1
	   
	   mov cx,21
	   mov si,21*4
       mov di,20
L2:    mov ax,[si]
	   mov dx,[si+2]
	   call ddtoc
	   add si,4 
	   add di,80    在table段中转到下一行继续存数据
	   loop L2

	   
	   mov cx,21
	   mov si,21*4+21*4
       mov di,40
L3: 
	   mov ax,[si]
	   call dtoc
	   add si,2
	   add di,80
	   loop L3

	   mov bx,0
	   mov cx,21
	   

	L4:mov di,60 
	   mov si,84
	   mov bx,168

	s6:push cx
	   push di
	   mov ax,[si]
	   mov dx,[si+2]
	   div word ptr ds:[bx]
	   call dtoc
	   pop di
	   pop cx
	   add di,80
	   add si,4
	   add bx,2
	   loop s6
	   
	   mov cx,21
	   mov di,79
	   
	   mov ax,0
s7:	   mov es:[di],al
	   add di,80
	   loop s7
	   
	   
	   mov dh,2
       mov dl,0
	   mov ax,table
	   mov ds,ax
	   mov si,0
	   mov di,0
	   mov cx,21
T:	   push cx
       mov dl,0
       mov cl,2
	   call show_str
	   pop cx
	   inc si
	   add dh,1
	   loop T
	   

	   mov ax,4c00h
	   int 21h
	   
ddtoc: push cx           ddtoc子程序功能是将dword类型数据变为十进制的字符串
       push di
	   
	   mov bx,0         统计入栈个数
a:	   mov cx,dx
       jcxz b
x:     call divdw         调用除法溢出的子程序,求的余数(cx)入栈
	   push cx
	   inc bx
	   jmp short a

b:	   mov cx,ax
	   jcxz ok                    判断dx和ax同时为0说明,十进制每一位的数据都取到了
	   jmp short x

ok:    mov cx,bx
r:     pop ax                将入栈的余数出栈,并加30h变为字符
       add ax,30h
       mov es:[di],al
	   inc di
	   loop r
	   
	   pop di
	   pop cx
	   ret


divdw: push bx             解决除法溢出的子程序
	   push si
     
	   mov cx,10
	   mov bx,ax
	   mov ax,dx
	   mov dx,0
	   div cx
	   mov si,ax
	   mov ax,bx
	   div cx
	   mov cx,dx
	   mov dx,si

	   pop si
	   pop bx
	   ret

dtoc:  push bx         将word型数据转变为十进制的字符串
       push cx
	   push di

       mov bx,0
       mov cx,10
s3:	   mov dx,0
	   push cx
	   mov cx,ax
	   jcxz ok1
	   pop cx
	   div cx
	   add dx,30h
	   push dx
	   inc bx
	   jmp short s3
       	   
 ok1:  pop cx
       mov cx,bx
 s4:   pop ax
       mov es:[di],al
	   inc di
	   loop s4
	   
       pop di
	   pop cx
	   pop bx
       ret
	
show_str: push dx           打印字符串
		  push cx
		  
          mov ax,0b800h
          mov es,ax
		  mov al,160
		  mul dh
		  mov bx,ax
		  mov al,2
		  mul dl
		  mov di,ax
		  mov ah,cl
		  mov ch,0
s:		  mov cl,[si]
		  jcxz ok2
		  mov es:[bx+di],cl
		  mov es:[bx+di+1],ah
		  add di,2
		  inc si
		  jmp short s


ok2:          
		  pop cx
          pop dx
          ret	
	   
	   

codesg ends
end start
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值