[021][汇编语言]计算地址连续的ffff:0~ffff:b单元中的数据的和

计算地址连续的 ffff:0~ffff:b 单元中的数据的和,结果存储在 dx 之中

  • 0 到 B 一共是12个内存单元
  • 单个内存单元的数据是字节型数据,是8位,可以表示0~255
  • 12个字节型数据相加,最多是 255x12 = 3060

约束条件

  • 8位数据不能直接加到16位寄存器 (怎么加复习点我)
  • 一个8位寄存器很可能存不下12个8位数据相加

解决方案

  • ① 将内存单元中的 8位数据 赋值到一个 16位寄存器ax
  • ② 再将 ax中的数据 加到 dx寄存器

汇编源代码

assume cs:code
code segment
    mov ax,0ffffH
    mov ds,ax
    mov bx,0

    mov dx,0

    mov cx,12
    s:  mov al,[bx]
        mov ah,0
        add dx,ax
        inc bx
        loop s

        mov ax,4c00H
        int 21H
code ends
end

等价算法描述

初始化:
  (ds) = ffffH
  (bx) = 0
  (dx) = 0
  (cx) =12

循环12次:
  s:  (al) = ((ds)*16+(bx))
  (ah) = 0
  (dx) = (dx) + (ax)
  (bx) = (bx) +1
  loop s      

你可能感兴趣的:([021][汇编语言]计算地址连续的ffff:0~ffff:b单元中的数据的和)