最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Zeal8bit OS在Emulator中的單步調(diào)試

2023-07-08 23:34 作者:timfang1990  | 我要投稿

0 前言

本文介紹了如何在網(wǎng)頁Emulator中設(shè)置單步調(diào)試Zeal8bit OS的詳細(xì)操作步驟,結(jié)合Zeal8bit OS源碼可以更加高效、直觀地理解OS的執(zhí)行流程。

這幾天開始閱讀Zeal8bit OS(以下簡稱ZOS)源碼,發(fā)現(xiàn)Z80匯編閱讀起來還是比較困難的,畢竟自己僅有8086/8088匯編的基礎(chǔ),還是很多年前在大學(xué)課堂學(xué)的,這么多年不用早忘得差不多了。

現(xiàn)在去網(wǎng)上搜索Z80匯編能找到的資料也非常有限,畢竟是80年代的CPU了,這極大地加大了我閱讀源碼的難度。不過還好有ChatGPT可以幫忙分析整段晦澀難懂的代碼,勉強(qiáng)支撐著我能將源碼閱讀下去。

但是即使有現(xiàn)代科技加持,面對流程稍微復(fù)雜點(diǎn)的代碼,總會(huì)出現(xiàn)看了這段忘了前面的尷尬局面。比如,閱讀到driver_init代碼時(shí),HL寄存器一直被高頻使用,其寄存器的值也一直在不斷更新,往往閱讀到子程序后開始使用HL寄存器,結(jié)果忘了HL寄存器保存的內(nèi)存地址值指向哪里,結(jié)果還要往前翻找到子程序調(diào)用的地方再次查看,這極大地影響了源碼閱讀理解效率(driver_init過程啃了一個(gè)禮拜都沒有吃透,效率實(shí)在太低下了)。

翻看Emulator的介紹(網(wǎng)址:https://github.com/Zeal8bit/Zeal-WebEmulator/),發(fā)現(xiàn)這個(gè)Web Emulator有單步調(diào)試的功能:

Z80 Web Emulator的單步調(diào)試功能支持介紹

這讓我眼前一亮,如果能把單步調(diào)試搞起來,那就能實(shí)時(shí)追蹤各個(gè)寄存器和內(nèi)存的值,理解源碼的效率直接起飛,豈不美哉?終于,在一番折騰之后(畢竟Zeal8bit大神沒有詳細(xì)給出Emulator使用步驟,各種功能使用全靠自己摸索),終于搞定了Emulator單步調(diào)試ZOS的過程,在此把詳細(xì)設(shè)置步驟分享出來~

1 環(huán)境及所需工具

  • Linux/Mac OSx

  • z88dk-dis工具

2 操作步驟

Step 1. OS bin文件和z88dk-dis工具準(zhǔn)備

z88dk-dis是一款能將z80的機(jī)器碼反解析成匯編代碼的工具(詳細(xì)介紹:https://github.com/z88dk/z88dk/wiki/Tool-z88dk-dis)。在我們安裝z80dk-asm工具鏈的時(shí)候,其實(shí)已經(jīng)將z88dk-dis工具安裝上了。z88dk-dis工具安裝和OS bin build詳細(xì)過程見:

Zeal8bit操作系統(tǒng)Build & Run In Emulator (基于Ubuntu)

Zeal8bit操作系統(tǒng)Build & Run In Emulator (基于macOS)

以下步驟以MAC OSx系統(tǒng)中的操作為例。

Step 2. Disassemble Code Dump

在Zeal-8-bit-OS目錄下執(zhí)行命令:

z88dk-dis -o 0 -x build/os.map build/os_with_romdisk.img > disassemble.dump

z88dk-dis生成反匯編code

這條命令的含義是:參照build/os.map中的各個(gè)symbol映射表,將ZOS bin文件build/os_with_romdisk.img中的機(jī)器碼從地址0處開始反匯編,并保存到文件disassemble.dump文件中。這樣,Web Emulator就可以獲得bin文件對應(yīng)的反匯編文件,啟用單步調(diào)試功能了。

Step 4. 文件載入及斷點(diǎn)設(shè)置

將os_with_romdisk.img和disassemble.dump讀入到Web Emulator中,并點(diǎn)擊Read file(s)按鈕,直至下方的OS binary和Symbols兩個(gè)Items前面打上綠色的勾。


Bin和Symbol文件載入Emulator

然后在Emulator右上方Breakpoints輸入框中輸入斷點(diǎn),斷點(diǎn)可以是具體的指令的內(nèi)存地址也可以是反匯編文件disassemble.dump中的label。比如我輸入反匯編文件中的label 'zos_drivers_init'然后按下Enter鍵,Emulator自動(dòng)給我轉(zhuǎn)換成了指令內(nèi)存地址,并設(shè)置斷點(diǎn)。

斷點(diǎn)設(shè)置


Step 5. Run & Step Debug

點(diǎn)擊‘Continue(F9)’按鈕,我們就可以發(fā)現(xiàn),Emulator運(yùn)行就停在了內(nèi)存地址‘0x0382’的‘zos_drivers_init’位置了,然后點(diǎn)擊‘Step(F10)’就可以執(zhí)行單步調(diào)試?yán)瞺

從左到右依次為:Continue(F9), Step(F10), Step Over(F11)和Stop
代碼停在了設(shè)置的斷點(diǎn)處(點(diǎn)擊Disassemble標(biāo)簽)
斷點(diǎn)處各個(gè)寄存器中的值顯示

3 后記

隨著單步調(diào)試設(shè)置成功,距離移植ZOS到RV的目標(biāo)的速度也在加快,爭取早日發(fā)布第一版demo,算是對整個(gè)移植過程有個(gè)階段性的成果驗(yàn)收,加油~


Zeal8bit OS在Emulator中的單步調(diào)試的評論 (共 條)

分享到微博請遵守國家法律
黑水县| 藁城市| 巴马| 安丘市| 邢台县| 酉阳| 绥德县| 琼海市| 萨嘎县| 广州市| 无为县| 巴马| 白城市| 台湾省| 仁寿县| 耒阳市| 龙岩市| 三江| 金乡县| 阳泉市| 汉中市| 新余市| 英吉沙县| 衡阳县| 冕宁县| 乌兰察布市| 永定县| 永昌县| 明水县| 永寿县| 射阳县| 定安县| 保德县| 社旗县| 图木舒克市| 长岛县| 朝阳市| 上思县| 扶风县| 鸡泽县| 新沂市|