|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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格式,然后对文本中的内容进行排序,并打印输出???
|
|