没有使用循环的汇编代码,计算ffff:0-ffff:b的累加之和

assume cs:code 表示code段与CS寄存关联

code segment  表示段开始  ,code ends表示段结束,end表示汇编程序结束

  mov ax,0ffffh     表示将ffffh送入ax寄存器
  mov ds,ax         表示将ax寄存器值送入ds寄存器
   mov dx,0          表示将0送入dx寄存器

     每次累加一个单元了数据

     mov al,ds:[0]   表示ds:0内存单元字节送入al寄存器
     mov ah,0        表示al寄存器重置为0
     mov dx,ax      表示ax寄存器内容送入dx寄存器 

assume cs:code
code segment
     mov ax,0ffffh
     mov ds,ax
     mov dx,0

     mov al,ds:[0]
     mov ah,0
     mov dx,ax

     mov al,ds:[1]
     mov ah,0
     mov dx,ax

     mov al,ds:[2]
     mov ah,0
     mov dx,ax

     mov al,ds:[3]
     mov ah,0
     mov dx,ax

     mov al,ds:[4]
     mov ah,0
     mov dx,ax

     mov al,ds:[5]
     mov ah,0
     mov dx,ax

     mov al,ds:[6]
     mov ah,0
     mov dx,ax

     mov al,ds:[7]
     mov ah,0
     mov dx,ax

     mov al,ds:[8]
     mov ah,0
     mov dx,ax

     mov al,ds:[9]
     mov ah,0
     mov dx,ax

     mov al,ds:[0ah]
     mov ah,0
     mov dx,ax

     mov al,ds:[0bh]
     mov ah,0
     mov dx,ax

     mov ax,4c00h
     int 21h
    

code ends
end

下面是使用循环的汇编代码:

明显,使用Loop循环后的代码要比没使用Loop的代码要简短

mov cx,12  表示循环12次

循环代码块 

  s:   mov al,ds:[bx]   //每次循环后指向下一个内存单元
       mov ah,0
       mov dx,ax   //数据累加
       inc bx    表示每次循环后 bx值自增1  
       loop s

assume cs:code
code segment
       mov ax,0ffffh
       mov ds,ax
       mov dx,0

       mov bx,0

       mov cx,12

  s:   mov al,ds:[bx]
       mov ah,0
       mov dx,ax
       inc bx 
       loop s

     mov ax,4c00h
     int 21h
    

code ends
end

执行结果:

加载内存中并查看汇编代码 

汇编重复计算之使用循环与不循环使用区别_算法

执行到指定行

汇编重复计算之使用循环与不循环使用区别_数据_02

 

汇编重复计算之使用循环与不循环使用区别_算法_03

 

12个内存单元相加的结果

汇编重复计算之使用循环与不循环使用区别_寄存器_04

 

ffff:0~ffff:b在内存单元中的值 

 

0x0014 + 0x0083 + 0x007f + 0x0000 + 0x0074 + 0x000e + 0x0053 + 0x0050 + 0x0052 + 0x00ff + 0x0076 =  0x046A

汇编重复计算之使用循环与不循环使用区别_数据_05

 

编译并链接使用loop循环代码并跟踪

编辑ASM源码文件

汇编重复计算之使用循环与不循环使用区别_数据_06

 编译链接

汇编重复计算之使用循环与不循环使用区别_数据_07

 汇编调试

汇编重复计算之使用循环与不循环使用区别_寄存器_08

 计算结果 

汇编重复计算之使用循环与不循环使用区别_寄存器_09

退出 程序执行 

汇编重复计算之使用循环与不循环使用区别_循环_10