关于上一节,我测试了发现3e、4c、4e都OK ,4b 4d 4f都进不去系统还把qemu卡死了。 50不会输出HelloWorld,可能需要hex偶数且在0x3e~4f区间吧。上节复制并运行命令如下:
View Codecopy /y helloos-Copy.img ..z_toolsqemufdimage0.bin && ..z_toolsmake.exe -C ../z_tools/qemu
先不管上一节了,这节我们写HelloWorld
看不清请右击“从新窗口打开图片”,下为P29 P39两页对照
MOV就是赋值,没什么难的。所以我们用P39来研究,方便一点。
既然C语言是顺序结构,那汇编就更是了(事实上的确是),所以我们先挑后面容易的打印字符部分来看
H、L是寄存器高低位,高位0x0e为当前光标处显示字符功能,低位为字符内容(这里通过把数组每个元素赋值给加法寄存器低位)
这一段是这么执行的(C语言的标签):entry => putloop(循环n次) => fin(无限次循环)
goto 就是跳转到标签所在位置,并从标签开始往下执行。如
int i = 0; try: printf("%s", "Hello"); i--; go: printf("%s", "World"); to: if (i < 0) goto try;
这个会执行try => go => to,再跳转到try,重新try go to这样顺序执行下来。(直到i<0才停止)
再看msg标签部分
按照ASCII码表,这个msg明显就是" hello, world