使用 DEBUG 的前 5 个数字的平方和 - DOSBOX 中的汇编编程

sum of the squares of the first 5 numbers using DEBUG - Assembly programming in DOSBOX

请帮忙,我需要在 DOSBOX 中使用 DEBUG - 汇编编程求出前 5 个数字的平方和。这是一个 2^2:

的例子
  -a 100 </i> 
       15BC:0100 mov ax,1 
       15BC:0103 mov bx,2 ; Base Number 
       15BC:0106 mov cx,2 ; Exponent 
       15BC:0109 ;bucle 109: 
       15BC:0109 mov dx,0  
       15BC:010C mul bx 
       15BC:010E loop 109  
       15BC:0110 int 20  
       15BC:0112 
       -g 110 

指令mul bxax的内容(总是)乘以bx寄存器(参数)的内容。因为是 16 位寄存器,结果最多可以有 32 位。该结果的低 16 位放在 ax 中,高 16 位放在 dx 中。所以你不必在mul之前清除dx。只有 div.

才需要

计算 ax = 3² 的代码(通常 ax = bxcx)将是:

    mov  ax, 1
    mov  bx, 3  ; Base Number (that is multiplied by itself cx plus one times)
    mov  cx, 2  ; Exponent (how often the multiplication should be repeated)
expLoop:
    mul  bx
    loop expLoop

如果只计算平方,就不需要循环了,代码也可以简化:

    mov  ax, 3 ; Base Number (that is multiplied by itself one time)
    mul  ax

这将计算(一般来说ax²)。请注意,这里不再使用 bxcx

正如 Michael 已经提到的,如果你想得到平方和,你必须在这之后对你的结果求和。因为 cx 不再使用,它​​可以与 loop 一起使用来遍历所有要平方的数字。 bx 可用于存储平方和:

    xor  bx, bx  ; Sum is initialised to zero
    mov  cx, 5   ; Iterate from 5 down to 1
iterate:
    mov  ax, cx
    mul  cx      ; Calculate the square of the acutal number
    add  bx, ax  ; Sum up the squares in bx
    loop iterate