中易网

关于汇编字符串数组输出问题?

答案:1  悬赏:20  
解决时间 2021-10-13 11:45
  • 提问者网友:凉末
  • 2021-10-12 18:08
关于汇编字符串数组输出问题?
最佳答案
  • 二级知识专家网友:英雄的欲望
  • 2021-10-12 18:32
; 本程序通过编译,运行正确
Code  Segment
  Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output  MACRO Str_Addr
  lea  dx,Str_Addr
  mov  ah,9
  int  21h
  EndM
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
  push  ax
  push  dx
  mov  ah,02h
  mov  dl,0dh
  int  21h
  mov  dl,0ah
  int  21h
  pop  dx
  pop  ax
  ret
Enter_CTLF endp
; -----------------------------------------
N   equ  20
Prompt_Str db  'Please input words: $'
Addr_Words dw  N dup(?) ;预置N个字符串地址,实际输入的单词个数不会超过N个。
Strings  dw  ? ;实际输入的单词个数
Start:   push cs
  pop  ds
  push cs
  pop  es ;使数据段、附加段与代码段同段
  cld
  lea  di,Addr_Words
  lea  si,Words ;字符串缓冲区地址
  mov  cx,N ;最多输入N个单词
  Output Prompt_Str ;提示输入单词
Input_Word: call Enter_CTLF ;输出一个回车、换行
  mov  byte ptr [si],21 ;每个单词最多20个字符
  mov  dx,si
  inc  si
  mov  ah,0ah
  int  21h
  lodsb ;读入实际输入的字符个数,即单词长度
  test al,0ffh ;若直接回车?
  jz  @@L1 ;是,结束单词输入
  xor  ah,ah
  mov  bx,ax
  mov  ax,si
  stosw ;保存这个单词的地址
  add  si,bx
  mov  [si],'$' ;使之能用dos功能调用9号功能显示这个字符串(单词)
  inc  si
  loop Input_Word ;输入下一个单词
@@L1:  sub  di,offset Addr_Words
  shr  di,1
  mov  Strings,di ;保存实际输入的单词个数
Exit_Proc: mov  ah,4ch ;结束程序
  int  21h
Words  db  ?
Code  ENDS
  END   Start ;编译到此结束

13
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息