汇编语言_王爽_简版课程设计1_随笔
0.前言
在整个课程中,我们一共有两个课程设计,这是第一个课程设计的简易版本。所谓简易,即数据不涉及到除法溢出,仅用前9个实验的内容即可完成的课程设计。
1.思路分析
课程设计1是在实验七+实验九所结合的实验。
以下是我们进行处理以后的数据,是不考虑除法溢出的数据。
1 | data segment |
为了实现书中如表格一样的效果,我们需要做以下两步:
- 要将不规则的数据变成
('year summ ne ?? ')
形式储存的数据 - 将
('year summ ne ?? ')
形式的数据显示到屏幕上
1.1 将不规则的数据变成('year summ ne ?? ')
形式储存的数据
此步骤乃实验七的内容,代码详见《汇编语言》王爽 实验7
1.2将('year summ ne ?? ')
形式的数据显示到屏幕上
投屏乃实验九的内容,为总结,此处稍微提及。
投屏:通常情况下,B8000H~B8F9FH中的4000个字节的内容会出现在显示器上,所以我们要向让我们的内容出现在屏幕中,那么就要将数据移动到B8000H开始的这4000个字节中。
通常,一个字符占两个字节,低位字节存储字符的ascii码,高位字节存储字符的属性。
属性字节的格式:7 6 5 4 3 2 1 0
BL R G B I R G B
闪烁 背景RGB 高亮 字体RGB如红底绿字的属性值为:01000010B
显示部分的思路:
首先要明确三点,数据从哪来,数据如何处理,数据到哪去。也就是输入,运算,输出三个过程。
毫无疑问的是,在显示算法的设计中,我们数据都是从已经整理好的
table
中来,最后的数据去想也都是到B8000H
中去运算则有些许不同,在后三个数据显示中说说明。
年份数据的显示:写一个
show_year函数
首先,确立好数据的来源,之后直接将数据复制到B8000H即可
因为在内存中,year本身就是以字符存储,因此运算便是直接将数据复制到B8000H中年总收入的显示:写一个
show_money函数
首先,确立好数据的来源,之后直接将数字数据转换为字符数据
年总收入的存储,我们采用的是数字,存到内存中仍是数字
如何将数字转换为,我们采用short_div函数来实现年员工人数的显示:写一个
show_nfp函数
同年总收入,唯一的区别就是来源与去想稍微有些许不同年平均人均收入的显示:写一个
show_salary函数
同年总收入,唯一的区别就是来源与去想稍微有些许不同将数字装化为字符:写一个
short_div函数
不断的对储存的数据除10取余,依次余数分别为个位数,十位数,百位数,千位数……,每获得一个数,将数值+=30H,因为数字的ascii码是比数值大30H,也就是数字0对应的ascii码实际上为30H。我们+=后的数值放在B8000H段上,即可显示数据这是大概的思路,详细的过程参照源码实现
3.源码实现
masm中标准的三个段:code data stack
再用不同的寄存器去表示不同的数据的位置 (对数据的格式化
处理)
使用不同的名称+ret实现子程序(函数or方法)
使用call调用函数 (对代码块的格式化
处理)
1 | assume cs:code,ds:data,ss:stack |
4.结果显示
5.收获感悟
简易版本的课程设计1,复习了实验7与实验9的内容,使对汇编程序的设计思路有了更深的理解,同时学会了当寄存器冲突时,灵活使用栈来存储值,来避免冲突。
正如在实验7中所说,学到了汇编语言
中对数据的结构化处理的思想(在C语言
中我们也学习了结构体来对相似属性的数据进行储存,在C++/Java
等面向对象的语言中,我们使用类来对相同属性的数据进行分类,结构化)。
在第9章、第10章的学习中,我有学到了汇编语言
中对代码结构化处理的方法(在C/C++
中我们有函数对代码结构化处理,在Java/Python
中我们有方法对代码结构化处理,因此结构化处理代码的思想我们同样不是第一次接触)
8086汇编语言
至此已经学了一大半,语言语法只是一种工具,重要的是人想如何去做,就如mc中,每一个方砖都是工具,最后你想搭建成如何的建筑,还是看人是如何思考。
重温学习汇编语言的目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。