首页
社区
课程
招聘
[成果2.4]逆序排列字符串&字符串大写转换成小写&字符串小写转换成大写
发表于: 2008-1-8 21:10 11848

[成果2.4]逆序排列字符串&字符串大写转换成小写&字符串小写转换成大写

2008-1-8 21:10
11848
;=====================================
;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	


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好难得的一个16位的好东东
占位学习
2008-1-9 23:39
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
3
好,代码条理清晰,易读。
2008-1-10 08:43
0
游客
登录 | 注册 方可回帖
返回
//