基于8086的汇编语言程序设计题——读入一个文本文件并以DEBUG中的D命令格式显示
代码与注释如下
DATA SEGMENT ;数据段定义
BUF1 DB 256 DUP( ? ) ;分配文件存放内容单元
BUF DB 20,? ;设置输入缓存区大小
FILE DB 10 DUP( ? ) ;实际来存储内容的单元
HANDLE DW ? ;用于在成功打开文件后存放文件代号
ERROR_MESSAGE DB 0AH,‘ERROR!’,’’
MESSAGE1 DB ‘My Course Design Program==’,0DH,0AH,’’
DATA ENDSCODE SEGMENT ;代码段定义
ASSUME CS:CODE,DS:DATA ;各段的段寄存器分配
START: MOV AX,DATA ;装入段地址 段寄存器需要使用通用寄存器装入数值
MOV DS,AX
LEA DX,MESSAGE ;取偏移地址 MOV DX,offset MESSAGE
MOV AH,9 ;字符串输出
INT 21H
LEA DX,MESSAGE1
MOV AH,9
INT 21H
LEA DX,MESSAGE2
MOV AH,9
INT 21H
CALL IN_FINAME ; 键盘输入文件名(要包含文件路径)
CALL OPENF ;打开文件
MOV AH,2 ;字符输出
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
LEA DX,MESSAGE
MOV AH,9
INT 21H
MOV CX,16
MOV DI,0
FLAG: LEA BX,BUF1[DI] ;将偏移地址交给输入参数寄存器BX
CALL DISPLAY ;D命令显示文件 从左到右依次是 逻辑地址 存储内容 内容ASCII码显示
ADD DI,16 ;使指针指向下一行文字
loop FLAG
MOV AH,1 ;输入字符继续
INT 21H
MOV AX,4C00H ;交还给操作系统
INT 21H;键盘输入子程序设计IN_FINAME PROC
LEA DX, BUF ;将BUF的偏移地址赋予给了DX
MOV AH,0AH
INT 21H ;键盘输入到缓存区
MOV BL, BUF+1 ;将BUF的首地址提取出来 只有一字节大小 所以只取低位
MOV BH, 0
MOV FILE[BX], 0 ;将首地址内的内容清零
RET
IN_FINAME ENDP;打开文件子程序设计OPENF PROC
PUSH AX ;寄存器保护
PUSH BX
push CX
MOV DX, OFFSET FILE ;将文件名首地址赋给DX
MOV AL,0
MOV AH,3DH ;打开文件中断
INT 21H
JC ERROR ;进位则打开文件失败
MOV HANDLE, AX
MOV BX,AX
MOV CX,256
MOV DX,OFFSET BUF1
MOV AH, 3FH ;读取文件中断
INT 21H
JC ERROR ;进位则读取文件失败
MOV BX,AX
MOV BUF1[BX],’$’
MOV BX, HANDLE
MOV AH, 3EH ;关闭文件中断
INT 21H
JNC END1 ;不进位则关闭文件成功
ERROR:
MOV DX,OFFSET ERROR_MESSAGE
MOV AH,9
INT 21H
END1: POP CX ;寄存器恢复
POP BX
POP AX
RET
OPENF ENDP;D命令显示子程序设计DISPLAY PROC
DISPLAY1:PUSH DI
MOV BX,DATA
CALL DISP2
MOV AH,2
MOV DL,’:’
INT 21H
LEA BX,BUF1[DI]
call DISP2
MOV AH,2
MOV DL,20H
INT 21H ;空格
CALL ASCII ;前面8个HEX 一次需显现两个ASCII码 所以一次子程序中有两个CALL ASCII
MOV DL,’-’
MOV AH,2
INT 21H
CALL ASCII ;后面8个HEX
MOV AH,2
MOV DL,20H
INT 21H ;空格
SUB DI,16
CALL ELEMENT
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
POP DI
RET
DISPLAY ENDPASCII PROC ;ASCII码显示
PUSH AX ;寄存器保护
PUSH CX
PUSH DX
MOV SI,0
ASCII1: MOV BL,[DI]
CALL DISP1 ;嵌套使用DISP1
INC DI
INC SI
CMP SI,8
JE EXIT1
MOV AH,2
MOV DL,20H
INT 21H
JMP ASCII1
EXIT1: POP DX
POP CX
POP AX
RET
ASCII ENDPELEMENT PROC ;显示字符
PUSH AX
PUSH CX
PUSH DX
MOV SI,0
X: MOV AH,2
MOV DL,[DI]
CMP DL,20H ;小于20H的都是控制字符
JLE NEXTT ;为控制字符时 进入NEXTT
JMP NEXTT1 ;不为控制字符时 进入NEXTT1
NEXTT: MOV DL,’.’ ;控制字符都用’.'显示
NEXTT1:INT 21H
INC DI ;使寄存器地址指向下一个元素
INC SI
CMP SI,16 ;判断寄存器是否读取完了本行元素
JE EXIT2 ;是
JMP X ;否
EXIT2: POP DX
POP CX
POP AX
RET
ELEMENT ENDPDISP1 PROC ;段地址显示
PUSH AX
PUSH CX
PUSH DX
MOV CH,2 ;循环次数
REP1: MOV CL,4 ;位移次数
ROL BL,CL ;不带进位循环左移
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JL PRIN1
ADD DL,7
PRIN1: MOV AH,2
INT 21H
DEC CH
JNZ REP1
POP DX
POP CX
pop AX
RET
DISP1 ENDPDISP2 PROC ;偏移地址显示
PUSH AX
PUSH CX
PUSH DX
MOV CH,4 ;循环次数
REP2: MOV CL,4 ;位移次数
ROL BX,CL
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,3AH ;判断十六进制数是否属于0 ~ 9
JL PRIN2
ADD DL,7
PRIN2: MOV AH,2
INT 21H
DEC CH
JNZ REP2
POP DX
POP CX
POP AX
RET
DISP2 ENDPCODE ENDS
END START
debug 调试hadoop 命令 debug中d命令
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:iOS组件国际化
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
DEBUG命令大全
启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。 Debug [[drive:][pat\
汇编 list 扩展 parameters 磁盘 -
debug java 命令行 java debug调试怎么用?
1.1什么是Debug模式【理解】是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
debug java 命令行 Java基础 数组 System 初始化