用si和di实现将字符串’welcome to masm!'复制到它后面的数据区中。
;用si和di实现将字符串'welcome to masm!'复制到它后面的数据区中。
assume cs:code,ds:data
data segment
db 'welcome to masm!'
db '................'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov di,16 ;设置两个偏移地址寄存器 或mov di,10H
mov cx,8;可以用字型数据来复制,所以可以设cx=8,循环八次
copystring:
mov ax,ds:[si]
mov ds:[di],ax
add si,2
add di,2
loop copystring
mov ax,4c00h
int 21h
code ends
end
注意,在程序中十六位寄存器进行内存之间的数据传送,一次复制两个字节,共循环八次。
si和di和bx功能相同,si和di不能分为两个八位寄存器来使用
优化:可以不需要di了,因为观他们 的关系差的是16,用mov ds:[si+16],ax即可
也可以通过设置栈:
;用si和di实现将字符串'welcome to masm!'复制到它后面的数据区中。
assume cs:code,ds:data
data segment
db 'welcome to masm!'
db '................'
data ends
stack segment
dw 0,0,0,0
dw 0,0,0,0
dw 0,0,0,0
dw 0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,32
mov ax,data
mov ds,ax
mov si,0
mov cx,8;可以用字型数据来复制,所以可以设cx=8,循环八次
copystring:
push ds:[si] ;通过push pop
pop ds:[si+16]
add si,2
loop copystring
mov ax,4c00h
int 21h
code ends
end
逻辑更清晰的写法:
或者: