当前位置: 代码迷 >> 汇编语言 >> 简单代码,求详细诠释
  详细解决方案

简单代码,求详细诠释

热度:158   发布时间:2016-05-02 04:28:05.0
简单代码,求详细注释。
,刚看汇编。希望给个详细的每行代码解释。不甚感激。
代码是简单的建立一个文件夹。但是我刚看书,实在是不懂。
比如红色部分。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
  相关解决方案