我必须在汇编中编写程序(使用TASM进行编译),这将创建一个文本文件并将数据写入其中。它应该类似于包含用户活动信息的日志文件。
下面是一个小示例程序的代码,可以让您更好地理解我的意思。一旦程序运行,它应该创建一个文本文件,并在其中写入一条消息"程序开始工作"。如果用户按了"1"它会写一条消息"用户按下1";转换成文本文件。如果用户按"2";它会写"用户按下2";转换成文本文件。如果用户按下"3";它会写"程序完成它的工作";转换成文本文件。文本文件中的每条消息都应该从新的一行开始。.model small
.data
msg_start db "Press 1 or 2",0dh, 0ah,"Press 3 to exit the program$"
msg_1 db "You pressed 1" ,0dh, 0ah,"Press any key to continue$"
msg_2 db "You pressed 2" ,0dh, 0ah,"Press any key to continue$"
.code
.startup
start:
;Clearing screen
MOV AH, 0
MOV AL, 2
INT 10H
;Start message output
mov ax, seg msg_start
mov ds, ax
mov dx, offset msg_start
mov ah, 9h
int 21h
;Ask user to press the key
mov ah, 1h
int 21h
;Comparing pressed key
cmp al, 31h ;Pressed "1"
je label_1 ;Jump to "label_1"
cmp al, 32h ;Pressed "2"
je label_2 ;Jump to "label_2"
cmp al, 33h ;Pressed "3"
je label_3 ;Jump to "label_3"
jmp start ;Pressed any other key
label_1:
;Clearing screen
MOV AH, 0
MOV AL, 2
INT 10H
;Message output
mov ax, seg msg_1
mov ds, ax
mov dx, offset msg_1
mov ah, 9h
int 21h
;Ask user to press the key
mov ah, 1h
int 21h
cmp al, 33h ;Pressed "3"
je label_3 ;Jump to "label_3"
jmp start ;Jumping to start label
label_2:
;Clearing screen
MOV AH, 0
MOV AL, 2
INT 10H
;Message output
mov ax, seg msg_2
mov ds, ax
mov dx, offset msg_2
mov ah, 9h
int 21h
;Ask user to press the key
mov ah, 1h
int 21h
cmp al, 33h ;Pressed "3"
je label_3 ;Jump to "label_3"
jmp start ;Jumping to start label
label_3:
;Exit the program
mov ah, 4ch
mov al, 01
int 21h
end
当您想要处理文件时,您需要使用操作系统的一些服务。DOS函数由INT 21h提供。查找名称中带有FILE的函数(忘记过时的FCB文件函数)。
对磁盘文件的操作需要文件句柄,它是文件创建时由操作系统建立的内部对象标识符。句柄可以通过CREATE FILE
函数从DOS中获得。.data
FileName DB "Rimanio.log",0
.text
MOV AH,3Ch ; Function CREATE OR TRUNCATE FILE.
SUB CX,CX ; 0=Normal file attributes.
MOV DX, OFFSET FileName ; Offset of file name.
INT 21h ; Invoke DOS function.
JC Error ; Go to report if error occured.
MOV BX,AX ; Save the handle to BX.
使用刚刚创建的文件的句柄可以很容易地向其写入字符串,使用write。写应该用CLOSE FILE结束,这将刷新写入文件的内容,并更新其大小、时间和其他属性。然后,您可以在控制台窗口中使用type Rimanio.log
检查它。