从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现

从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现... 从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现 展开
 我来答
白雲深處是我家
推荐于2018-05-11 · TA获得超过381个赞
知道小有建树答主
回答量:203
采纳率:66%
帮助的人:239万
展开全部
;可以这样考虑:
;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
NJGQZF
2015-06-02 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1257万
展开全部
从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现:
;汇编语言输入一串字符串,可以调用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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2015-06-03 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
编个小程序,即可实现。

楼主选择了错误的答案。你所选择的,不是用汇编语言编写的。

正确程序如下:

;================================================

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

;================================================
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
llllwyg
推荐于2016-10-19 · TA获得超过108个赞
知道答主
回答量:31
采纳率:0%
帮助的人:27.2万
展开全部
#include <stdio.h>
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;
}
}
//无论多么长字符串均可
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式