汇编语言:从键盘输入一个字符串,再从键盘输入一个字符,如果在原字符串中有这个字符就把它移到最后,

汇编语言:从键盘输入一个字符串,(15个字符),再从键盘输入一个字符,如果在原字符串中有这个字符就把它移到最后,没有就显示“no word”。
例如:输入“asdfghjklqwerty”再输入“a”显示“sdfghjklqwertya”;如果输入"asdfghjklqwerty"再输入"1"则显示“no word”。

DATAS SEGMENT
IN_X DB 16
IN_N DB ?
IN_B DB 16 DUP('X')
IN_E DB ?
MSG1 DB 'Please input STR (Len = 1~15): ', 13, 10, 36
MSG2 DB 13, 10, 'Please input a char : '
MSG3 DB 13, 10, 36
MSG4 DB 13, 10, 'no word.', 13, 10, 36
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
;-----------------------------------
LEA DX, MSG1
MOV AH, 9
INT 21H

LEA DX, IN_X
MOV AH, 10
INT 21H
CMP BYTE PTR IN_N, 1
JB EXIT

LEA DX, MSG2
MOV AH, 9
INT 21H

MOV AH, 1
INT 21H
MOV IN_E, AL

LEA DX, MSG3
MOV AH, 9
INT 21H
;-------------------------
MOV AL, IN_E
LEA BX, IN_B
MOV CL, IN_N
MOV CH, 0
LP1:
CMP AL, [BX]
JE DISP
INC BX
LOOP LP1
JMP H_NOT
;-------------------------
DISP:
MOV DH, AL
MOV AH, 2
LEA BX, IN_B
MOV CL, IN_N
MOV CH, 0
MOV BP, 0
LP2:
MOV DL, [BX]
INC BX
CMP BP, 0
JNE DISP1
CMP DL, DH
JNE DISP1
MOV BP, 1
JMP NEXT
DISP1:
INT 21H
NEXT:
LOOP LP2
MOV DL, DH
INT 21H
JMP EXIT
;-------------------------
H_NOT:
LEA DX, MSG4
MOV AH, 9
INT 21H
EXIT:
MOV AH, 4CH
INT 21H
CODES ENDS
END START

可以满足题目要求。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-05
调试通过,不过只移动字符串中第一个相同的字符。
DATAS SEGMENT
s db 15 dup(0),'$'
i db 'input :$'
o db 'output:$'
se db 0dh,0ah,'$'
NO db 'no word!$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

lea dx,i ;提示输入
mov ah,9
int 21h
;输入
lea si,s ;输入字符存放的地址
mov cx,15 ;输入次数
ss1:

mov ah,1 ;输入字符
int 21h

mov [si],al ;如果是保存
inc si

loop ss1

lea dx,se ;回车换行
mov ah,9
int 21h

lea dx,i ;提示输入
mov ah,9
int 21h

mov ah,1 ;输入字符
int 21h
mov bx,ax

lea dx,se ;回车换行
mov ah,9
int 21h

mov ax,bx
mov cx,15 ;查找
lea si,s
ss2:
cmp al,[si]
jnz ss5
dec cx ;找到后排序
ss3:
cmp cx,0
jz ss4
mov al,[si]
xchg al,[si+1]
mov [si],al
inc si

loop ss3
ss4:

lea dx,o ;找到后输出
mov ah,9
int 21h

lea dx,s
mov ah,9
int 21h

jmp ss6

ss5:
inc si
loop ss2

lea dx,NO ;未找到输出NO WORD
mov ah,9
int 21h

ss6:
mov ah,0 ;等待输入
int 16h

MOV AH,4CH
INT 21H
CODES ENDS
END START追问

汇编:从键盘输入4位16进制数,然后用10进制数显示出来,要求使用子程序结构。
子程序中要说明入口参数和出口参数。

相似回答