王爽《汇编语言》P211页课程设计
来源:互联网 发布:知名外汇交易商 知乎 编辑:程序博客网 时间:2024/06/02 09:50
本人由于想对语言有个深层次了解,所以就从汇编语言开始学起,以前也学过C语言,但一直学的不深入,在看了王爽老师的《汇编前言》的前言后,深受启发,学习要循序渐进,故决心先对汇编有一定了解后再去深入学习C语言和C++。以下是自己写的程序代码,比较拙劣,呵呵,第一次用汇编写这么长的程序:
assume cs:code
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'
;以上是表示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型数据
data ends
table1 segment
db 21 dup (' ') ;总共21X32个,用来存放转变后的字符数据
table1 ends
table2 segment
db 21 dup ('year sumn ne ?? ') ;用来存放data数据段调整后的数据
table2 ends
stack segment
dw 16 dup (0) ;创建堆栈,用于保存一些寄存器,避免寄存器冲突
stack ends
code segment
start: mov ax,data
mov ds,ax ;ds:[bx+si]指向data段
mov ax,table2
mov es,ax ;es:[bp]指向table2段
mov bx,0
mov si,0
mov bp,0
mov cx,21
s00: mov ax,ds:[bx+si] ;循环21次,把data段中的数据,按照如:‘1975’ 16 3 人均收入 这样的格式存放
mov es:[bp],ax
mov ax,ds:[bx+si+2]
mov es:[bp+2],ax
add bx,84
mov ax,ds:[bx+si]
mov es:[bp+5],ax
mov ax,ds:[bx+si+2]
mov es:[bp+7],ax
mov bx,0
add si,4
add bp,16
loop s00
mov bp,0
mov si,0
mov bx,168
mov cx,21
s11:mov ax,ds:[bx+si]
mov es:[bp+10],ax
mov ax,es:[bp+5]
mov dx,es:[bp+7]
div word ptr es:[bp+10]
mov es:[bp+13],ax
add si,2
add bp,16
loop s11
mov ax,stack ;设置为堆栈
mov ss,ax
mov sp,32
mov ax,table2
mov ds,ax ;ds:[si]指向table2段
mov si,0
mov ax,table1
mov es,ax ;ds:[bp+di]指向table1段
mov di,0
mov bp,0
mov cx,21
re: push cx ;压入cx
mov bx,[si]
mov es:[bp+di],bx
mov bx,[si+2]
mov es:[bp+di+2],bx
add si,5
mov di,14
mov ax,[si]
mov dx,[si+2]
call dtoc ;调用dtoc,把数据转换为字符,以便于显示
add si,5
mov di,23
mov ax,[si]
mov dx,0
call dtoc
mov di,30
add si,3
mov ax,[si]
mov dx,0
call dtoc
mov di,31
mov byte ptr es:[bp+di],0 ;每组数据最后一个字节设置为0,以便于显示时作为结束的判定
add bp,32
mov di,0
add si,3
pop cx ;弹出cx,以便于loop指令的正常运行
loop re
mov ax,table1
mov ds,ax
mov dh,1 ;屏幕显示的行数
mov dl,1 ;屏幕显示的列数
mov bp,0
mov si,0
mov cx,21 ;循环21次
re1: push cx
mov cl,2
call show_str ;调用显示子函数
inc dh
add bp,32
mov si,0
pop cx
loop re1
mov ax,4c00h
int 21h
dtoc: mov cx,10 ;数据转变为字符
call divdw
add cx,30h
mov es:[bp+di],cl
mov cx,ax
add cx,dx
jcxz ok
dec di
jmp short dtoc
ok: ret
divdw: 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
ret
show_str:mov ax,0B800h ;显示子函数
mov es,ax
mov bx,0
mov ax,0
dec dh
mov al,160
mul dh
mov bx,ax
dec dl
mov al,2
mul dl
add bx,ax
mov ax,0
mov al,cl
s1: mov cl,ds:[bp+si]
mov ch,0
jcxz ok1
mov es:[bx],cl
mov es:[bx+1],al
add bx,2
inc si
jmp short s1
ok1:inc dl
inc dh
ret
code ends
end start
一下是debug时显示的图片,由于是用debug里调试的,显示时有一部分数据显示不出来,由于本人目前学的还是不好,不知如何完全显示,网上百度了一下,也不行。呵呵
以上就是我的目前成果,当然缺点还是一大堆,如程序不够精炼,显示结果和王爽老师书上的截图还有点差异,就是除了年代,剩下的数据都是左对齐的,我写的是右对齐,希望高手指正。
- 王爽《汇编语言》P211页课程设计
- 王爽 《汇编语言》课程设计2
- 王爽 <<汇编语言>> 课程设计1
- 王爽 <<汇编语言>> 课程设计2
- 课程设计1 -------------- 王爽 汇编语言
- 王爽《汇编语言》课程设计1
- 王爽《汇编语言》课程设计1
- 汇编语言 王爽 课程设计二
- 《汇编语言》王爽 课程设计1
- 王爽《汇编语言》课程设计1
- 王爽《汇编语言》课程设计2
- 王爽 汇编语言 课程设计2 修正
- 汇编语言(王爽) 课程设计1
- 王爽-汇编语言 课程设计1 汇编源代码
- 王爽《汇编语言》第十章 课程设计1 解答
- 王爽 -- 汇编语言课程设计2一些问题记录
- 王爽《汇编语言》第10章 课程设计1
- 汇编语言 王爽(第三版)课程设计一
- Jquery联动下拉菜单方法1
- VMware虚拟机安装Ubuntu使用share folders共享windows目录的方法
- ASIHTTPRequest和ASIDownloadCache实现本地缓存
- [Ext.Net]与kindeditor集成
- cake
- 王爽《汇编语言》P211页课程设计
- 怎样用ps做闪烁的文字
- HDU 1824 Let's go home (2-SAT判断)
- Ubuntu开机保存屏幕亮度的最有效方法, 无需任何软件
- protel99 format '%X' invalid or incompatible with argume
- C++二维数组&指针
- 蓝桥杯 2011年第二届C语言初赛试题(1)
- 关于 :TCP/IP、Http、Socket的区别
- 策略模式