注册 登录
编程论坛 汇编论坛

刚学汇编 第一个程序改了两天了 救救我!!!

cuitxp 发布于 2005-11-17 09:48, 898 次点击
我想输入两个字符串,然后把他们中间相同的字母取出,然后输出
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS

DATA SEGMENT
P1 DB 20
T1 DB 0
ARRAY1 DB 21 DUP(?)

P2 DB 20
T2 DB 0
ARRAY2 DB 21 DUP(?)
ARRAY3 DB 21 DUP(?)
MSG1 DB 'PLEASE INPUT:',0AH,0DH,'$'
MSG2 DB 'THE SAME IS:',0AH,0DH,'$'
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK

START: MOV AX, DATA
MOV DS, AX

MOV DX, OFFSET MSG1
MOV AH, 09H
INT 21H

XOR DX,DX
MOV DX, OFFSET P1 ;取第一个字符串
MOV AH, 0AH
INT 21H

MOV DX, OFFSET MSG1
MOV AH, 09H
INT 21H
XOR DX,DX

MOV DX, OFFSET P2 ;取第二个字符串
MOV AH, 0AH
INT 21H

MOV DX, OFFSET MSG2
MOV AH, 09H
INT 21H

MOV DI,0H

MOV BX,0FFFFH
MOV CX,WORD PTR T1

LOOP1: INC BX ;循环取出第一个字符串中的每一个元素与第二个字符串比较
XOR AX,AX ;如果第二个字符串中有这个字母就送入第三个字符串中
MOV AL,ARRAY1[BX]
PUSH CX
MOV CX,WORD PTR T2
PUSH DI
LEA DI,ARRAY2
REPNE SCASB
POP DI
JE FOUND
POP CX
LOOP LOOP1
JMP EXIT

FOUND:
MOV ARRAY3[DI],AL
INC DI
POP CX
LOOP LOOP1

EXIT: MOV ARRAY3[DI],'$'
MOV DX,OFFSET ARRAY3 ;输出第三个字符串
MOV AH,09H
INT 21H
MOV AH, 4CH
INT 21H

CODE ENDS

END START
6 回复
#2
zinking2005-11-18 21:26
刚学汇编就弄点简单的像我一样,呵呵
先不看这么多的代码
#3
lv_linker2005-11-19 19:24

晕,怎么没解啊?我也想看看啊。呵呵。

#4
suntercel2005-11-19 23:10
什么乱七八糟的啊。我学了一个学期就会MOV,,,
#5
hanfeng2005-12-30 09:19
先难后易了

#6
ecomcheng2006-03-28 11:33

没必要输怎么长,用串操作指令,很多都可以省了,比如用cmpsw,cx再置数,CLD标志

#7
meng1361382006-04-13 22:38
注释又少啊
1