利用DOS功能调用9、10实现从键盘输入一串字符 “abcde”,然后输出3次。注:字符串长度不超过5个字符

结果是输入:abcde↙
输出:abcde
abcde
abcde
提示:

DATA SEGMENT
MAX DB 10
ACT DB 0
STR DB 10 DUP(‘$’)
DATA ENDS

  ;利用DOS功能调用9、10实现从键盘输入一串字符 “abcde”,然后输出3次。注:字符串长度不超过5个字符
  assume cs:code, ds:data
  data segment
  INPUT DB 0Ah,0DH,"Please Input a string:$"
  CRLF DB 0AH,0DH,'$'
  BUF db 5 ;字符串长度不超过5个字符,所以这里是5
  db ?
  db 5 dup (?) ;字符串长度不超过5个字符,所以这里是5
  NUM db 3 ;然后输出3次,所以这里是3
data ends

  stack segment
  db 16 dup (?)
stack ends

  code segment
  start: mov ax,data
  mov ds,ax
  mov ax,stack
  mov ss,ax
mov sp,10H

  ;显示提示字符串Please input a string:
  lea dx,INPUT
  mov ah,9
int 21h

  ;接受用户输入的字符串
  lea dx,BUF
  mov ah,10
int 21h

  ;输出回车空行
  lea dx,CRLF
  mov ah,9
int 21h

  ;cx清0
  xor cx,cx
  ;NUM = 3,所以cl = 3,输出3次字符串
  mov cl,NUM
  next: push cx

  ;获取用户输入的字符串的字符个数
  mov cl,BUF+1
  ;获取存放用户输入的字符串的偏移地址
  lea si,BUF+2
  next1:
  ;获取字符,然后输出
  mov dl,[si]
  mov ah,2
  int 21h
  inc si
  loop next1

  lea dx,CRLF
  mov ah,9
  int 21h
  pop cx
loop next

  mov ax,4c00h
  int 21h
  code ends
end start

PS:若有不明白的地方,可以追问追问

好复杂啊,有没有别的简单点的方法?有一个提示如下:
DATA SEGMENT
MAX DB 10
ACT DB 0
STR DB 10 DUP(‘$’)
DATA ENDS

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-21
assume cs:code, ds:data
DATA SEGMENT
MAX DB 10
ACT DB 0
STR DB 10 DUP ('$')
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
LEA DX, MAX
MOV AH, 10
INT 21H
MOV MAX, 10
MOV ACT, 13
LEA DX, MAX
MOV AH, 9
INT 21H
INT 21H
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START

从键盘输入一串字符 “abcde”,然后输出3次。
注:字符串长度不超过10个字符。

输入:
abcde↙
输出:
abcde
abcde
abcde

不会有比本程序更简单的了。本回答被提问者和网友采纳
第2个回答  2012-11-21
把code段这样改,稍微简洁点。
 code segment
  start: mov ax,data
  mov ds,ax
  mov ax,stack
  mov ss,ax
mov sp,10H

  ;接受用户输入的字符串
  lea dx,STR
  mov ah,10
int 21h

  mov cx,3

next:
  ;输出

  lea dx,STR
  mov ah,9
int 21h
loop next

  mov ax,4c00h
  int 21h
  code ends
相似回答