<自己动手写操作系统>2011040101

【分析】

部分代码:
LABEL_SEARCH_IN_ROOT_DIR_BEGIN:

    cmp    word [wRootDirSizeForLoop], 0    ; ┓

    jz    LABEL_NO_LOADERBIN                  ; ┣ 判断根目录区是不是已经读完,如果读完表示没有找到 LOADER.BIN跳转到LABEL_NO_LOADERBIN

    dec    word [wRootDirSizeForLoop]        ; ┛

学习指令:   
CMP
功能: 比较OP1与OP2的值
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O

JMP
功能: 跳往指定地址执行
语法: JMP 地址

JXX
功能: 当特定条件成立则跳往指定地址执行
语法: JXX 地址
注:
  A: ABOVE,当C=0,Z=0时成立
  B: BELOW,当C=1时成立
  C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立
  E: EQUAL,当Z=1时成立
  G: GREATER(大于),当Z=0且S=0时成立
  L: LESS(小于),当S不为零时成立
  N: NOT(相反条件),需和其它符号配合使用
  O: OVERFLOW,O=1时成立
  P: PARITY,P=1时成立
  PE: PARITY EVEN,P=1时成立
  PO: PARITY ODD,P=0时成立
  S: SIGN,S=1时成立
  Z: ZERO,Z=1时成立

INC,DEC
功能: 把OP的值加一或减一
语法: INC OP DEC OP
格式: INC r/m DEC r/m
影响标志: P,A,Z,S,O  
 

在此份代码中,采用nasm编译,在debug中,需要看到JZ对应Zero位{NZ表示Z=0,ZR标志Z=1}
在本地测试情况,显示执行cmp    word [wRootDirSizeForLoop], 0后出现ZR标志,意味着没有找到Loader.bin文件,直接跳转LABEL_NO_LOADERBIN到显示信息的代码去了

如果Z=0呢?
执行dec    word [wRootDirSizeForLoop],表示此字数据减一操作,从而影响标志位Z。

后面的代码模拟不好测试,现在只能自个阅读和分析下面的处理。
今天的学习到此Over了
posted @ 2011-04-01 13:44  西就东城  阅读(211)  评论(0编辑  收藏  举报