一、实验目的
- 理解程序在访问内存单元时采用的各种寻址方式
- 学会基于字符的ASCII编码,进行大小写转换、简单加密等方法
- 学会用loop指令,结合寻址方式,编制单层和双层循环程序解决问题
二、实验内容过程记录
任务1-字符串加密(I)
编程为datasg段中字符串中的每个字符加密,加密规则是:每个字符的ASCII值加4。加密好的字符写在待加密字符的后面。
assume cs:codesg,ds:datasg
datasg segment
db 'aah, I love you!'
db '................'
datasg ends
codesg segment
start: (写程序)
mov ax,4c00h
int 21h
codesg ends
end start
问题分析(附流程图)
程序:
运行结果:
任务2-字符串加密(II)
编程为datasg中的每个字符串加密,加密的规则是,每行第1个字符ASCII码加1,第2个字符ASCII码加2,依类类推。已知每个字符串固定为16个字符,非空格字符不足16的,后都是空格。加密后的符号替代原字符,就写在原处。
datasg segment
db 'He Li Jian '
db 'Zhai Yi Ming '
db 'Bi Yuan Wei '
db 'Ma Wen Ming '
datasg ends
问题分析(附流程图)
程序:
运行结果:
任务3 - 转圈求和
编每个程序时,要求先画出流程图,程序中应该有足够的注释。
(1)写程序,对给出的8个数,将相邻的数求和(最后写第一个数与最后一个数的和),并把结果写在其后。在下面的示例中,求和的结果为3 5 7 9 11 13 15 9。
datasg segment
dw 1, 2, 3, 4, 5, 6, 7, 8
dw 0,0,0,0,0,0,0,0
datasg ends
提示1:相邻的两数,若前一数用[si]指示,相邻的后面一数则为[si+2]
提示2:前7个和数可以用统一的规则做出,最后一个和数,呃,要回头去找,不妨特殊处理。
(选做)若要求将结果写在提供源数据的位置上,而不是在随后的空间中呢?
问题分析(附流程图
程序:
运行结果:
运行结果:
若要求将结果写在提供源数据的位置上,而不是在随后的空间
运行结果:
任务4 - 人均GDP
下面是2018年内地各省市GDP数据。编制汇编语言程序,求出各省市人均GDP(元)。
2018年内地31省市GDP数据
省市 | 人口(万人) | GDP(万元) | 人均GDP(元) |
安徽 | 6255 | 216329400 | ? |
北京 | 2171 | 215111100 | ? |
福建 | 3911 | 233118000 | ? |
甘肃 | 2626 | 60437100 | ? |
广东 | 11169 | 706352200 | ? |
广西 | 4885 | 128630700 | ? |
贵州 | 3580 | 104013900 | ? |
海南 | 926 | 35469200 | ? |
河北 | 7520 | 252263300 | ? |
河南 | 9559 | 355374000 | ? |
黑龙江 | 3789 | 98595200 | ? |
湖北 | 5902 | 276343500 | ? |
湖南 | 6860 | 253215800 | ? |
吉林 | 2717 | 99576800 | ? |
江苏 | 8029 | 670392800 | ? |
江西 | 4622 | 155925300 | ? |
辽宁 | 4369 | 180123800 | ? |
内蒙古 | 2529 | 123091700 | ? |
宁夏 | 682 | 27846600 | ? |
青海 | 598 | 19265400 | ? |
山东 | 10006 | 596075400 | ? |
山西 | 3702 | 116403300 | ? |
陕西 | 3835 | 168679200 | ? |
上海 | 2418 | 236566900 | ? |
四川 | 8302 | 308535000 | ? |
天津 | 1557 | 146583600 | ? |
西藏 | 337 | 10440000 | ? |
新疆 | 2445 | 85023900 | ? |
云南 | 4801 | 116197600 | ? |
浙江 | 5657 | 397956200 | ? |
重庆 | 3048 | 147733000 | ? |
提示:各省市名(汉字)可以直接在单引号中出现(借机观察汉字的机内码存领教),也可以自行用汉语拼音替代。无论哪种形式,建议等宽处理(短者补空格)。
问题分析(附流程图)
程序:
运行结果:
三、实验总结
记录:
经过本次实验,学会了汇编语言中的双重循环的写法及思路,在进行实验过程中, 在书写循环程序前期出现了较多问题。我首先先写了一层循环,然后再补充第二层这样进行嵌套,我觉得把它类比于C语言的双重for循环来对比学习,从而能使学习变得简单化。还学习了汇编语言中div除法,练习了大位数除法在生活中的使用。
思考:
完成本次任务后感觉本次实验不像之前那样,而是操作性更高,这就要求我们学会更多的知识点去应用,去实践,去思考,考虑问题更加全面,对细节把控要到位。还有刚开始自己写的代码有时可能比较繁琐,但可以写好之后通过与别人的比对,找到别人的思路以及代码表示有何优缺点?想想自己哪些地方可以进行优化?这样我觉得会更加有收获。同时感觉对比起来高级语言来说,汇编确实没有高级语言那样直观易懂,但也感受到了汇编语言的一些魅力,让我对计算机底层工作原理又有了进一步的认知。
感受:
本次实验发现了自己学习过程中存在的一些知识点漏洞,比如除法的商和余数存放的位置的使用,以及变址寄存器等等。对系统层面认识还需完善。再进一步学习中,要养成课前提前预习,并善于总结以此达到高效的记忆,还要多思考多提出问题去解决,还要进行实际操作,才能明白自己的盲点在什么地方。从而更好的理解所学知识的用途。
三、实验总结
记录:
经过本次实验,学会了汇编语言中的双重循环的写法及思路,在进行实验过程中, 在书写循环程序前期出现了较多问题。我首先先写了一层循环,然后再补充第二层这样进行嵌套,我觉得把它类比于C语言的双重for循环来对比学习,从而能使学习变得简单化。还学习了汇编语言中div除法,练习了大位数除法在生活中的使用。
思考:
完成本次任务后感觉本次实验不像之前那样,而是操作性更高,这就要求我们学会更多的知识点去应用,去实践,去思考,考虑问题更加全面,对细节把控要到位。还有刚开始自己写的代码有时可能比较繁琐,但可以写好之后通过与别人的比对,找到别人的思路以及代码表示有何优缺点?想想自己哪些地方可以进行优化?这样我觉得会更加有收获。同时感觉对比起来高级语言来说,汇编确实没有高级语言那样直观易懂,但也感受到了汇编语言的一些魅力,让我对计算机底层工作原理又有了进一步的认知。
感受:
本次实验发现了自己学习过程中存在的一些知识点漏洞,比如除法的商和余数存放的位置的使用,以及变址寄存器等等。对系统层面认识还需完善。再进一步学习中,要养成课前提前预习,并善于总结以此达到高效的记忆,还要多思考多提出问题去解决,还要进行实际操作,才能明白自己的盲点在什么地方。从而更好的理解所学知识的用途。