?? html1.htm
字號:
小 型 虛 擬 機 模 擬 的 說 明
一.小型虛擬機實現(xiàn)說明:
部件名稱 功能體現(xiàn) 說明
ALU 用于完成算術(shù)及邏輯運算 ALU不與寄存器組連接,故其只能負責(zé)累加器等的內(nèi)容等的運算(指令解釋時將詳細給出)。
CU 控制指令的取值及執(zhí)行 不特別體現(xiàn),主要在執(zhí)行代碼中體現(xiàn),可以通過查看*.lst文件查看指令代碼
累加器A 用于存放運算的操作數(shù)或操作數(shù)的結(jié)果 可以使用逐步跟蹤的方法查看其內(nèi)容,VC版可通過編輯框查看
棧指針寄存器SP 用于存放堆棧的棧頂?shù)刂?查看方法同累加器A
變址寄存器X 可以用于指向存放數(shù)組的起始地址 查看方法同累加器A
狀態(tài)寄存器 Z 用于判斷操作結(jié)果是否為0 查看方法同累加器A
P 用于判斷操作結(jié)果是否為正 查看方法同累加器A
C 用于判斷操作是否有進位 查看方法同累加器A
指令寄存器IR 用于存放當(dāng)前正在執(zhí)行的指令的二進制內(nèi)容 查看方法同累加器A
基址寄存器BP 用于存放程序調(diào)用過程中的地址信息 查看方法同累加器A
程序計數(shù)器PC 用于存放下一條指令的內(nèi)存地址 查看方法同累加器A
本軟件指令集包含了67條指令,使用本軟件時請根據(jù)以下指令格式進行書寫。(注意:本軟件指令不同于一般匯編指令,請嚴(yán)格按照以下說明進行,謝謝!)
指令標(biāo)識符 作用 使用方法
"NOP" 空操作,直接返回 直接使用
"CLRA" 清空累加器A 直接使用
"CLRC" 清進位標(biāo)志為C 直接使用
"CLRX" 清空變址寄存器 直接使用
"CMC" 進位標(biāo)志器取反 直接使用
"INC" 累加器A自增一,影響標(biāo)志器 直接使用
"DEC" 累加器A自減一,影響標(biāo)志器 直接使用
"INCX"; 變址寄存器自增一,影響標(biāo)志器 直接使用
"DECX" 標(biāo)志寄存器自減一,影響標(biāo)志器 直接使用
"TAX" 累加器A送變址寄存器X 直接使用
"INI" 讀一十進制數(shù)送累加器A,影響標(biāo)志器 不能直接給操作數(shù),要在程序運行時才輸入操作數(shù)
"INH" 讀一十六進制數(shù)送累加器A,影響標(biāo)志器 不能直接給操作數(shù),要在程序運行時才輸入操作數(shù)
"INB" 讀一二進制數(shù)送入累加器A,影響標(biāo)志器 不能直接給操作數(shù),要在程序運行時才輸入操作數(shù)
"INA" 讀一ASCII碼送入累加器A,影響標(biāo)志器 不能直接給操作數(shù),要在程序運行時才輸入操作數(shù)
"OTI" 以十進制形式輸出累加器A的內(nèi)容 直接使用,在輸出口看結(jié)果
"OTC" 以無符號10進數(shù)形式輸出累加器A的內(nèi)容 直接使用,在輸出口看結(jié)果
"OTH" 以16進形式輸出累加器A的內(nèi)容 直接使用,在輸出口看結(jié)果
"OTB" 以無符號2進制形式輸出累加器A的內(nèi)容 直接使用,在輸出口看結(jié)果
"OTA" 以ascii字符形式輸出累加器A的內(nèi)容 直接使用,在輸出口看結(jié)果
"PUSH" 將累加器A的內(nèi)容壓入棧頂,堆棧指針SP減1 直接使用
"POP" 將棧頂元素送入累加器A,堆棧指針SP加1 直接使用,影響標(biāo)志寄存器
"SHL" 累加器A內(nèi)容左移一位,移出位進入進位標(biāo)志C 直接使用,影響標(biāo)志寄存器
"SHR" 累加器A內(nèi)容右移一位,移出位進入進位標(biāo)志C 直接使用,影響標(biāo)志寄存器
"RET" 子程序調(diào)用返回,將棧頂內(nèi)容送PC,退棧 直接使用
"HALT" 停機指令 直接使用
"LDA B" 將B地址內(nèi)容送累加器A 直接使用
"LDX B" 將變址寄存器加偏移量B的地址內(nèi)容送A 直接使用
"LDI B" 將PC所指內(nèi)存單元內(nèi)容,即B送入累加器A 直接使用
"LSP B" 將B地址內(nèi)容送入SP 直接使用
"LSPI B" 將B送入SP 直接使用
"STA B" 將累加器A的內(nèi)容寫入B地址 直接使用
"STX B" 將累加器A的內(nèi)容寫入使用變址尋址方式偏移量為B的內(nèi)存單元中 直接使用
"ADD B" 累加器A內(nèi)容加B地址內(nèi)容結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"ADX B" 累加器A內(nèi)容加上變址尋址(尋址方式同STX)地址的內(nèi)容結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"ADI B" 累加器A的內(nèi)容加B結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"ADC B" 累加器A與B與進位位相加,結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"ACX B" 累加器與變址尋址(偏移量為B)、進位位相加,結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"ACI B" 累加器與B立即數(shù)、進位位C相加,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"SUB B" 累加器與B地址內(nèi)容相減,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"SBX B" 累加器與變址尋址方式(偏移量為B)的內(nèi)容相減,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"SBI B" 累加器與立即數(shù)B相減,結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"SBC B" 累加器與B地址內(nèi)容及進位位內(nèi)容相減,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"SCX B" 累加器與變址尋址方式(偏移量為B)及進位位相減,結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"SCI" 累加器與立即數(shù)B及進位位相減,結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"CMP B" 累加器與B地址內(nèi)容相比較 直接使用,影響標(biāo)志寄存器
"CPX B" 累加器與變址尋址方式(偏移量為B)的內(nèi)容作比較 直接使用,影響標(biāo)志寄存器
"CPI B" 累加器與B相比 直接使用,影響標(biāo)志寄存器
"ANA B" 累加器與B地址內(nèi)容相位與,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"ANX B" 累加器與變址尋址方式(偏移量為B)的內(nèi)容相位與,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"ANI B" 累加器與立即數(shù)B相位與,結(jié)果送累加器 直接使用,影響標(biāo)志寄存器
"ORA B" 累加器與B地址內(nèi)容進行位或操作,結(jié)果送入累加器 直接使用,影響標(biāo)志寄存器
"ORX B" 累加器與變址尋址方式(偏移量為B)做位或操作,結(jié)果送累加器A 直接使用,影響標(biāo)志寄存器
"ORI B" 累加器與立即數(shù)B相位或,結(jié)果存入累加器中 直接使用,影響標(biāo)志寄存器
"JMP B" 無條件跳轉(zhuǎn)至B地址 直接使用
"BZE B" 只有Z為1才跳轉(zhuǎn)到B地址 直接使用
"BNZ B" 只有Z為0才跳轉(zhuǎn)到B地址 直接使用
"BPZ B" 只有P為1才跳轉(zhuǎn)到B地址 直接使用
"BNG B"; 只有P為0才跳轉(zhuǎn)到B地址 直接使用
"BCC B" 只有C為0才跳轉(zhuǎn)到B地址 直接使用
"BCS B" 只有C為1才跳轉(zhuǎn)到B地址 直接使用
"TSP " 將棧指針SP內(nèi)容送累加器A 直接使用
"JSR" 調(diào)用子程序,將返回地址壓棧 直接使用
"LBPI B" 使用機制尋址方式,將偏移量為B的內(nèi)存單元內(nèi)容送累加器A 直接使用
"FBPI B" 將立即數(shù)B送入基址指針寄存器BP 直接使用
"TBP" 將基址指針寄存器BP的內(nèi)容送A 直接使用
"TSB" 將棧指針寄存器SP的內(nèi)容送入基址指針寄存器BP 直接使用
"TABP" 將累加器A的內(nèi)容送入基址寄存器BP中 直接使用
使用說明:
此虛擬機模型有兩個版本:DOS版和VC版。下面分別對兩個版本稍加說明。
一. DOS版:
此版本可以直接調(diào)用也可以使用VC版調(diào)用。
使用時可參照以下說明內(nèi)容:
1. 打開程序后,首先必須先輸入你要匯編的文檔路徑,完成對匯編文件的來源初始;
2. 根據(jù)提示我們可以看到它編譯的過程,首先它將進行第一遍掃描,完成對于匯編指令的存儲,標(biāo)識符的紀(jì)錄,空格、解釋的忽略等。然后進入第二遍掃描,負責(zé)檢查匯編文件是否存在標(biāo)識符的誤用(因為匯編中存在向前,向后引用,跳轉(zhuǎn)等操作),匯編指令的誤用……進行兩遍掃描后,程序生成符號表和把機器指令加載到虛擬機內(nèi)存之中,所有的內(nèi)存內(nèi)容將寫入*.map文檔中,使用者可以到那去查看加載后的內(nèi)存內(nèi)容,我們還將翻譯后的匯編指令輸出到*.lst文檔中供使用者檢查是否存在指令的代碼用錯等信息;
3. 接下來使用者可以通過選擇TRACE來實現(xiàn)是否才用逐步跟蹤寄存器狀態(tài)來檢查程序的執(zhí)行過程;而當(dāng)你選擇了"n",你將不能在程序中看到所有寄存器的內(nèi)容你只有到*.map文檔中查看內(nèi)存的內(nèi)容;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -