借鉴NASM做一个简易中文汇编,用来解析过程中用到的一些基本指令。下面通过一个案例展示下:
装载 0x7c00 跳 主体 字 0x90 字 "NAJC " 双字 512 字 1 双字 1 字 2 双字 224 双字 2880 字 0xf0 双字 9 双字 18 双字 2 四字 0 四字 2880 字 0,0,0x29 四字 0xffffffff 字 "JC-OS " 字 "FAT12 " 补字 18 主体: 移 寄加,0 移 段堆,寄加 移 栈指,0x7c00 移 段数,寄加 移 段附,寄加 移 变源,消息 循环输出: 移 寄加低,[变源] 加 变源,1 比 寄加低,0 等跳 最后 移 寄加高,0x0e 移 寄基,15 中断 0x10 跳 循环输出 最后: 休 跳 最后 消息: 字 0x0a, 0x0a 字 "HELLONAJC" 字 0x0a 字 0 补字 0x7dfe-0x7c00-($-$$) 字 0x55, 0xaa 字 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 补字 4600 字 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 补字 1469432
上面代码做些解释,“装载 0x7c00”是主引导的地址,主引导一共是512字节。“字 "FAT12 "”看可以看出用来只做FAT12的软盘,上面是相关格式。“字 "HELLONAJC"”是引导启动时输入的信息。这里还不能使用汉字,由于这时的系统还没有汉字的格式支持,中断指令int 0x10不支持中文。“补字 0x7dfe-0x7c00-(
鉴于使用目前只完成部分汇编指令: 编号 中文指令 对照英文指令 1 装载 ORG 2 字 DB 3 双字 DW 4 四字 DD 5 补字 RESB 6 跳 JMP 7 比 CMP 8 溢跳 JO 9 不溢跳 JNO 10 低跳 JB 11 不低跳 JNB 12 等跳 JE 13 不等跳 JNE 14 高跳 JA 15 不高跳 JNA 16 低等跳 JBE 17 不低等跳 JNBE 18 负跳 JS 19 非负跳 JNS 20 奇偶跳 JP 21 非奇偶跳 JNP 22 小于跳 JL 23 不小于跳 JNL 24 大于跳 JG 25 不大于跳 JNG 26 移 MOV 27 加 ADD 28 寄加 AX 29 寄加高 AH 30 寄加低 AL 31 寄基 BX 32 寄基高 BH 33 寄基低 BL 34 寄计 CX 35 寄计高 CXH 36 寄计低 CXL 37 变源 SI 38 变目 DI 39 基指 BP 40 栈指 SP 41 高寄加 EAX 42 高寄基 EBX 43 高寄计 ECX 44 高寄数 EDX 45 高栈指 ESP 46 高基指 EBP 47 高变源 ESI 48 高变目 EDI 49 段代 CS 50 段数 DS 51 段堆 SS 52 段附 ES 53 段附1 FS 54 段附2 GS 55 入栈 PUSH 56 出栈 POP 57 中断 INT 58 休 HLT