回 帖 发 新 帖 刷新版面

主题:编写把DS:DX中字符串首尾对调的程序!

具体要求如下:

编写子程序CONT,把DS:DX中的字符串(以0为结束标志)首尾对调,如:“ABCDEFG”对调成“GFEDCBA”。

回复列表 (共2个回复)

沙发

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

板凳

;已经可以用了不得
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
;没测试

我来回复

您尚未登录,请登录后再回复。点此登录或注册