CLD #清除direct flags
mov esi, src_str #源操作数地址送到 [DS] esi 寄存器
mov edi, dst_str #目的操作数送到 [ES] edi 寄存器
LOOP: # 标签lable, LOOP
loadsb #将源操作数[DS] esi中的字符串,按照字节,一个一个字节送到 AL寄存器
stosb # 将AL中的一个字节字符送到目的操作数寄存器 [ES] edi
testb AL, AL # 判断AL中字符是不是NULL, 如果是,则表示已经复制到了字符串末尾,退出
JNZ LOOP # 如果AL中不是NULL,那么表示还没复制完,跳转到LOOP,继续复制
# 否则,复制完成,退出
以上只是大概流程,不同的汇编编译器,具体字符串名称,和格式略有不同。但是意思是一样的。
你也可以使用 REP; MOVSB 指令对实现,不过这需要先计算字符串长度。