;程序功能:将数据段中的小写字母变成大写
;方法1:直接寻址
assume cs:code,ds:data
data segment
db 'ibm',13 dup(' ')
db 'dec',13 dup(' ')
db 'dos',13 dup(' ')
db 'var',13 dup(' ')
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,0
mov dx,5
s:
mov cx,3
s0:
mov al,ds:[bx]
and al,11011111b
mov ds:[bx],al
add bx,1
loop s0
add dx,-1
mov cx,dx
add bx,13
loop s
mov ah,4ch
int 21h
code ends
end start
;方法2:运用堆栈和bx+si寻址
assume cs:code,ds:data,ss:stack
data segment
db 'ibm',13 dup(' ')
db 'dec',13 dup(' ')
db 'dos',13 dup(' ')
db 'var',13 dup(' ')
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
mov bx,0
mov cx,4
s0:
push cx
mov si,0
mov cx,3
s:
mov al,[bx+si]
and al,11011111b
mov[bx+si],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ah,4ch
int 21h
code ends
end start
;方法3:利用堆栈直接寻址
assume cs:code,ds:data,ss:stack
data segment
db 'ibm',13 dup(' ')
db 'dec',13 dup(' ')
db 'dos',13 dup(' ')
db 'var',13 dup(' ')
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov bx,0
mov cx,4
s:
push cx
mov cx,3
s0:
mov al,ds:[bx]
and al,11011111b
mov ds:[bx],al
add bx,1
loop s0
pop cx
add bx,13
loop s
mov ah,4ch
int 21h
code ends
end start