[BX]和loop指令03 - 零基础入门学习汇编语言25
生活随笔
收集整理的這篇文章主要介紹了
[BX]和loop指令03 - 零基础入门学习汇编语言25
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第五章:[BX]和loop指令03
?讓編程改變世界
Change the world by program
?
從上邊的課程中,我們可以總結(jié)出用cx和loop 指令相配合實(shí)現(xiàn)循環(huán)功能的三個(gè)要點(diǎn):
(1)在cx中存放循環(huán)次數(shù); (2)loop 指令中的標(biāo)號(hào)所標(biāo)識(shí)地址要在前面; (3)要循環(huán)執(zhí)行的程序段,要寫在標(biāo)號(hào)和loop 指令的中間。 ?用cx和loop指令相配合實(shí)現(xiàn)循環(huán)功能的程序框架如下:
mov cx,循環(huán)次數(shù)
s: 循環(huán)執(zhí)行的程序段
loop s
?問題5.2
用加法計(jì)算123 x236 ,結(jié)果存在ax 中。 思考后看分析。 ?分析:可用循環(huán)完成,將123加236次。可先設(shè)(ax)=0,然后循環(huán)做236次(ax)=(ax)+123。
程序代碼 [codesyntax lang="asm"] assume cs:codecode segmentmov ax,0mov cx,236s:add ax,123loop smov ax,4c00hint 21h code endsend [/codesyntax] ?問題5.3
改進(jìn)問題5.2程序,提高123x236 的計(jì)算速度。 思考后看分析。 ?分析:問題5.2程序做了236 次加法,我們可以將236 加123次。可先設(shè)(ax)=0,然后循環(huán)做123次(ax)=(ax)+236,這樣可以用123 次加法實(shí)現(xiàn)相同的功能。
? 程序代碼請(qǐng)自行實(shí)現(xiàn)。(參考代碼) [codesyntax lang="asm"] assume cs:codecode segmentmov ax,0mov cx,123s: add ax,232loop smov ax,4c00hint 21h code endsend [/codesyntax] ?在Debug中跟蹤用loop指令實(shí)現(xiàn)的循環(huán)程序
?考慮這樣一個(gè)問題,計(jì)算ffff:0006單元中的數(shù)乘以3,結(jié)果存儲(chǔ)在dx中。我們分析一下:
(1)運(yùn)算后的結(jié)果是否會(huì)超出dx所能存儲(chǔ)的范圍? ffff:0006 單元中的數(shù)是一個(gè)字節(jié)型的數(shù)據(jù),范圍在0~255之間,則用它和3相乘結(jié)果不會(huì)大于65535,可以在dx 中存放下。 (2)我們用循環(huán)累加來實(shí)現(xiàn)乘法,用哪個(gè)寄存器進(jìn)行累加? 我們將ffff:0006單元中的數(shù)賦值給ax,用dx進(jìn)行累加。先設(shè)(dx)=0,然后做3次(dx)=(dx)+(ax)。 (3) ffff:0006單元是一個(gè)字節(jié)單元,ax是一個(gè) 16 位寄存器,數(shù)據(jù)長(zhǎng)度不一樣,如何賦值? 注意,我們說的是“賦值”,就是說,讓 ax 中的數(shù)據(jù)的值(數(shù)據(jù)的大小)和ffff:0006 單元中的數(shù)據(jù)的值(數(shù)據(jù)的大小)相等。 8位數(shù)據(jù)01H和16位數(shù)據(jù)0001H的數(shù)據(jù)長(zhǎng)度不一樣,但它們的值是相等的。 ?那么我們?nèi)绾钨x值?
ffff:0006單元中的數(shù)據(jù)是XXH,若要ax中的值和ffff:0006單元中的相等,ax中的數(shù)據(jù)應(yīng)為00XXH。 所以,若實(shí)現(xiàn)ffff:0006單元向ax 賦值,我們應(yīng)該令(ah)=0,(al)=(ffff6H)。 實(shí)現(xiàn)計(jì)算ffff:0006單元中的數(shù)乘以3,結(jié)果存儲(chǔ)在dx中的程序代碼。 注意程序中的第一條指令mov ax,0ffffh。 我們知道大于9FFFH的十六進(jìn)制數(shù)據(jù)A000H、A001H、…… 、C000H、C001H、……、FFFEH、FFFFH等,在書寫的時(shí)候都是以字母開頭的。而在匯編源程序中,數(shù)據(jù)不能以字母開頭,所以要在前面加0。 ?下面我們對(duì)程序的執(zhí)行過程進(jìn)行跟蹤。
? 首先 ,我們將它編輯為源程序文件,文件名定為 p3.asm ;對(duì)其進(jìn)行編譯連接后生成p3.exe;然后再用Debug對(duì)p3.exe中的程序進(jìn)行跟蹤。 上面,我們通過對(duì)一個(gè)循環(huán)程序的跟蹤,更深入一步地講解了 loop指令實(shí)現(xiàn)循環(huán)的原理。 下面,我們將前面的程序改一下,計(jì)算 ffff:0006單元中的數(shù)乘以 123,結(jié)果存儲(chǔ)在dx中。 ?更改程序:只要將尋循環(huán)次數(shù)改為123。
但是,問題來了……調(diào)試的話怎么辦……總不能搞123次吧……很累的……對(duì)吧 ^v^ 于是乎,我們引入G命令來解決! 也可以是 P 命令!! [buy]?獲得所有教學(xué)視頻、課件、源代碼等資源打包?[/buy] [Downlink href='http://kuai.xunlei.com/d/LBQBGWVECUHX']視頻下載[/Downlink]轉(zhuǎn)載于:https://www.cnblogs.com/LoveFishC/archive/2010/11/30/3846004.html
總結(jié)
以上是生活随笔為你收集整理的[BX]和loop指令03 - 零基础入门学习汇编语言25的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李彦宏:AI不会让工作机会减少 会创造更
- 下一篇: 猜一猜: 以下哪座城市曾被徐霞客称为“极