一次汇编语言练习
1、首先需要确认代码段地址,方便执行。
2、在程序的开始,应确认数据段的位置,此时应使用寄存器将地址送入ds中。
3、确认地址后开始循环,设置计数器cx为100(十进制),其十六进制为64H。
4、设置初始偏移地址bx=0H,使用汇编指令mov ds:[bx],cl
将64H写入内存ds:[0]中。这里的cl是cx的低位字节。这是由于100在十六进制中为64H,cx的值应为0064H,并且此后递减,所以只需要mov cl。
5、进行loop循环
6、循环结束。此时偏移地址bx=64H,指向的内存地址中的数据为00H。
7、dec bx,bx自减,此时内存地址的数据为01H。
8、设置计数器cx为100,每过一次循环,cx-1。
9、进行倒序的循环,每一次都将内存地址的数据(1个字节)送入ax的低位字节al,同时设置高位字节为0H。完成之后,存储和的寄存器dx与ax进行相加(因为最终的和是16位的,所以需要16位寄存器存储)。第一次循环后,bx自减,进入下一次循环,在数学上的表示为1+2+3+…+100,最后bx值应为0H。
10、结束用户程序
具体代码如下
assume cs:code
code segment
mov ax,2000H
mov ds,ax
mov bx,0
mov cx,100
s: mov ds:[bx],cl
inc bx
loop s
dec bx
mov cx,100
s1: mov al,ds:[bx]
mov ah,0
add dx,ax
dec bx
loop s1
mov ax,4c00h
int 21h
code ends
end
masm.exe test.asm
link test.obj
debug test.exe
进入调试程序
g 000D
如上图所示,将64H写入了内存单元ds:[0]中,此时偏移为0
t
此后偏移地址+1
p
不断循环,直到循环终止。
d ds:0
此时偏移地址为64H,指向的内容是0H,为确保循环,需要让偏移地址减1(也可以设置cx=101)。
此时dx为64H,即十进制的100。
最终dx=13BA,即十进制的100。