;可以这样考虑:
;1.利用dos 21h中断的A号功能,读取一个字符串,这样可以取得字符串的长度N。
;2.mov cx,N,利用Loop指令,倒序输出字符串。
;代码如下:
; multi-segment executable file template.
data segment
buf0 db 255 ;字符串最大长度
db 0 ;输入的字符串的实际长度
buf1 db 255 dup(0)
lf db 0dh, 0ah, '$'
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
lea dx, buf0 ;read a string
mov ah, 0ah ;
int 21h ;
lea dx,lf ;输出回车换行
mov ah,9 ;
int 21h
xor cx,cx
mov cl,buf0+1 ;cx存入字符串长度,循环计数
mov bx,cx
mov ah,0eh ;10h中断,0eh子功能,输出al中的字符
L1: dec bx
mov al,buf1[bx]
int 10h
loop L1
mov ax, 4c00h
int 21h
code ends
end start
从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现:
;汇编语言输入一串字符串,可以调用DOS功能中断INT 21H的06H功能。
;程序功能:输入一串字符,以回车符结束,输入字符串最大长度200字符;
; 输入结束在下一行倒序输出此字符串。
data segment;定义数据段
str db 201 dup (0dh)
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
mov cx,200
inpstr: mov ah,06h
int 21h
jnz inpstr;无字符可读
mov [si],a1;存储输入字符
inc si;指向下一字节
xor al,0dh;判断输入是否结束
jz endinp;输入结束
loop inpstr;未结束继续输入
endinp: mov dl,0ah;回车换行
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
output: dec si;逆序输出字符串
mov dl,[si];取一个字符
mov ah,02h;输出到屏幕
int 21h
mov ax,si
cmp ax,offset str;比较字符串起始地址
jnz output;未到起始地址,继续输出
mov ah,4ch;输出完毕,结束程序
int 21h
ret
main endp
code ends
end start
编个小程序,即可实现。
楼主选择了错误的答案。你所选择的,不是用汇编语言编写的。
正确程序如下:
;================================================
DSEG SEGMENT
SHOW DB 'Please input a string: $'
NAM DB 200
DB ?
DB 200 DUP(0)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV DX, OFFSET SHOW
MOV AH, 09H
INT 21H
MOV DX, OFFSET NAM
MOV AH, 0AH
INT 21H
MOV DL, 0AH
MOV AH, 02H
INT 21H
MOV DL, 0DH
MOV AH, 02H
INT 21H
MOV CL, NAM + 1
MOV CH, 0
CMP CX, 0
JE EXIT
MOV SI, OFFSET NAM + 2
ADD SI, CX
MOV AH, 02H
L1:
DEC SI
MOV DL, [SI]
INT 21H
LOOP L1
EXIT:
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
;================================================
本程序执行结果如下:
输入:ABCD
输出:DCBA
;================================================
#include
struct text
{
char c;
struct text *next;
};
void main()
{
text *head = new text;
text *current = head;
text *next = NULL;
char c;
while(1)
{
if((current->c = getchar()) == '\n')
break;
//printf("%c:%d\n", current->c, current->c);
next = new text;
current->next = next;
current = current->next;
}
current->next = NULL;
current = head;
while(current->c != '\n')
{
printf("%c:%2x\n", current->c, current->c);
current = current->next;
}
}
//无论多么长字符串均可