没有使用循环的汇编代码,计算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
执行结果:
加载内存中并查看汇编代码
执行到指定行
12个内存单元相加的结果
ffff:0~ffff:b在内存单元中的值
0x0014 + 0x0083 + 0x007f + 0x0000 + 0x0074 + 0x000e + 0x0053 + 0x0050 + 0x0052 + 0x00ff + 0x0076 = 0x046A
编译并链接使用loop循环代码并跟踪
编辑ASM源码文件
编译链接
汇编调试
计算结果
退出 程序执行