现在的位置: 首页 > 生活点滴 > 正文

用汇编写程序要人命啊!!!太尼玛痛苦了

2013年12月28日 生活点滴 ⁄ 共 2152字 ⁄ 字号 用汇编写程序要人命啊!!!太尼玛痛苦了已关闭评论 ⁄ 阅读 2,428 次

最近突然想系统的学学汇编,看网上推荐王爽老师的《汇编语言》这本书不错,遂在网上DOWN了一本,刚开始看前几章内容看的挺快,挺简单,慢慢的速度就慢了下来,主要是书上有一些课后题需要做,根据学习的进度,课后题越来越复杂,用到的知识也越来越综合(我是把课后题都做了一遍);昨天学完了第十章,后面有个课程设计一,看着就挺复杂,难倒是不难,就是用到的东西比较多:

题目如下:

问题描述1

问题描述1

问题描述2

问题描述2

问题描述3

问题描述3

正好今天是周六,闲来无事,决定搞定它,经过一番痛苦的分析及调试之后,终于出现了题目要求的效果:

效果图

效果图

汇编这玩意编个小程序还能玩玩,编个稍微大点的,折磨死人啊,下面贴一下代码:(masm编译)


assume cs:code,ds:data,ss:stack

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,2795000,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

dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239

dw 260,304,333

 dd 16 dup (0)

data ends

stack segment

 dw 64 dup (0)

stack ends

code segment

 main: mov ax,data
 mov ds,ax

mov ax,stack
 mov ss,ax
 mov sp,80h

 mov ax,0b800h
 mov es,ax

mov di,168

 mov cx,21
 mov dl,3 ;行
 mov dh,20

 mov di,168
 mov bp,0
 main_s:
 push dx
 push cx
 mov cl,24h
 mov si,bp
 mov ch,4
 call show_str

 add si,84
 mov ax,[si]
 push dx
 mov dx,[si].2
 call dtoc
 pop dx
 mov ch,7
 mov cl,24h
 mov dh,30
 call show_str

 mov si,di
 mov ax,[si]
 push dx
 mov dx,0
 call dtoc
 pop dx
 mov ch,5
 mov cl,24h
 mov dh,43
 call show_str

 mov si,di
 add si,42
 mov ax,[si]
 push dx
 mov dx,0
 call dtoc
 pop dx
 mov ch,3
 mov cl,24h
 mov dh,55
 call show_str

 add di,2
 add bp,4
 pop cx
 pop dx
 inc dx
 loop main_s

 mov ax,4c00h
 int 21h

 dtoc:
 push bx
 push cx

mov si,260
 dtoc_s:

 mov cx,10
 call divdw

add cx,30h
 mov [si],cl

 mov cx,ax
 jcxz dtoc_tmp
 dtoc_con:
 dec si
 jmp short dtoc_s

 dtoc_tmp:
 mov cx,dx
 jcxz dtoc_ok
 jmp short dtoc_con

 dtoc_ok:

pop cx
 pop bx

 ret

 divdw:
 push bx
 push si

 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

 show_str: ; dl,行 dh,列 cl,颜色 si,数据地址 ch,数据个数
 push ax
 push di
 push bx
 push si
 push cx

 mov di,0

 mov al,dl
 mov bl,160
 mul bl
 mov bx,ax
 mov al,dh
 mov ch,2
 mul ch
 add bx,ax
 pop cx

 mov ah,cl
 mov cl,ch
 mov ch,0

show_str_s:
 mov al,ds:[si]
 mov es:[bx+di],ax

 add di,2
 inc si

loop show_str_s

 pop si
 pop bx
 pop di
 pop ax
 ret

 code ends
end main

×