鱼C论坛

 找回密码
 立即注册
查看: 1266|回复: 1

把两个功能做成一个?谁可以帮我修改一下?

[复制链接]
发表于 2014-12-17 19:06:20 | 显示全部楼层 |阅读模式

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

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

x
汇编语言读出文件的内容;
DATA SEGMENT
    path_name db 'F:\example\b.txt',00       ;ASCIZ串最后一定以00结束
        error db 'Sorry,there is something ERROR!','$'  ;错误信息
       string db 'I like Bakestball!','$'              ;任意定义的字符串
     codename db 10 dup(0)     ;存储文件代号(程序操作是是多次使用的)
       buffer db 13 dup(0)
DATA ENDS          
CODE SEGMENT
      ;  main proc far
   start:
        mov ax,DATA
        mov ds,ax
        mov ah,3ch        ;记住DOS的3c号功能是建立文件
        mov cx,00         ;cx是文件属性,0号表示为默认属性
        lea dx,path_name  ;需要新建文件的绝对路径的偏移量传送到dx寄存器中
        int 21h           ;中断后,系统开始建立文件,若成功返回一个代号到ax中供以后使用若出错置位CF标志位
        jc next           ;jc是判断CF标志位的若cf=1表示新建文件出错跳转到next执行处理程序
        lea bx,codename   ;获取存储代号的地址偏移量
        mov [bx],ax       ;寄存器的间接寻址,将AX中的代号数据保存起到codename中
        lea si,codename  ;回去代号所在的地址偏移量
        mov ah,40h       ;记住是DOS的40号功能
        lea dx,string    ;将需要传递的数据的地址偏移量传送给dx寄存器
        mov bx,[si]      ;bx接收的是文件代号数据([si]表示寄存器间接寻址方式)
        mov cx,13h       ;cx存储你打算写入的字符串的字节数
        int 21h          ;开启软中断  
        jc next          ;jc是判断CF标志位的若cf=1表示对文件的写出错跳转到next执行处理程序        
        lea si,codename  ;回去代号所在的地址偏移量
        mov ah,3fh       ;3f号功能
        mov bx,[si]
        int 21h        
        jc next           ;jc是判断CF标志位的若cf=1表示关闭文件出错跳转到next执行处理程序        
       mov ah,3dh         ;3d号功能的调用
       mov al,00h         ;00指定了打开这个文件只为了读
       lea dx,path_name   ;ASCIZ串地址首地址
       int 21h            ;开启软中断
       jc next            ;jc是判断CF标志位的若cf=1表示打开文件过程出错跳转到next执行处理程序        
       lea bx,codename    ;获取存储代号的地址偏移量
       mov [bx],ax        ;寄存器的间接寻址,将AX中的代号数据保存起到codename中   
        lea si,codename   
        mov ah,3fh
        lea dx,buffer      ;读出的数据存储在buffer中
        mov bx,[si]        ;同样bx存储的是文件的代号
        mov cx,13h         ;你打算要读取的字节数根据需要任意设定
        int 21h
        jc next            ;jc是判断CF标志位的若cf=1表示读取文件出错跳转到next执行处理程序
        lea si,codename   
        mov ah,3fh         ;3f号功能可以关闭文件,打开文件后需要关闭文件
        mov bx,[si]        ;文件代号
        int 21h        
        jc next            ;jc是判断CF标志位的若cf=1表示关闭文件出错跳转到next执行处理程序   
        mov dx,offset buffer    ;获取偏移量
        mov ah,09h
        int 21h
    final:
        mov ah,4ch          ;返回DOS系统
        int 21h
    next:
        lea dx,error   ;若没有建立文件则输出错误信息
        mov ah,09
        int 21h
        jmp final                 
       ; main ENDP
        CODE ENDS
end start      ;程序结束
汇编语言实现字符的排序:
;================================================
assume cs:code,ds:data
data   segment
    msg1  db  'Before sort: $'
    crlf  db  0dh, 0ah, '$'
    msg2  db  'After sort : $'
;----------------------------------
    BUFSIZE DB 100          ;最多可键入50个字符.
    ACTLEN  DB ?           ;实际键入的字符数.
    CHARS   DB 100 DUP(20H) ;实际键入的字符从此开始存放.
data   ends
;----------------------------------
code   segment
start:
MAIN   PROC   FAR             ;主程序.
    mov  ax, data
    mov  ds, ax
    mov  dx, offset msg1
    mov  ah, 9
    int  21h
    MOV  DX, OFFSET BUFSIZE   ;键入缓冲区起始偏移地址送DX
    MOV  AH, 0AH
    INT  21H                  ;输入字符串并送入缓冲区.
;-----------------------
    MOV  CL, ACTLEN           ;取得输入的字符数.
    ADD  CL, 0
    JNZ  ok                   ;长度不为零就去排序.
    JMP  EXIT_MAIN
;-----------------------
ok:   
    mov  dx, offset crlf
    mov  ah, 9
    int  21h
    mov  dx, offset msg2
    mov  ah, 9
    int  21h
;-----------------------
    CALL SORT     ;调用排序子程序.
;-----------------------
    XOR  CX, CX
    MOV  CL, ACTLEN           ;取得输入的字符数.
    MOV  DX, OFFSET CHARS     ;输入的字符串起始地址送DX
    MOV  BX, DX               ;将字符串首地址送BX
    ADD  BX, CX               ;取到字符串尾地址.
    MOV  BYTE PTR [BX], '$'   ;在字符串尾插$
    MOV  AH, 09H              ;字符串显示功能.
    INT  21H                  ;显示键入的字符串.
EXIT_MAIN:
    mov  ah, 4ch
    int  21h                  ;返回DOS
MAIN  ENDP                    ;主程序的末尾.
;----------------------------------
SORT  PROC         ;排序子程序.
    XOR  CX, CX
    MOV  CL, ACTLEN           ;取得输入的字符数.
    DEC  CX
    mov  si, offset CHARS
s:  push cx
    mov  di, si
s1: mov  al, [di]
    inc  di
    cmp  al, [di]
    jb   jx
    xchg al, [di]
    mov  [di - 1], al
jx:
    loop s1
    pop  cx
    loop s
    RET           ;子程序返回主程序.
SORT  ENDP
;----------------------------------
code   ends
end start
;================================================



问题:怎么能从键盘上输入字符保存成.txt格式,然后对文本中的内容进行排序,并打印输出???

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-18 17:21:25 | 显示全部楼层
消灭0回复,坐等高手解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 18:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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