第10章 代碼的跳轉(zhuǎn)(1)(X86匯編教程)
這一章講的是跳轉(zhuǎn),跳轉(zhuǎn)是什么呢?跳轉(zhuǎn)就是當(dāng)代碼執(zhí)行到一定地方后跳到另一個(gè)地方去執(zhí)行.跳轉(zhuǎn)是很重要的,有了跳轉(zhuǎn)電腦才能根據(jù)鼠標(biāo)鍵盤的操作執(zhí)行相應(yīng)的代碼.如果沒有跳轉(zhuǎn),電腦就只能按照設(shè)定的路一直走.管你鼠標(biāo)鍵盤怎么動(dòng).一段代碼執(zhí)行過去就死機(jī)了.而有了跳轉(zhuǎn),你按下鼠標(biāo)的時(shí)候電腦就能跳轉(zhuǎn)到鼠標(biāo)相關(guān)代碼去執(zhí)行.
不過,能根據(jù)情況判斷的跳轉(zhuǎn)是比較復(fù)雜的,要很久之后才教,這一章先教"無條件跳轉(zhuǎn)",所謂的無條件跳轉(zhuǎn)就是不管什么情況,有沒有碰到鼠標(biāo)鍵盤只要運(yùn)行到無條件跳轉(zhuǎn)代碼都會(huì)跳轉(zhuǎn)."圖"解↓
某行代碼
某行代碼
某行代碼
無條件跳轉(zhuǎn)代碼,向下跳3行──┐
某行代碼│
某行代碼│
某行代碼←─────────┘
某行代碼
某行代碼
就這樣,CPU碰到跳轉(zhuǎn)代碼后就會(huì)跳轉(zhuǎn)到代碼指定的地方執(zhí)行.可以上跳也可以下跳.當(dāng)然,不可能用行數(shù)來表達(dá)想跳轉(zhuǎn)的地方的.因?yàn)閰R編終究會(huì)轉(zhuǎn)換成機(jī)器碼,機(jī)器碼可不是按行來算的,而是字節(jié).不過,放心,我們學(xué)的是匯編,不是機(jī)器碼,我們只要告訴編譯器我們要跳轉(zhuǎn)到哪一行,匯編編譯器會(huì)自動(dòng)把相差的字節(jié)數(shù)計(jì)算出來寫上去的.
那么,我們?nèi)绾胃嬖V編譯器,我們要跳轉(zhuǎn)到哪一行呢?這就得用到標(biāo)號(hào)了.還記得前邊講解的匯編代碼格式嗎?在指令名前邊還能加個(gè)叫做"標(biāo)號(hào)"的東西,用":"(不含雙引號(hào))和指令區(qū)分開.實(shí)例如下↓
BiaoHao:MOV AX,BX
我們可以在匯編指令前面加個(gè)標(biāo)號(hào),然后在我們的跳轉(zhuǎn)指令里邊加上這個(gè)標(biāo)號(hào),就能跳轉(zhuǎn)到這行代碼了.
好了,說了這么多,該介紹跳轉(zhuǎn)指令了...
指令名:JMP
操作數(shù)數(shù)量:1
操作數(shù)名:內(nèi)存地址(就是代碼標(biāo)號(hào)啦)
指令用途 :跳轉(zhuǎn)到內(nèi)存指定地方執(zhí)行代碼
實(shí)例:
某行代碼
某行代碼
JMP BiaoHao
某行代碼
某行代碼
BiaoHao:MOV AX,BX
某行代碼
恩,這一章就講到這里了.
例行作業(yè):
編寫一段程序,要求有2個(gè)以上的標(biāo)號(hào).
3次以上的跳轉(zhuǎn)
禁止跳轉(zhuǎn)到同一個(gè)地方超過2次
作業(yè)提交郵箱:o7007@vip.qq.com
提交作業(yè)請(qǐng)發(fā)代碼..我可不想去debug里跟蹤程序..
評(píng)論