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