汇编语言:从键盘输入一个字符串,再从键盘输入一个字符,如果在原字符串中有这个字符就把它移到最后,
发布网友
发布时间:2022-04-24 02:44
我来回答
共2个回答
热心网友
时间:2023-10-22 17:48
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
可以满足题目要求。
热心网友
时间:2023-10-22 17:48
调试通过,不过只移动字符串中第一个相同的字符。
DATAS SEGMENT
s db 15 p(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进制数显示出来,要求使用子程序结构。
子程序中要说明入口参数和出口参数。
热心网友
时间:2023-10-22 17:48
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
可以满足题目要求。
热心网友
时间:2023-10-22 17:48
调试通过,不过只移动字符串中第一个相同的字符。
DATAS SEGMENT
s db 15 p(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进制数显示出来,要求使用子程序结构。
子程序中要说明入口参数和出口参数。
热心网友
时间:2023-10-22 17:48
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
可以满足题目要求。
热心网友
时间:2023-10-22 17:48
调试通过,不过只移动字符串中第一个相同的字符。
DATAS SEGMENT
s db 15 p(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进制数显示出来,要求使用子程序结构。
子程序中要说明入口参数和出口参数。