王爽汇编 课程设计1 向显示器的输出正确 自学的 求大牛看看 给点意见 比如设计思路的 或者代码的

ji2feng 2014-10-05 08:50:04
assume cs:code
data segment
db *1975*,*1976*,*1977*,*1978*,*1979*,*1980*,*1981*
db *1982*,*1983*,*1984*,*1985*,*1986*,*1987*,*1988*
db *1989*,*1990*,*1991*,*1992*,*1993*,*1994*,*1995*

dd 16,22,382,1356,2390,8000,16000
dd 24486,50065,97479,140417,197514,345980,590827
dd 803530,1183000,1843000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037
dw 5635,8226,11542,14430,15257,17800
data ends
str segment
db 16 dup(1)
str ends
code segment
start:
mov ax,data
mov es,ax
mov bp,0 ;es:bp指向数据段
mov ax,str
mov ds,ax
mov si,0 ;ds:[si]指向字符串

mov cx,21
mov dl,8
mov dh,2 ;从第2行第8列显示

s:

call copyyear
call copyshru
call copyman
call copyshouru
inc dh
add bp,4
add di,2
loop s
mov ax,4c00h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;复制年份到str段
copyyear:
push es
push bp
push ds
push si
push cx
push dx
mov ax,es:[bp]
mov ds:[si],ax
mov ax,es:[bp+2]
mov ds:[si+2],ax
mov al,0
mov ds:4[si],al ;在年份后添加字符串结束标志0
mov cl,10101001b ;设置显示颜色样式
call show_str
pop dx
pop cx
pop si
pop ds
pop bp
pop es
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;复制收入 并显示
copyshru:
push es
push bp
push ds
push si
push cx
push dx

;si继续指向字符串首地址,覆盖年份
push dx
mov ax,es:84[bp]
mov dx,es:84[bp+2]
call ddtoc
pop dx

add dl,8
mov cl,10101001b ;设置显示颜色样式
call show_str
pop dx
pop cx
pop si
pop ds
pop bp
pop es
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;复制人数 并显示
copyman:
push es
push bp
push ds
push si
push cx
push dx
push dx
mov ax,es:168[di]
mov dx,0
call ddtoc
pop dx
add dl,20
mov cl,10101001b ;设置显示颜色样式
call show_str

pop dx
pop cx
pop si
pop ds
pop bp
pop es
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;计算人均收入
copyshouru:
push es
push bp
push ds
push si
push cx
push dx
push dx
mov ax,es:84[bp]
mov dx,es:84[bp+2]
push cx
mov cx,es:168[di]
div cx ;ax=商
mov dx,0
call ddtoc
pop cx
pop dx

add dl,29
mov cl,10101001b ;设置显示颜色样式
call show_str
pop dx
pop cx
pop si
pop ds
pop bp
pop es
ret




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能 将dword型数据转变为表示十进制数的字符串
;参数 ax=dword型数据低16位 dx=dword型数据的高16位
;cx=10求余数 ds:si指向字符串的首地址
;返回 无
;处理俄的数据是dword型的,除以10有可能会溢出,调用divdw来解决

ddtoc:
push ax
push bx
push cx
push dx
push ds
push si

mov bx,0 ;入栈计数器
dqysh:
mov cx,10 ;除数,求余数
call divdw ;ax=商的低16位 dx=商的高16位 cx=余数
add cx,30h ;转换成字符
push cx ;余数入栈保存
inc bx ;计数器加1
mov cx,0 ;cx清0
add cx,ax
add cx,dx
jcxz dchzhysh ;判断商为0时,退出循环
jmp short dqysh
dchzhysh:
mov cx,bx
dchzhyshu:
pop ds:[si]
inc si
loop dchzhyshu
mov bl,0
mov ds:[si],bl ;在字符串后添加结束标志0
pop si
pop ds
pop dx
pop cx
pop bx
pop ax
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;在指定位置,用指定颜色显示以0结尾的字符串
;dh=行号(0~24) dl=列号(0~79)
;cl=颜色 ds:si指向字符串首地址
;无返回值
show_str:
push es
push ax
push bx
push dx
push di
push cx
push ds
push si

mov ax,0b800h
mov es,ax ;es指向显存
;计算行地址
mov ah,160 ;每行有160个字符
mov al,dh
mul ah
mov bx,ax ;将行地址放入bx中
;计算列地址
add dl,dl
mov dh,0
mov di,dx ;将列地址放入di中
;es:[bx+di]指向显示字符串的位置,行加160,列加2
mov ah,cl ;将颜色送入ah中存放
mov cx,0
str_xh:
mov cl,ds:[si]
jcxz str_fh ;cx为0时子程序返回
mov al,cl
mov es:[bx+di],ax ;将字符和字符的属性送入显存
add di,2 ;指向下一列
inc si ;指向下一个字符
jmp short str_xh ;用jmp进行循环 jcxz的条件满足后跳出循环
str_fh:
pop si
pop ds
pop cx
pop di
pop dx
pop bx
pop ax
pop es
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能 进行不会产生益处的除法运算,被除数为dword型,
;除数为word型,商为dword型
;参数 ax=被除数的低16位
; dx=被除数的高16位
; cx=除数
;返回:dx=商的高16位
; ax=商的低16位
; cx=余数
divdw:
push bx
;计算高16位与除数的商和余数
push ax ;将低16位入栈保存
mov ax,dx
mov dx,0
div cx ;ax=商 dx=余数
mov bx,ax ;将高16位的商存入bx中
;计算(低16位+高16位的余数*65536)/除数
pop ax ;将低16位的值取出
div cx ;ax=商 dx=余数
;整理计算结果
mov cx,dx
mov dx,bx
pop bx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



code ends
end start
...全文
202 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiphoenix 2014-10-07
  • 打赏
  • 举报
回复
程序设计1我也最近才写完,我想问下,你程序设计2有没有开始着手?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