SI(source index)是源变址寄存器 DI(destination index)是目的变址寄存器 它们和[bx]类似,用于存放偏移地址
assume cs:code,ds:data
;需求:字符串复制到...位置
data segment
db 'welcome to masm!'
db '................'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
mov si,0
mov di,16
mov cx, 8
copydata:
mov dx,ds:[si]
mov es:[di],dx
add si,2
add di,2
loop copydata
code ends
end start
改成栈复制:
assume cs:code,ds:data
;需求:字符串复制到...位置
data segment
db 'welcome to masm!'
db '................'
data ends
stack segment
db 32 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
mov ax,stack
mov ss,ax
mov sp,32
mov si,0
mov di,16
mov cx, 8
copydata:
push ds:[si]
pop es:[di]
add si,2
add di,2
loop copydata
code ends
end start
ds:[bx+数字]
ds:[bx+si]和ds:[bx+si+数字]
ds:[bx+di]和ds:[bx+di+数字]
assume cs:code ,ds:data
; 需求:首字母变成大写
data segment
db '1. file '
db '2. edit '
db '3. search '
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
mov bx,0
mov si,3
mov cx,3
upLetter:
mov dl,ds:[bx+si]
and dl,11011111B
mov es:[bx+si],dl
add bx,16
loop upLetter
code ends
end start
assume cs:code ,ds:data,ss:stack
; 需求:所有字母变成大写
data segment
db '1. file '
db '2. edit '
db '3. sear '
data ends
stack segment
db 32 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
mov ax,stack
mov ss,ax
mov sp,32
mov bx,0
mov si,3
mov cx,3
upRow: ;使用两层循环, 因为内循环需要用到cx和si寄存器,避免数据被覆盖,使用栈临时保护
push cx
push si
mov cx,4
upLetter:
mov dl,ds:[bx+si]
and dl,11011111B
mov es:[bx+si],dl
inc si
loop upLetter
add bx,16
pop si
pop cx
loop upRow
code ends
end start