直接定址表03 - 零基础入门学习汇编语言74
生活随笔
收集整理的這篇文章主要介紹了
直接定址表03 - 零基础入门学习汇编语言74
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第十六章:直接定址表03
?讓編程改變世界
Change the world by program
?
程序入口地址的直接定址表
? 我們看下面的問題:實現(xiàn)一個子程序setscreen ,為顯示輸出提供如下功能:
(1)清屏。 (2)設置前景色。 (3)設置背景色。 (4)向上滾動一行 ? 那么入口參數(shù)如何設置呢?入口參數(shù)說明:
(1)用ah 寄存器傳遞功能號:0 表示清屏,
1表示設置前景色,
2 表示設置背景色,
3 表示向上滾動一行;
? (2)對于2、3號功能,用al傳送顏色值,(al)∈{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }
?下面,我們討論一下各種功能如何實現(xiàn) :
(1)清屏 將顯存中當前屏幕中的字符設為空格符; (2)設置前景色 設置顯存中當前屏幕中處于奇地址的屬性字節(jié)的第0、1、2位; (3)設置背景色 設置顯存中當前屏幕中處于奇地址的屬性字節(jié)的第4、5、6位; (4)向上滾動一行 依次將第 n+1行的內(nèi)容復制到第n行處:最后一行為空。 ? 我們將這4 個功能分別寫為 4 個子程序,請讀者根據(jù)編程思想,自行讀懂下面的程序。 ? 程序功能分別實現(xiàn)講解:gogogo ---->>> ?功能子程序1:清屏
[codesyntax lang="asm"] sub1: push bxpush cxpush esmov bx,0b800hmov es,bxmov bx,0mov cx,2000 sub1s: mov byte ptr es:[bx],' 'add bx,2loop sub1spop espop cxpop bxret [/codesyntax] ? ?功能子程序2:設置前景
[codesyntax lang="asm"] sub2: push bxpush cxpush esmov bx,0b800hmov es,bxmov bx,1mov cx,2000 sub2s: and byte ptr es:[bx],11111000b or es:[bx],al add bx,2loop sub2spop espop cxpop bxret [/codesyntax] ?功能子程序3:設置背景色
[codesyntax lang="asm"] sub3: push bxpush cxpush esmov cl,4shl al,clmov bx,0b800hmov es,bxmov bx,1mov cx,2000 sub3s: and byte ptr es:[bx],10001111bor es:[bx],al add bx,2loop sub2spop espop cxpop bxret [/codesyntax] ?功能子程序4:向上滾動一行
? 參考源碼:相關代碼下載 ? 我們可以將這些功能子程序的入口地址存儲在一個表中,它們在表中的位置和功能號相對應。 ?對應的映射關系為:
功能號*2 = 對應的功能子程序在地址表中的偏移。 ? 源代碼實現(xiàn):相關代碼下載 ? 當然,我們也可以將子程序setscreen如下實現(xiàn):相關代碼下載 ? 顯然,用通過比較功能號進行轉移的方法,程序結構比較混亂,不利于功能的擴充。 比如說,在 setscreen 中再加入一個功能,則需要修改程序的邏輯,加入新的比較、轉移指令。 用根據(jù)功能號查找地址表的方法,程序的結構清晰,便于擴充。 如果加入一個新的功能子程序,那么只需要在地址表中加入它的入口地址就可以了。 [buy]?獲得所有教學視頻、課件、源代碼等資源打包?[/buy] [Downlink href='http://kuai.xunlei.com/d/LIDEZGUBQKQD']視頻下載[/Downlink]轉載于:https://www.cnblogs.com/LoveFishC/archive/2011/06/05/3846103.html
總結
以上是生活随笔為你收集整理的直接定址表03 - 零基础入门学习汇编语言74的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 临时表 DML 产生redo 问题说明
- 下一篇: inux时间问题两篇