汇编程序:转圈求和

简介: 转圈求和  (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,0datasg ends 提示1:相邻的

转圈求和

  (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个和数可以用统一的规则做出,最后一个和数,呃,转圈回去了,不妨特殊处理。

[参考解答]

assume cs:codesg,ds:datasg
datasg segment
      dw 1, 2, 3, 4, 5, 6, 7, 8
      dw 0,0,0,0,0,0,0,0
datasg ends
codesg segment
start: mov ax, datasg
       mov ds, ax
       mov si, 0      ;源数据地址
       mov di, 16     ;结果写入地址
       mov cx, 7      ;先处理前7轮
    s: mov ax, [si]   ;相邻数中第1个
       add ax, [si+2] ;加上相邻的后一个数
       mov [di], ax   ;写入结果
       add si, 2
       add di, 2
       loop s

       mov ax, [si]   ;最后一个数
       add ax, ds:[0] ;加上第一个数,这儿的ds:不可省去,原因找课程前面讲过的内容
       mov [di], ax   ;作为最后一个和

       mov ax,4c00h
       int 21h
codesg ends
end start

  (2)若要求将结果写在提供源数据的位置上,而不是在随后的空间中呢?
[参考解答]

assume cs:codesg,ds:datasg
datasg segment
      dw 1, 2, 3, 4, 5, 6, 7, 8
datasg ends
codesg segment
start: mov ax, datasg
       mov ds, ax
       mov si, 0      ;源数据地址
       mov cx, 7      ;先处理前7轮
       mov dx, [si]   ;关键:把第一个数暂存起来,因为这个位置上,很快要被写入求和结果了
    s: mov ax, [si]   ;相邻数中第1个
       add ax, [si+2] ;加上相邻的后一个数
       mov [si], ax   ;写入结果
       add si, 2
       loop s

       mov ax, [si]   ;最后一个数
       add ax, dx     ;加上提前暂存的第一个数
       mov [si], ax   ;存入最后一个和

       mov ax,4c00h
       int 21h
codesg ends
end start

讨论:第一个数据需要被暂存下来,本程序中用了寄存器dx,还可用其他哪些方案?试着实现一下,很好玩嘞!

目录
相关文章
|
7月前
第7章 符号计算——7.5 符号函数的操作
第7章 符号计算——7.5 符号函数的操作
|
5月前
|
C语言
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
47 0
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
|
9月前
学C的第十三天【应用多文件的形式实现 三子棋 程序(重点);练习:1. 打印9*9乘法口诀表、2. 求10个整数中的最大值、3. 分数加减交叉计算、4. 数一下 1到 100 的整数中出现了多少个9】
9.数组的应用实例1:三子棋(综合以前学习的知识) 三子棋的实现:(重点都在注释中) 1. 游戏不退出,继续玩下一把(循环) 2. 应用多文件的形式写代码
|
11月前
labview程序结构for循环while循环n层叠平铺定时顺序结构求和总和平方和根
labview程序结构for循环while循环n层叠平铺定时顺序结构求和总和平方和根
119 0
|
算法
算法练习题(六)——Z字型打印矩阵
算法练习题(六)——Z字型打印矩阵
82 0
UPC-趾压板矩阵(强行找规律)
UPC-趾压板矩阵(强行找规律)
74 0
UPC-趾压板矩阵(强行找规律)
(C语言)玩转for循环(利用for循环打印多种图形)利用指针操作数组以及多组输入去最大最小值之后求其平均值
(C语言)玩转for循环(利用for循环打印多种图形)利用指针操作数组以及多组输入去最大最小值之后求其平均值
(C语言)经典例题之特殊整数求和与方形图案
(C语言)经典例题之特殊整数求和与方形图案
(C语言)经典例题之特殊整数求和与方形图案
|
存储 Java C语言
看看谁还不会用【ARM汇编】求最大值
看看谁还不会用【ARM汇编】求最大值
273 0
看看谁还不会用【ARM汇编】求最大值

热门文章

最新文章