把两个功能做成一个?谁可以帮我修改一下?
汇编语言读出文件的内容;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格式,然后对文本中的内容进行排序,并打印输出???
消灭0回复,坐等高手解答。
页:
[1]