给起始地址3000H:0A00H处开始的连续20个字节置1怎么写呢
MOV AX, 3000H
MOV ES, AX
MOV DI, 0A00H
MOV CX, 20
MOV AL, 01H
REP STOSB
可以使用汇编语言的指令来实现给起始地址3000H:0A00H处开始的连续20个字节置1。假设使用的是x86系列处理器,可以使用以下汇编代码实现:
MOV SI, 0A00H ; 将起始地址存放到SI寄存器中
MOV CX, 20 ; 将要置1的字节数存放到CX寄存器中
MOV AL, 01H ; 将要写入内存的值存放到AL寄存器中
REP STOSB ; 重复将AL寄存器中的值写入SI寄存器指向的内存地址,共写入CX个字节
解释一下上面的汇编代码:
第一条指令将起始地址0A00H存放到SI寄存器中,SI寄存器是一个16位寄存器,可以存放内存地址。
第二条指令将要置1的字节数20存放到CX寄存器中,CX寄存器也是一个16位寄存器,可以存放计数器的值。
第三条指令将要写入内存的值01H存放到AL寄存器中,AL寄存器是一个8位寄存器,可以存放一个字节的值。
第四条指令是一个重复指令,它会将AL寄存器中的值写入SI寄存器指向的内存地址,然后将SI寄存器的值加上1,将CX寄存器的值减去1,重复执行,直到CX寄存器的值为0为止。
因此,这段汇编代码会从起始地址0A00H开始,连续写入20个字节的值为1。
跳过循环执行过程