一个汇编语言程序,急求急求!!

从键盘输入一字符串,当遇到字符“$”时停止输入,然后以与输入相反的顺序显示出来

下列程序,经过实验验证,可以满足题目要求。
;------------------------------
DATA SEGMENT
X DB 80 DUP (0) ;预留80个字符的空间.
DATA ENDS
;------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;-------------------------
LEA BX, X ;起始地址
_IN_:
MOV AH, 1 ;输入字符.
INT 21H
CMP AL, '$'
JZ _0D0A
MOV [BX], AL
INC BX
JMP _IN_
;-------------------------
_0D0A: ;回车换行.
MOV DL, 13
MOV AH, 2
INT 21H
MOV DL, 10
INT 21H
;-------------------------
_PR_: ;反序输出.
DEC BX
CMP BX, -1
JZ EXIT
MOV DL, [BX]
MOV AH, 2
INT 21H
JMP _PR_
;-------------------------
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
;------------------------------
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-04
直接用汇编写输入输出?下面是我用c写的,在linux下得到的汇编代码:

.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $32, %esp
movl $9999, (%esp)
call malloc
movl %eax, 20(%esp)
movl $0, 28(%esp)
call getchar
movb %al, 27(%esp)
jmp .L2
.L3:
movl 28(%esp), %eax
addl 20(%esp), %eax
movzbl 27(%esp), %edx
movb %dl, (%eax)
addl $1, 28(%esp)
call getchar
movb %al, 27(%esp)
.L2:
cmpb $36, 27(%esp)
jne .L3
subl $1, 28(%esp)
jmp .L4
.L5:
movl 28(%esp), %eax
addl 20(%esp), %eax
movzbl (%eax), %eax
movsbl %al,%eax
subl $1, 28(%esp)
movl %eax, (%esp)
call putchar
.L4:
cmpl $0, 28(%esp)
jns .L5
movl 20(%esp), %eax
movl %eax, (%esp)
call free
leave
ret
.size main, .-main
第2个回答  2011-06-04
在我的百度空间里有代码
相似回答