,刚看汇编。希望给个详细的每行代码解释。不甚感激。
代码是简单的建立一个文件夹。但是我刚看书,实在是不懂。
比如红色部分。name+1,是表示什么意思?指针跳到下一个地址?看内容是否为空?那dos下的文件夹名,只能是2字节或4字节?不对吧。
还有绿色部分,求name+2的指针 的偏移量是什么意思?
DATAS SEGMENT
DNAME DB 30
DB ?
DB 30 DUP(?),0
SMSG DB 'OK',10,13,'$'
FMSG DB 'FAILURE',10,13,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,0AH
LEA DX,DNAME
INT 21H
MOV BL,DNAME+1
CMP BL,0
JZ OVER
XOR BH,BH
MOV DNAME[BX+2],0
MOV DX,OFFSET DNAME+2
MOV AH,39H
INT 21H
JC F
JMP T
F:
LEA DX,FMSG
MOV AH,09H
INT 21H
JMP OVER
T:
LEA DX,SMSG
MOV AH,09H
INT 21H
OVER:
MOV AH,4CH
INT 21H
CODES ENDS
END START
------解决思路----------------------
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
学会在DosBox里面使用TurboDebug或CodeView
------解决思路----------------------
DATAS SEGMENT
DNAME DB 30 ;分配1个字节,且值为30 数据段第一行 AAA
DB ? ;分配1个字节,不赋值 数据段第二行BBB
DB 30 DUP(?),0 ;分配31个字节,前30个不赋值,最后一个赋值位0 数据段第三行 CCC
SMSG DB 'OK',10,13,'$' ;10 13代表回车与换行 数据段第四行DDD
FMSG DB 'FAILURE',10,13,'$' 数据段第5行EEE
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX ;初始化代码段的段地址
MOV AH,0AH
LEA DX,DNAME
INT 21H ;接受键盘输入
MOV BL,DNAME+1 ;BL指向数据段的第二个字节(存储的是键盘按下了几次)
CMP BL,0
JZ OVER ;如果没有键按下就退出程序
XOR BH,BH ;异或运算 相同取0,相异取1 其实就是清零
;(个人认为这这条指令有问题)
MOV DNAME[BX+2],0 ;BX表示实际输入的字符数,即是AAA开始的第bx个单元赋值位0
MOV DX,OFFSET DNAME+2 ;取得刚才赋值的内存单元的偏移地址(数据段)
MOV AH,39H
INT 21H ;建立子目录
JC F ;有进位就转移到F(没搞懂撒意思)
JMP T ;无条件转移到T
F:
LEA DX,FMSG ;把FMSG的段偏移传给DX
MOV AH,09H
INT 21H ;在屏幕上显示OK
JMP OVER ;结束程序
T:
LEA DX,SMSG ;把SMSG的段偏移传给DX
MOV AH,09H
INT 21H ;在屏幕上显示FAILURE
OVER:
MOV AH,4CH
INT 21H ;退出程序
CODES ENDS
END START