封于修 发表于 2014-12-17 19:06:20

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

汇编语言读出文件的内容;
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 ,ax       ;寄存器的间接寻址,将AX中的代号数据保存起到codename中
      lea si,codename;回去代号所在的地址偏移量
      mov ah,40h       ;记住是DOS的40号功能
      lea dx,string    ;将需要传递的数据的地址偏移量传送给dx寄存器
      mov bx,      ;bx接收的是文件代号数据(表示寄存器间接寻址方式)
      mov cx,13h       ;cx存储你打算写入的字符串的字节数
      int 21h          ;开启软中断
      jc next          ;jc是判断CF标志位的若cf=1表示对文件的写出错跳转到next执行处理程序      
      lea si,codename;回去代号所在的地址偏移量
      mov ah,3fh       ;3f号功能
      mov bx,
      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 ,ax      ;寄存器的间接寻址,将AX中的代号数据保存起到codename中   
      lea si,codename   
      mov ah,3fh
      lea dx,buffer      ;读出的数据存储在buffer中
      mov bx,      ;同样bx存储的是文件的代号
      mov cx,13h         ;你打算要读取的字节数根据需要任意设定
      int 21h
      jc next            ;jc是判断CF标志位的若cf=1表示读取文件出错跳转到next执行处理程序
      lea si,codename   
      mov ah,3fh         ;3f号功能可以关闭文件,打开文件后需要关闭文件
      mov bx,      ;文件代号
      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
    msg1db'Before sort: $'
    crlfdb0dh, 0ah, '$'
    msg2db'After sort : $'
;----------------------------------
    BUFSIZE DB 100          ;最多可键入50个字符.
    ACTLENDB ?         ;实际键入的字符数.
    CHARS   DB 100 DUP(20H) ;实际键入的字符从此开始存放.
data   ends
;----------------------------------
code   segment
start:
MAIN   PROC   FAR             ;主程序.
    movax, data
    movds, ax
    movdx, offset msg1
    movah, 9
    int21h
    MOVDX, OFFSET BUFSIZE   ;键入缓冲区起始偏移地址送DX
    MOVAH, 0AH
    INT21H                  ;输入字符串并送入缓冲区.
;-----------------------
    MOVCL, ACTLEN         ;取得输入的字符数.
    ADDCL, 0
    JNZok                   ;长度不为零就去排序.
    JMPEXIT_MAIN
;-----------------------
ok:   
    movdx, offset crlf
    movah, 9
    int21h
    movdx, offset msg2
    movah, 9
    int21h
;-----------------------
    CALL SORT   ;调用排序子程序.
;-----------------------
    XORCX, CX
    MOVCL, ACTLEN         ;取得输入的字符数.
    MOVDX, OFFSET CHARS   ;输入的字符串起始地址送DX
    MOVBX, DX               ;将字符串首地址送BX
    ADDBX, CX               ;取到字符串尾地址.
    MOVBYTE PTR , '$'   ;在字符串尾插$
    MOVAH, 09H            ;字符串显示功能.
    INT21H                  ;显示键入的字符串.
EXIT_MAIN:
    movah, 4ch
    int21h                  ;返回DOS
MAINENDP                  ;主程序的末尾.
;----------------------------------
SORTPROC         ;排序子程序.
    XORCX, CX
    MOVCL, ACTLEN         ;取得输入的字符数.
    DECCX
    movsi, offset CHARS
s:push cx
    movdi, si
s1: moval,
    incdi
    cmpal,
    jb   jx
    xchg al,
    mov, al
jx:
    loop s1
    popcx
    loop s
    RET         ;子程序返回主程序.
SORTENDP
;----------------------------------
code   ends
end start
;================================================



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

lqjstc 发表于 2014-12-18 17:21:25

消灭0回复,坐等高手解答。
页: [1]
查看完整版本: 把两个功能做成一个?谁可以帮我修改一下?