+ -
当前位置:首页 → 问答吧 → 【虎彡】编译通过了,但是运行不了,大叔、哥哥速来!

【虎彡】编译通过了,但是运行不了,大叔、哥哥速来!

时间:2010-12-14

来源:互联网

编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示
主程序TELIST:
  (1)显示提示符INPUT NAME:
  (2)调用子程序INPUT_NAME 输入姓名
  (3)显示提示符INPUT A TELEPHONE NUMBER
  (4)调用子程序INPHONE输入电话号码
  (5)调用子程序PRINTLINE显示姓名及电话号码
   
子程序INPUT_NAME
  (1)调用键盘输入子程序GETCHAR,把输入的姓名存放在INBUF缓冲区
  (2)把INBUF中姓名移入输出行OUTNAME
子程序INPHONE
  (1)调用键盘输入子程序GETCHAR,把输入的的8位号码存放在INBUF缓冲区
  (2)把INBUF中的电话号码移入输出行OUTPHONE
子程序PRINTLNE
  显示姓名及电话号码,格式为:
  NAME TEL.
  XXX XXX

******************************************************************************
data segment
  IPNAME db 'INPUT NAME:','$' ;提示符INPUT NAME:
  IPATEL db 'INPUT A TELEPHONE NUMBER','$' ;提示符INPUT A TELEPHONE NUMBER
  INBUF db 20 dup (0) ;INBUF缓冲区
 OUTNAME db 20 dup (0) ;输出行OUTNAME
OUTPHONE db 20 dup (0) ;输出行OUTPHONE
  NA_ME db 'NAME','$'
  TEL db 'TEL.','$'
  jishu db 0,0 ;记录
data ends
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
code segment
assume cs:code,ds:data,es:data


start:
  mov ax,data 
  mov ds,ax
  mov es,ax

  lea dx,IPNAME
  mov ah,09h
  int 21h ;显示INPUT NAME:

  call INPUT_NAME ;调用子程序INPUT_NAME 输入姓名

   
  lea dx,IPATEL  
  mov ah,09h
  int 21h ;显示提示符INPUT A TELEPHONE NUMBER
 
  call INPHONE ;调用子程序INPHONE输入电话号码

  call PRINTLINE ;调用子程序PRINTLINE显示姓名及电话号码
  mov ax,4c00h
  int 21h
