回 帖 发 新 帖 刷新版面

主题:急  急!!!汇编编写电话簿

急啊!有高手帮下没

回复列表 (共4个回复)

沙发

1.  先提个需求写,要实现什么功能?
2.  电话簿不是一个简单的东西(我见过商务通的电话模块的C程序,代码近万行。),为什么要用汇编写,费力不讨好,是不是你们老师出的题?
3。 如果你对需求没有概念,我列个功能需要,可能不全?
  1。输入功能:
    1)能够输入新的联系人,包括(姓名,单位电话,住宅电话,手机,e-mail,单位,地址),这些项目中的某项可能为空。
    2。能够修改或者删除某个联系人。

  2。检索功能
    1)能够通过 姓名的一部份或者完整的姓名查到这个联系人
    2)能够通过 姓名的拼音缩写的这个联系人
    3)能够显示 按访问顺序显示 最近的联系人
    4)能够通过其他字段,如电话(办公,住宅,手机)查找联系人。

  3。数据组织如何实现,是否储存到文件?是否可导出其它软件使用的格式,如outlook,outlook express,某种手机的通讯簿格式。

板凳

恩,老师叫的了,简单点就好。本来想用C语言实现,再要个反汇编。可惜行不通!
要求没什么的
我们就学了一个学期
学了点皮毛而已
有最基本的功能就可以了

3 楼

"想用C语言实现,再要个反汇编", 反汇编的代码太过难懂,难于维护.

正确的做法是:
  1。确定功能,和界面
  2。用C语言实现。
  3。想办法改为汇编实现,I/O 改为dos/bios调用(16位dos程序)或者win32api(32位windows程序).直接用汇编写,容易陷入细节,难于调试.

4 楼

.model small
.stack
.data
   string1 db 'Please input name:$'
   string2 db 20,0, 20 dup(?),'$'
   string3 db 10,13,"  Haven't this person!....",10,13,'$'
   person struct    ;结构定义
          pid db 0   ;编号
          pname db '--------------------$';最多20位,姓名
          phome db '---------------$' ;最多15位 ,宅电
          poffice db '----------------$';最多15位 ,办公室
          pmobile db '--------------$';最多15位  ,手机
   person ends
   
   telbook person <1,'zhangsan$','010-12344321$','010-87654321$','13913913999$'>
           person <2,'lisi$','020-43211234$','020-12345678$','13187654321$'>
           person <3,'wanger$','021-87654321$','021-6666666$','13712345678$'>
           person <4,'zhuwu$','025-87654321$','025-6666666$','13612345678$'>
           person <5,'john$','110$',,'119 110 120$'>
           ;电话号码长度可以任意,这里只列举5个
   tablelength=($-telbook)/(type telbook)

.code
    nextline macro  ;显示换行当宏
      mov ah,2
      mov dl,10
      int 21h
      mov ah,2
      mov dl,13
      int 21h
     endm
.startup
   mov ax,ds
   mov es,ax
  begin:
    mov dx,offset string1
    mov ah,9
    int 21h
    mov dx,offset string2    ;输入name
    mov ah,10
    int 21h
     mov ax,type telbook
     lea bx,offset telbook
     lea di,[bx].person.pname
     mov dx,tablelength
     .repeat
          mov ch, 0
          mov cl,string2[1]
          lea si,string2[2]
          repe cmpsb        ;找到不同的字符为止
         .if zero?            ;若没有不同字符,则找到此人
           nextline
           lea dx,[bx].person.phome  ;显示宅电
           mov ah,9
           int 21h
           nextline
           lea dx,[bx].person.poffice   ;显示办公室电话
           mov ah,9
           int 21h
           nextline
           lea dx,[bx].person.pmobile  ;显示手机
           mov ah,9
           int 21h
          .exit 0
        .else        ;继续找下一个
          add bx,type telbook
          lea di,[bx].person.pname
        .endif
        dec dx
    .until dx==0
     mov dx,offset string3   ;没找到
     mov ah,9
     int 21h
     jmp   begin
  end

运行结果如下:
Please input name:zhuwu
025-87654321
025-6666666
13612345678

我来回复

您尚未登录,请登录后再回复。点此登录或注册