鱼C论坛

 找回密码
 立即注册
查看: 3879|回复: 3

[已解决]各位大神,请问dos 2号功能调用输出的结果为什么会覆盖9号功能输出的结果?求解

[复制链接]
发表于 2017-11-26 10:04:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 server_test 于 2017-11-26 10:14 编辑
  1. data segment
  2. intip db "please intput number:$",0ah,0dh
  3. indata db 12,0,12 dup(0)
  4. data1  db "0dog      "
  5.           db "1am       "
  6.           db "2a        "
  7.           db "3love     "
  8.           db "4I        "
  9.           db "5is       "
  10.           db "6pig      "
  11.           db "7my       "
  12.           db "8and      "
  13.           db "9gaan   "          
  14. data ends
  15. code segment
  16.      assume cs:code,ds:data
  17.          start:mov ax,data           ;寄存器初始化
  18.                mov ds,ax
  19.                    lea dx,intip           ;输入提示
  20.                    mov ah,9
  21.                    int 21h
  22.                    lea dx,indata        ;把indata的偏移地址放入dx
  23.                    mov ah,0ah
  24.                    int 21h
  25.                    lea di,indata+1     ;di指向indata的首地址
  26.                    lea si,data1          ;si指向data1的首地址
  27.                    mov al,[di]
  28.                    cbw
  29.                    mov cx,ax
  30.                    inc di
  31.           comc:push cx
  32.                mov cx,10
  33.           comr:mov dl,[di]         
  34.                mov al,[si]
  35.                    cmp dl,al           ;number匹配,ZF=0
  36.                    jz next2
  37.                add si,10
  38.                loop comr
  39.      next1:inc di
  40.                    lea si,data1
  41.            pop cx          
  42.            loop comc
  43.            jmp finish                  
  44.      next2:mov cx,10
  45.                mov bx,1                ;bx置位
  46.           char:mov dl,[si+bx]      ;输出显示字符串                     
  47.                  mov ah,2
  48.                  int 21h
  49.                  inc bx
  50.                  mov al,dl
  51.            cmp al,20h                ;ZF置1,识别空格                              
  52.                    loopnz char
  53.            jmp next1
  54.     finish:mov ah,4ch
  55.                int 21h
  56. code ends
  57.      end start
  58.          
  59.        
复制代码
最佳答案
2017-11-26 15:41:35
将第2行改为:

intip db "please intput number:",0ah,0dh,"$"

不会被覆盖。

应该是int 21h的“0ah”功能最后输入回车符的时候,光标位置回到行首。

因此,再次显示的时候从行首开始显示,因此覆盖了原来显示的内容。
TIM截图20171126100126.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-26 15:41:35 | 显示全部楼层    本楼为最佳答案   
将第2行改为:

intip db "please intput number:",0ah,0dh,"$"

不会被覆盖。

应该是int 21h的“0ah”功能最后输入回车符的时候,光标位置回到行首。

因此,再次显示的时候从行首开始显示,因此覆盖了原来显示的内容。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-26 20:27:20 | 显示全部楼层
兰陵月 发表于 2017-11-26 15:41
将第2行改为:

intip db "please intput number:",0ah,0dh,"$"

谢谢大神
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 20:51:03 | 显示全部楼层

一起学习,一起进步。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-13 20:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表