生活随笔
收集整理的這篇文章主要介紹了
汇编语言不带冒号标号的用法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
匯編語言中,有一種編程方法:直接定址表
這種方法和高級(jí)語言,C語言中的數(shù)組有類似的思想,就是將參數(shù)編排在一起,然后通過數(shù)組名的調(diào)用,得到需要的數(shù)值
匯編語言中,帶冒號(hào)的標(biāo)號(hào)在程序中可以知道代碼的位置,而不帶冒號(hào)的標(biāo)號(hào)可以在程序中找到代碼位置的同時(shí)知道所表示的參數(shù)的大小
比如說:table db 0,這里的table就是一個(gè)不帶冒號(hào)的標(biāo)號(hào),如果定位到這個(gè)標(biāo)號(hào),那么就知道這個(gè)標(biāo)號(hào)后面的數(shù)值是db型的
這里還需要強(qiáng)調(diào)一下call指令的一種用法,call word ptr 內(nèi)存單元地址
這個(gè)指令的作用可以寫為:push IP
jmp word ptr 內(nèi)存單元地址
這樣,在用直接地址的方法時(shí),就可以用call指令來定位表中存放的標(biāo)號(hào)地址,調(diào)用子函數(shù),下面的例程就是用call指令來實(shí)現(xiàn)對(duì)地址的定址方法
代碼功能:用ah來確定調(diào)用的子函數(shù)的序號(hào),第一個(gè)子函數(shù)是清屏的功能,第二個(gè)子函數(shù)是改變字體顏色的功能
代碼:
[plain]?view plain
?copy assume?cs:code?? ?? code?segment?? ?? ????table?dw?sub1,?sub2???????????????????????????????????????????????????????????????????????;用直接定址表進(jìn)行地址的尋找?? ?? ????start:??????????????????????????????????????????????mov?ah,?1????????????????;ah存放調(diào)用的函數(shù)的序號(hào)ah是0就調(diào)用sub1,ah是1就調(diào)用sub2?? ????????????????????????????????????????????????????????mov?bl,?ah?? ????????????????????????????????????????????????????????mov?bh,?0?? ????????????????????????????????????????????????????????add?bx,?bx?????????????????????????????;因?yàn)閠able是dw型的數(shù)據(jù),所以要定址,必須要將定址的序列號(hào)乘以2?? ????????????????????????????????????????????????????????mov?al,?2????????????????;al存放的是顏色值?? ????????????????????????????????????????????????????????call?word?ptr?table[bx]????????????????;這句就是call的用法,直接定址到標(biāo)號(hào)處,直接調(diào)用標(biāo)號(hào)的函數(shù)?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????mov?ax,?4C00H?? ????????????????????????????????????????????????????????int?21H?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????sub1:???????????push?bx?????????????????????????????????;函數(shù)的作用是清屏?? ????????????????????????????????????????????????????????push?cx?? ????????????????????????????????????????????????????????push?es?? ????????????????????????????????????????????????????????push?ax?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????mov?bx,?0B800H?? ????????????????????????????????????????????????????????mov?es,?bx?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????mov?bx,?0?? ????????????????????????????????????????????????????????mov?cx,?2000?? ????????????????????????????????????????????????s1:?????mov?byte?ptr?es:[bx],?'?'?? ????????????????????????????????????????????????????????add?bx,?2?? ????????????????????????????????????????????????????????loop?s1?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????pop?ax?? ????????????????????????????????????????????????????????pop?es?? ????????????????????????????????????????????????????????pop?cx?? ????????????????????????????????????????????????????????pop?bx?? ????????????????????????????????????????????????????????ret?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????sub2:???????????push?ax?????????????????????????????;函數(shù)的功能是改變字體的顏色?? ????????????????????????????????????????????????????????push?es?? ????????????????????????????????????????????????????????push?bx?? ????????????????????????????????????????????????????????push?cx?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????mov?bx,?0B800H?? ????????????????????????????????????????????????????????mov?es,?bx?? ????????????????????????????????????????????????????????mov?bx,?1?? ????????????????????????????????????????????????????????mov?cx,?2000?? ????????????????????????????????????????????????s2:?????and?byte?ptr?es:[bx],?11111000B??????;先將后三位用and運(yùn)算清零?? ????????????????????????????????????????????????????????or?byte?ptr?es:[bx],?al??????????????;用or運(yùn)算將后三位用al替代?? ????????????????????????????????????????????????????????add?bx,?2?? ????????????????????????????????????????????????????????loop?s2?? ?????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????pop?cx?? ????????????????????????????????????????????????????????pop?bx?? ????????????????????????????????????????????????????????pop?es?? ????????????????????????????????????????????????????????pop?ax?? ????????????????????????????????????????????????????????ret?? ?????????????????????????????????????????????????????????? code?ends?? end?start??
當(dāng)ah是0時(shí):
當(dāng)ah是1時(shí):
總結(jié)
以上是生活随笔為你收集整理的汇编语言不带冒号标号的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。