;===================================================================================
INPUT_NAME proc near ;输入姓名
  push cx
  push si
  push di
  push bx
  call GETCHAR ;调用键盘输入子程序GETCHAR
   
  lea bx,INBUF
  inc bx
   
  mov cl,[bx]-1 ;INBUF第二个单元为字节数(包括回车
  inc bx  
  lea si,jishu
  mov byte ptr [si],cl ;记录输入字节数  
  mov si,bx ;SI指向源地址
  lea DI,OUTNAME ;DI指向输出行OUTNAME
  CLD  
  rep movsb
  pop bx
  pop di
  pop si
  pop cx
  ret
INPUT_NAME endp
;-------------------------------------------------------------------------------------
INPHONE proc near ;输入电话号码
  push CX
  push si 
  push di
  push bx
   
  call GETCHAR ;调用键盘输入子程序GETCHAR
  lea bx,INBUF
  inc bx
   
  mov cl,[bx]-1
  inc bx
  lea bx,INBUF
  inc bx
  mov byte ptr [si+1],cl ;记录输入号码个数
  mov si,bx
  lea di,OUTPHONE
  CLD
  rep movsb ;把INBUF中姓名移入输出行OUTNAME
  pop bx
  pop di
  pop si
  pop cx
  ret
INPHONE endp

GETCHAR proc near ;键盘输入子程序
  push ax
  push dx
  lea dx,INBUF
  mov ax,0ah
  int 21h
  pop dx
  pop ax
  ret
GETCHAR endp

;------------------------------------------------------------------------------------  
PRINTLINE proc near
  push ax
  push bx
  push si
  push dx
  lea dx,NA_ME  
  mov ah,09h
  int 21h ;显示NAME
  mov dl,0DH
  mov ah,02h  
  int 21h ;空格
  lea dx,TEL
  mov ah,09H
  int 21h ;显示TEL.
  mov dl,0AH
  mov ah,02h  
  int 21h ;回车
  lea si,jishu
   
  lea bx,OUTNAME
  add bl,[si]
  mov bh,0
  mov byte ptr [bx+1],'$'
  lea dx,OUTNAME
  mov ah,09h
  int 21h ;显示名字
  mov dl,0DH  
  mov ah,02h
  int 21h ;空格
  lea bx,OUTPHONE 
  add bl,[si+1]
   
  mov byte ptr [bx+1],'$'
  lea dx,OUTPHONE
  mov ah,09h
  int 21h ;显示电话号码
  pop dx
  pop si
  pop bx
  pop ax
  ret
PRINTLINE endp
code ends
end start
   
;***********************************************************************************

作者: znxllyuan   发布时间: 2010-12-14

16 位 MS-DOS 子系统

D:MYDOCU~1\noname1.exe
NTVDM CPU遇到无效的指令
CS:CD09 IP:D055 OP:F0 37 05 10 02 选择“关闭”终止应用程序

  关闭(C) 忽略(I)
 

作者: znxllyuan   发布时间: 2010-12-14

键盘输入子程序错误
 mov ax,0ah ;, 应为:mov ah,0ah

键盘如入缓冲区INBUF格式不对。INBUF应该由三部分组成。
即:要输入的字节数,实际输入字节数,输入内容。

目前只看出这些。

作者: masmaster   发布时间: 2010-12-14

引用 2 楼 masmaster 的回复:
键盘输入子程序错误
mov ax,0ah ;, 应为:mov ah,0ah

键盘如入缓冲区INBUF格式不对。INBUF应该由三部分组成。
即:要输入的字节数,实际输入字节数,输入内容。

目前只看出这些。

 INBUF该怎样定义?

作者: znxllyuan   发布时间: 2010-12-14

引用 3 楼 znxllyuan 的回复:
引用 2 楼 masmaster 的回复:
键盘输入子程序错误
mov ax,0ah ;, 应为:mov ah,0ah

键盘如入缓冲区INBUF格式不对。INBUF应该由三部分组成。
即:要输入的字节数,实际输入字节数,输入内容。

目前只看出这些。

INBUF该怎样定义?

inbuf db 20,0,20 dup (0);即:要输入的字节数,实际输入字节数,输入内容。

作者: masmaster   发布时间: 2010-12-14

写这么长???????????????????????????????????????????????!!!
厉害 !
训练耐心的~~~

作者: nanlingcg   发布时间: 2010-12-14

引用 4 楼 masmaster 的回复:
引用 3 楼 znxllyuan 的回复:
引用 2 楼 masmaster 的回复:
键盘输入子程序错误
mov ax,0ah ;, 应为:mov ah,0ah

键盘如入缓冲区INBUF格式不对。INBUF应该由三部分组成。
即:要输入的字节数,实际输入字节数,输入内容。

目前只看出这些。

INBUF该怎样定义?

inbuf db 20,0,20 dup (0);……


 成了!但是我不会玩~

作者: znxllyuan   发布时间: 2010-12-14

引用 5 楼 nanlingcg 的回复:
写这么长???????????????????????????????????????????????!!!
厉害 !
训练耐心的~~~


 吼吼 大叔我写了一个小时你~

 刚才试了下, 提示INPUT NAME:
 我打完回车
 又提示INPUT A TELEPHONE NUMBER
  我输入号码
 回车就没了 不回显! 555555

作者: znxllyuan   发布时间: 2010-12-14

这把显示了 乱糟糟的~ 名字我输入zhaonanxia 号码我输入 88552233

显示的时候是这样的


TEL.T A TELEPHONE NUMEBR88552233
  anxia

作者: znxllyuan   发布时间: 2010-12-14