;=====================================
;filename:top2o4a.asm
;purpose:逆序排列字符串
;=====================================
assume cs:code,ss:stack,ds:data
stack segment
dw 64 dup(?)
stack ends
data segment
str db 'I Love Masm!',0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
lea si,str
mov dh,5
mov dl,1
mov cl,11b
call show_str
lea si,str
call revers_str
lea si,str
mov dh,6
mov dl,1
mov cl,11b
call show_str
mov ax,4c00h
int 21h
;======================================
;名称:str_len
;功能:求一个字符串的长度
;参数:ds:si指向字符串的首地址
;返回:(cx)=字符串的长度
;======================================
str_len:
push ax
push si
mov ax,0
s1:
mov ch,ds:[si]
mov cl,0
jcxz ok1
inc ax
inc si
jmp short s1
ok1:
mov cx,ax
pop si
pop ax
ret
;======================================
;名称:revers_str
;功能:将一个指定的字符串逆序排列
;参数:ds:si指向字符串的首地址
;返回:无
;======================================
revers_str:
push ax
push bx
push cx
push dx
push si
push di
call str_len
mov di,cx
dec di
mov bx,2
mov ax,cx
mov dx,0
div bx
mov cx,ax
s2:
mov al,ds:[si]
mov ah,ds:[di]
mov ds:[si],ah
mov ds:[di],al
inc si
dec di
loop s2
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
;===========================================================
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
;===========================================================
show_str:
push dx
push si
push di
push cx
push ax
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov dh,0
add ax,dx
add ax,dx
sub ax,2
mov di,ax
mov ah,cl
output:
mov ch,ds:[si]
mov cl,0
jcxz ok
mov byte ptr es:[di],ch
mov byte ptr es:[di+1],ah
inc si
inc di
inc di
jmp short output
ok:
pop ax
pop cx
pop di
pop si
pop dx
ret
code ends
end start
;=====================================
;filename:top2o4b.asm
;purpose:字符串大写转换成小写
;=====================================
assume cs:code,ss:stack,ds:data
stack segment
dw 64 dup(?)
stack ends
data segment
str db 'I Love Win32 Assembly Language!',0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
lea si,str
mov dh,5
mov dl,1
mov cl,11b
call show_str
lea si,str
call capital
lea si,str
mov dh,6
mov dl,1
mov cl,11b
call show_str
mov ax,4c00h
int 21h
;================================================
;名称:capital
;功能:将一个指定的字符串转换成大写的形式
;参数:ds:si指向字符串的首地址
;返回:无
;================================================
capital:
push cx
push si
s0:
mov ch,ds:[si]
mov cl,0
jcxz ok0
cmp byte ptr ds:[si],'a'
jc next0
cmp byte ptr ds:[si],'z'
jnc t0
jmp short next1
t0:
cmp byte ptr ds:[si],'z'
jz next1
next0:
cmp byte ptr ds:[si],'A'
jc next2
cmp byte ptr ds:[si],'Z'
jnc t1
jmp short next1
t1:
cmp byte ptr ds:[si],'Z'
jz next1
jmp short next2
next1:
and byte ptr ds:[si],11011111b
next2:
inc si
jmp short s0
ok0:
pop si
pop cx
ret
;===========================================================
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
;===========================================================
show_str:
push dx
push si
push di
push cx
push ax
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov dh,0
add ax,dx
add ax,dx
sub ax,2
mov di,ax
mov ah,cl
output:
mov ch,ds:[si]
mov cl,0
jcxz ok
mov byte ptr es:[di],ch
mov byte ptr es:[di+1],ah
inc si
inc di
inc di
jmp short output
ok:
pop ax
pop cx
pop di
pop si
pop dx
ret
code ends
end start
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!