汇编实验四 字符处理及循环程序

文章讲述了通过一系列实验,学习汇编语言中的寻址方式、ASCII编码、字符串加密、循环结构(包括单层和双层),以及如何运用div除法。实验强调了实践操作、问题解决和代码优化的重要性,以及从底层理解计算机的工作原理。
摘要由CSDN通过智能技术生成

一、实验目的

  1. 理解程序在访问内存单元时采用的各种寻址方式
  2. 学会基于字符的ASCII编码,进行大小写转换、简单加密等方法
  3. 学会用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除法,练习了大位数除法在生活中的使用。

思考:

完成本次任务后感觉本次实验不像之前那样,而是操作性更高,这就要求我们学会更多的知识点去应用,去实践,去思考,考虑问题更加全面,对细节把控要到位。还有刚开始自己写的代码有时可能比较繁琐,但可以写好之后通过与别人的比对,找到别人的思路以及代码表示有何优缺点?想想自己哪些地方可以进行优化?这样我觉得会更加有收获。同时感觉对比起来高级语言来说,汇编确实没有高级语言那样直观易懂,但也感受到了汇编语言的一些魅力,让我对计算机底层工作原理又有了进一步的认知。

感受:

本次实验发现了自己学习过程中存在的一些知识点漏洞,比如除法的商和余数存放的位置的使用,以及变址寄存器等等。对系统层面认识还需完善。再进一步学习中,要养成课前提前预习,并善于总结以此达到高效的记忆,还要多思考多提出问题去解决,还要进行实际操作,才能明白自己的盲点在什么地方。从而更好的理解所学知识的用途。

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀桃李不言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值