主题:编写把DS:DX中字符串首尾对调的程序!
cqviolet
[专家分:0] 发布于 2007-02-04 21:05:00
具体要求如下:
编写子程序CONT,把DS:DX中的字符串(以0为结束标志)首尾对调,如:“ABCDEFG”对调成“GFEDCBA”。
回复列表 (共2个回复)
沙发
ccpp [专家分:9360] 发布于 2007-02-05 15:00:00
title reverse (com文件)
.model tiny
.code
org 100h
;---------------------
main proc near
lea dx,sss
mov di,dx ;di保存基址
mov si,dx ;si保存基址
mov al,0
@10:
cmp al,[si]
je @20
inc si ;让si向末尾
jmp @10
@20:
mov byte ptr[si],024h ;结尾字符改为'$'
dec si
@30:
mov al,[si]
mov bl,[di]
mov [di],al ;交换首尾
mov [si],bl ;字符
dec si ;si-1
inc di ;di+1
cmp di,si ;小于
jb @30 ;则继续循环
mov ah,09h ;显示交换后的字符串
int 21h
.exit
sss db 'abcdefg',0
main endp
end main
板凳
def [专家分:3380] 发布于 2007-02-10 13:44:00
;已经可以用了不得
cont proc near
push di ;保存积存器
push si
push dx
push cx
push bx
push ax
push dx
push es
mov al,0
mov es,ds
mov di,dx
mov cx,0ffffh
repnz scasb
not cx
mov ax,cx ;计算对调次数(2除cx+2余cx)
sub dx,dx
sub bx,bx
mov bx,2
div bx
add ax,dx
pop bx
mov di,cx
sub di,1
sub si,si
mov cx,ax
jcxz duidiaoloopend
duidiaoloopstart: ;对调
push [bx+si]
push [bx+di]
pop [bx+si]
pop [bx+di]
inc si
dec di
loop duidiaoloopstart
duidiaoloopend:
pop es
pop ax
pop bx ;恢复
pop cx
pop dx
pop si
pop di
ret
cont endp
;没测试
我来回复