日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[BX] 和 loop 指令---汇编学习笔记

發布時間:2025/3/15 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BX] 和 loop 指令---汇编学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[BX] 和 loop 指令

  • [bx]和內存單元的描述
  • loop
  • 我們定義的描述性的符號:“()”,“()”中的元素可以有3中類型:寄存器名、段寄存器名、內存單元的物理地址。
  • 約定符號idata表示常量

  • 5.1 [BX]

    具體實例:

    mov ax,[bx]

    功能:bx中存放的數據作為一個偏移地址EA,段地址SA默認在ds中,將SA:EA處的數據送入ax中。即:(ax) = ((ds)*16+(bx))。

    問題 5.1

    程序和內存中的情況如下圖所示,寫出程序執行后,21000H~21007H單元中的內容。

    程序代碼和結果如下:

    mov ax,2000h ;ax = 2000h mov ds,ax ;ds = 2000h mov bx,1000h ;bx = 1000h mov ax,[bx] ;ax = 00BEh inc bx ;bx = 1001h inc是將后面的內容+1 inc bx ;bx = 1002h mov [bx],ax ;2000:1002 = 00BEh inc bx ;bx = 1003h inc bx ;bx = 1004h mov [bx],ax ;2000:1004 = 00BEh inc bx ;bx = 1005h mov [bx],al ;2000:1005 = BEh inc bx ;bx = 1006h mov [bx],al ;2000:1006 = BEh

    5.2 Loop指令

    loop指令格式:loop 標號

    loop指令執行的時候,進行兩步操作:(cx) = (cx) - 1 和 判斷cx中的值,若不為0則轉至標號處執行程序,若為0則向下繼續執行程序(通俗的說,就是如果不為0繼續循環,為0就退出)。

    任務:

  • 編程計算2^2
  • 編程計算2^3
  • 編程計算2^12
  • 對于上面3個問題,如果我們進行重復輸入指令去計算的話,會發現如果我們要計算一百次,就需要寫幾百行代碼。所以我們引入了loop這個工具。

    程序用loop實現:

    assume cs:codecode segmentmov ax,2mov cx,n ;這里的n代表n+1次方s: add ax,ax ;第一次add時,ax = 4 = 2^2loop s mov ax,4c00hint 21hcode endsend

    問題 5.2

    編程,用加法計算 123*236,結果存在ax中。

    assume cs:codecode segmentmov ax,0mov cx,123m: add ax,236loop mmov ax,4c00hint 21hcode endsend

    此時,效率達到最高。


    5.3 在Debug中跟蹤用loop指令實現的循環程序

    考慮這樣一個問題,計算ffff:0006單元中的數乘以3,結果存儲在dx中。

    我們分析一下:

  • 運算后的結果是否會超出dx所能存儲的范圍?
    ffff:0006單元中的數是一個字節型的數據,范圍0~255之間,則用它和3相乘結果不會大于65535,可以在dx中存放下。
  • 用循環累加實現乘法,用哪個寄存器進行累加?
    將ffff:0006單元中的數賦值給ax,用dx進行累加。先設(dx) = 0,然后做3次(dx) = (dx) + (ax)。
  • ffff:6單元是一個字節單元,ax是一個16位寄存器,數據的長度不一樣,如何賦值?
    ax的低8位與ffff:6對其。
  • 編寫程序:

    assume cs:codecode segmentmov ax,0ffffhmov ds,axmov bx,6mov al,[bx]mov ah,0mov dx,0mov cx,3m: add dx,axloop mmov ax,4c00hint 21hcode endsend

    注意:在匯編源程序中,數據不能以字母開頭。

    自行Debug調試。這里還有個g指令,可以直接跳到某個語句。格式為:g IP的地址。


    Debug和匯編編譯器masm對指令的不同處理

    在Debug中編程實現:

    匯編源程序實現:

    assume cs:code code segmentmov ax,2000hmov ds,axmov al,[0]mov bl,[1]mov cl,[2]mov dl,[3]mov ax,4c00hint 21hcode ends end

    在Debug加載后:

    我們發現,Debug將它解釋為[idata],而編譯器將[idata]解釋為idata(也就是說,mov al ,[0] 等效于 (ax) = 0。[idata]表示常量,[bx]表示ds:[bx]。)


    loop 和 [bx] 的聯合應用

    計算ffff:0~b單元中的數據的和,結果存儲在dx中。

    分析:

  • 運算后的結果是否會超出dx所能存儲的范圍?
    ffff:0~b內存單元中的數據是字節型數據,范圍在0~255之間,12個這樣的數據相加,結果不會大于65535,可以在dx中存放下。
  • 我們能否將ffff:0~b中的數據直接累加到dx中?
    當然不行,因為ffff:0~b中的數據是8位的,不能直接加到16位寄存器dx中。
  • 我們能否將ffff:0~b中的數據累加到dl中,并設置(dh)=0,從而實現累加到dx中?
    不行,dl是8位寄存器,只能容納0~255之間,可能會造成進位丟失。
  • 我們到底怎樣將ffff:0~b中的8位數據,累加到16位寄存器dx中?
    將8位數據賦值到一個16位寄存器ax中,再將ax中的數據加到dx上。
  • 程序代碼如下:

    assume cs:code code segmentmov ax,0ffffhmov ds,axmov bx,0mov dx,0mov cx,12s: mov al,[bx]mov ah,0add dx,axinc bxloop smov ax,4c00hint 21hcode ends end

    這就是bx與loop配合使用的一個典型例子。


    5.6 段前綴

    我們可以使用段地址:[偏移地址]的形式:

  • mov ax,ds:[bx]
  • mov ax,cs:[bx]
  • mov ax,ss:[bx]
  • mov ax,es:[bx]
  • mov ax,ss:[0]
  • mov ax,cs:[0]
  • 以上的“ds:”、“cs:”、“ss:”、“es:”,在匯編語言中稱為段前綴


    5.7 一段安全的空間

    我們執行以下程序:

    assume cs:code code segmentmov ax,0mov ds,axmov ds:[26h],axmov ax,4c00hint 21hcode ends end

    運行后,發現報錯:

    這是由于0000:0026處存放的重要系統數據被修改而造成的。

    一般,合法的程序不會使用0000:0200~0000:02ff這段空間,所以對于我們來說,這段空間是安全的


    5.8 段前綴的使用

    將內存ffff:0~b單元中的數據復制到0:200~0:20b單元中。

    分析:

    (1)0:200~0:20b單元等同于0020:0~0020:b單元,它們描述的是同一段內存空間,
    (2)復制的過程應用循環實現。
    (3)在循環中,源始單元ffff:x和目標單元0200:x的偏移地址x是變量。用bx存放。
    (4)將0:200~0:20b用0020:0~0020:b描述。

    程序如下:

    assume cs:code code segmentmov ax,0ffffhmov ds,axmov ax,0020hmov es,axmov bx,0hmov cx,12m: mov dl,[bx]mov es:[bx],dlinc bxloop mmov ax,4c00hint 21hcode ends end

    實驗4 [bx]和loop的使用

    (1)編程,向內存0:200~0:23F依次傳送數據0~63(3FH)。

    assume cs:code code segmentmov ax,20hmov ds,axmov cx,40hmov bx,0s: mov [bx],bxinc bxloop smov ax,4c00hint 21hcode ends end

    (2)編程,向內存0:200~0:23F一次傳送數據0~63(3FH),程序中只能使用9條指令,9條指令中包括“mov ax,4c00h”和“int 21h”。

    答案同上。

    (3)下面的程序的功能是將“mov ax,4c00h”之前的指令復制到內存0:200處,補全程序。上機調試,跟蹤運行結果。

    assume cs:code code segmentmov ax,076Amov ds,axmov ax,0020hmov es,axmov bx,0mov cx,1Bh s: mov al,[bx]mov es:[bx],alinc bxloop smov ax,4c00hint 21hcode ends end

    提示:
    (1)復制的是什么?從哪里到哪里?
    復制的是指令,從076A:0開始到0020:0。
    (2)復制的是什么?有多少個字節?你如何知道要復制的字節的數量?
    有1B個字節。


    本章完

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的[BX] 和 loop 指令---汇编学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 丁香花五月 | www.99色 | 91av影院| 欧美三级网站 | 成人av电影免费观看 | 国产精品无码电影在线观看 | 男女做爰猛烈吃奶啪啪喷水网站 | 欧美成人h版在线观看 | 欧美欧美欧美欧美 | 中国爆后菊女人的视频 | 国产激情毛片 | 国产污在线观看 | 国产第4页 | 91av入口 | 超碰pron | 大地资源中文第三页 | 欧美精品在线一区 | 日韩第九页| 91成人免费视频 | 6699嫩草久久久精品影院 | 日本电影成人 | 亚洲欧美一区在线 | 麻豆一区二区在线 | 国产精品91视频 | 91theporn国产在线观看 | av在线导航 | 狂野欧美性猛交xxxx | 亚洲女人初尝黑人巨大 | 草久在线观看视频 | 国产老女人精品毛片久久 | 色在线免费视频 | 性欧美大战久久久久久久久 | 毛片黄色一级 | 91大神视频在线播放 | 国产99视频在线观看 | 暗呦丨小u女国产精品 | 日本特黄色片 | 日韩国产在线播放 | 久久午夜国产精品 | 国产一区欧美一区 | 麻豆tv在线观看 | 亚洲av永久无码国产精品久久 | 欧美三级视频在线观看 | 亚洲av成人无码网天堂 | 朝桐光av一区二区三区 | 亚洲精华液一区二区 | 中文字幕第四页 | 中文字幕丰满乱子伦无码专区 | 天天插插插 | 国产一区欧美一区 | 亚州一区二区 | 99热这里只有精品18 | 看国产一级片 | 91官网视频 | xnxx国产| 91精品国产成人观看 | 国产日韩在线观看一区 | 亚洲AV成人无码久久精品巨臀 | 在线欧美 | 国偷自产视频一区二区久 | 国产午夜在线视频 | 久久视频精品 | 国产东北露脸精品视频 | 欧美性做爰毛片 | 久久国产视频精品 | 欧美三级小说 | 香蕉在线观看视频 | 香蕉久久网 | 国产精品国产精品国产 | 亚洲一区欧洲一区 | 日韩中文欧美 | 久久夜色精品亚洲 | 外国一级片 | 制服丝袜第二页 | 一区二区在线免费看 | 久久天天东北熟女毛茸茸 | 福利在线一区二区三区 | 伊人毛片 | 不卡的一区二区 | 一级aaaa毛片 | 中文字幕乱码中文乱码777 | 老女人做爰全过程免费的视频 | 日本一区二区人妻 | 特黄a级片 | 男女搞鸡网站 | 亚洲va久久久噜噜噜久久天堂 | 久久久精品人妻无码专区 | 精品人妻伦一二三区久久 | 美日韩黄色片 | 性欧美成人播放77777 | 亚洲免费av网址 | 欧美91看片特黄aaaa | 美女热逼| 处破女av一区二区 | 久久看片网 | 亚欧乱色| 草草影院av| 色情毛片 | 波多野结衣电影在线播放 |