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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转移指令的原理---汇编学习笔记

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

轉移指令的原理

可以修改IP,或同時修改CS和IP的指令統稱為轉移指令。

8086CPU的轉移行為有以下幾類。

  • 只修改IP時,稱為段內轉移,比如:jmp ax。
  • 同時修改CS和IP時,稱為段間轉移,比如:jmp 1000:0。

段內轉移又分為:短轉移和近轉移。

-**短轉移**IP的修改范圍為-128~127
- **近轉移**IP的修改范圍為-32768~32767

8086CPU的轉移指令分為以下幾類

  • 無條件轉移指令(如:jmp)
  • 條件轉移指令
  • 循環指令(如:loop)
  • 過程
  • 中斷

9.1 操作符offset

操作符offset在匯編語言中是由編譯器處理的符號,它的功能是取得標號的偏移地址。比如:

assume cd:codesg codesg segmentstart:mov ax,offset start ;相當于mov ax,0s:mov ax,offset s ;相當于mov ax,3 codesg ends end start

問題 9.1
有如下程序段,添寫兩條指令,使該程序在運行中將s處的一條指令復制到s0處。

assume cs:codesg codesg segments:mov ax,bx ;mov ax,bx的機器碼占兩個字節mov si,offset smov di,offset s0;下面寫兩條指令mov ax,cs:[si]mov cs:[di],axs0:nop ;nop的機器碼占一個字節nop codesg ends end s

9.2 jmp指令

jmp為無條件轉移指令,可以只修改IP,也可以同時修改CS和IP

jmp指令要給出兩種信息:
(1)轉移的目的地址
(2)轉移的距離(段間轉移、段內短轉移,段內近轉移)


9.3 依據位移進行轉移的jmp指令

jmp short 標號(轉到標號處執行指令),這種格式的jmp指令實現的是段內短轉移

比如:

assume cs:codesg codesg segmentstart:mov ax,0jmp short sadd ax,1s:inc ax codesg ends end start

這段程序執行后,ax中的值為1,因為執行jmp short s后,越過了add ax,1,IP指向標號s處的inc ax。也就是說,程序只進行了一次ax加1操作。

程序所對應的機器碼:

例子和圖解:

實際上,jmp short 標號的功能為:(IP)=(IP)+8(IP)=(IP)+8位位移。
(1)8位位移=標號處的地址-jmp指令后的第一個字節的地址;
(2)short指明此處的位移為8位位移;
(3)8位位移的范圍為-128~127,用補碼表示;
(4)8位位移由編譯程序在編譯時算出。

另一種段內近轉移jmp near ptr 標號與此類似,范圍為-32768~32767。


9.4 轉移的目的地址在指令中的jmp指令

jmp指令并沒有轉移目的地址,而是相對于當前IP的轉移位移。jmp far ptr 標號實現的是段間轉移,又稱為遠轉移。功能如:
(CS)=(CS)=標號所在段的段地址
(IP)=(IP)=標號在段中的偏移地址

例子:

assume cs:codesg codesg segmentstart:mov ax,0mov bx,0jmp far ptr sdb 256 dup (0)s:add ax,1inc ax codesg ends end start

程序所對應的機器碼:

可以看出,這是直接將段間地址明確指出,而不是計算IP


9.5 轉移地址在寄存器中的jmp指令

指令格式:jmp 16位 reg
功能:(IP)=(16reg)(IP)=(16位reg)


9.6 轉移地址在內存中的jmp指令

轉移地址在內存中jmp指令有兩種格式:
(1)jmp word ptr 內存單元地址(段內轉移)
功能:從內存單元地址處開始存放著一個字,是轉移的目的偏移地址。
格式:

mov ax,0123h mov [bx],ax jmp word ptr [bx]

執行后,(IP)=0123H(IP)=0123H
(2)jmp dword ptr 內存單元地址(段間轉移)
功能:從內存單元地址處開始存放著兩個字,高地址處的字是轉移的目的段地址,低地址處是轉移的目的偏移地址。
(CS)=(+2)(CS)=(內存單元地址+2)
(IP)=()(IP)=(內存單元地址)
格式:

mov ax,0123h mov [bx],ax mov word ptr [bx+2],0 jmp dword ptr [bx]

執行后,(CS)=0,(IP)=0123H(CS)=0,(IP)=0123H,CS:IP指向0000:0123

檢測點 9.1
(1)程序如下。

assume cs:code,ds:data data segment? data endscode segmentstart:mov ax,datamov ds,axmov bx,0jmp word ptr [bx+1] code ends end start

若要使程序中的jmp指令執行后,CS:IP指向程序的第一條指令,在data段中應該定義哪些數據?
答案:由于第一條指令的位置是在cs:0000,所以需要將IP改為0,因此data段中的數據只要頭3個字節的數據為0即可。

(2)程序如下(補全程序),使jmp指令執行后,CS:IP指向程序的第一條指令:

assume cs:code,ds:datadata segmentdd 1234567h data endscode segmentstart:mov ax,datamov ds,axmov bx,0;補全下面兩個代碼mov [bx],bxmov [bx+2],csjmp dword ptr ds:[0] code ends end start

(3)用Debug查看內存,結果如下:
2000:1000 BE 00 06 00 00 00 …
則此時,CPU執行指令:

mov ax,2000H mov es,ax jmp dword ptr es:[1000H]

后,(CS)=0006h,(IP)=00BEh(CS)=0006h,(IP)=00BEh


9.7 jcxz指令

jcxz指令為有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址。對IP的修改范圍都為:-128~127.

指令格式:jcxz 標號(如果(cx)=0,轉移到標號處執行)
操作:

  • 當(cx)=0時,(IP)=(IP)+8位位移
  • 8位位移=標號處的地址-jcxz指令后的第一個字節的地址
  • 8位位移的范圍為-128~127,用補碼表示
  • 8位位移由編譯程序在編譯時算出
  • 當(cx)=0時,什么也不做(程序向下執行)
  • jcxz 標號相當于if(cx==0) jmp short 標號。

    檢測點 9.2
    補全編程,利用jcxz指令,實現在內存2000h段中查找第一個值為0的字節,找到后,將它的偏移地址存儲在dx中。

    assume cs:code code segmentstart:mov ax,2000hmov ds,axmov bx,0s:;補全下面4條指令mov ch,0mov cl,[bx]jcxz okinc bxjmp short sok:mov dx,bxmov ax,4c00hint 21h code ends end start

    9.8 loop指令

    loop指令為循環指令,所有的循環指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址。對IP的修改范圍都為:-128~127。

    指令格式:loop 標號((cx)=(cx)-1,如果(cx)!=0,轉移到標號處執行)
    操作:

  • (cx)=(cx)-1
  • 如果(cx)!=0,(IP)=(IP)+8位位移
  • 8位位移=標號處的地址-loop指令后的第一個字節的地址
  • 8位位移的范圍為-128~127,用補碼表示
  • 8位位移由編譯程序在編譯時算出
  • 如果(cx)=0,什么也不做(程序向下執行)
  • loop 標號相當于(cx)--; if((cx)!=0) jmp short 標號;。

    檢測點 9.3
    補全編程,利用loop指令,實現在內存2000H段中查找第一個值為0的字節,找到后,將它的偏移地址存儲在dx中。

    assume cs:code code segmentstart:mov ax,2000hmov ds,axmov bx,0s:mov cl,[bx]mov ch,0;補全下面一條指令inc cxinc bxloop sok:dec bx ;dec指令功能和inc相反mov dx,bxmov ax,4c00hint 21h code ends end start

    9.9 根據位移進行轉移的意義

    前面講到:

    jmp short 標號 ;-128~127jmp near ptr 標號 ;-32768~32767jcxz 標號 ;-128~127loop 標號 ;-128~127

    這種設計,方便了程序段在內存中的浮動裝配。


    9.10 編譯器對轉移位移超界的檢測

    如果在源程序中出現了轉移范圍超界的問題,在編譯的時候,編譯器將報錯。


    實驗8 分析一個奇怪的程序

    分析下面的程序,在運行前思考:這個程序可以正確返回嗎?

    運行后再思考:為什么是這種結果?

    通過這個程序加深對相關內容的理解。

    assume cs:codesg codesg segmentmov ax,4c00hint 21hstart:mov ax,0s:nopnopmov di,offset smov si,offset s2mov ax,cs:[si]mov cs:[di],axs0:jmp short ss1:mov ax,0int 21hmov ax,0s2:jmp short s1nop codesg ends end start

    實驗前分析:程序從start開始執行,執行完mov cs:[di],ax時,s的兩個nop應該變為jmp short s1,繼續執行完jmp short s后就要開始執行jmp short s1然后轉移到標號s1處,執行到int 21h時,返回。

    實驗時:
    (1)執行完mov cs:[di],ax后

    可以看出nop變成了EBF6((IP)=(IP)-10)與下面的相同

    此后將執行mov ax,4c00h 和 int 21h,最后結束程序。


    實驗9 根據材料編程

    內容說明省略,只給出程序代碼。

    assume cs:code,ds:datadata segmentdb 'welcome to masm!' data endscode segmentstart:;在第13行顯示,也就是780H;在第40/2-8=32列開始顯示,也就是40H;B800:0000H~B800:FFFFH這一段是從B800開始;初始化mov ax,datamov ds,axmov bx,0;顯示緩存區位置初始化mov ax,0b800hadd ax,78hmov es,axmov si,40hmov cx,16s:;高字節,藍色吧mov ah,1hmov al,ds:[bx]mov es:[si+1],ahmov es:[si],alinc bxadd si,2loop smov ax,4c00hint 21hcode ends end start

    實驗結果:

    總結

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

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

    主站蜘蛛池模板: 国产精选91 | 99riav3国产精品视频 | 色播av| 国产免费av片在线 | 精品欧美乱码久久久久久 | 亚洲精选在线 | 午夜精品国产精品大乳美女 | 国产高中女学生第一次 | 99re这里只有精品在线观看 | www.久久久| 日本久久久网站 | 成人av影视在线观看 | 大地资源影视在线播放观看高清视频 | 一本大道东京热无码aⅴ | 伊人激情 | 亚洲少妇一区二区三区 | 亚洲一区二区三区蜜桃 | 久久亚洲精 | 亚洲第十页| 亚洲啪av永久无码精品放毛片 | 尤物毛片| 麻豆电影网站 | 成人福利视频网 | 国产chinesehd精品露脸 | 姐姐的秘密韩剧免费观看全集中文 | av大全网站| 在线成年人视频 | 成人一级在线 | 香蕉视频在线免费 | 欧美.com| 国产嫩草视频 | 色黄啪啪网 | 国产 福利 在线 | 开心激情五月网 | 99久久国产综合 | 在线91av | 成人啪啪网站 | 亚洲一区二区三区91 | 日韩在线不卡一区 | av导航福利| 在线免费观看不卡av | 黄色网址哪里有 | 艳母动漫在线播放 | 日本一区不卡在线观看 | 美女校花脱精光 | av免费在线网站 | 午夜免费福利网站 | 午夜一区二区三区免费 | 激情网五月天 | 国产精品一亚洲av日韩av欧 | 亚洲精品中文字幕在线播放 | 日本xxxxxwwwww | 亚洲高清自拍 | 日韩精品久久久久久久的张开腿让 | 日本69视频 | 久久亚洲日本 | 亚洲AV无码片久久精品 | 最近最新mv字幕观看 | 99久久人妻精品免费二区 | 国产成人小视频在线观看 | 小珊的性放荡羞辱日记 | 九月激情网 | 四虎网站在线观看 | 国产婷婷色 | 毛片在线观看网站 | av新天堂| 好男人.www| 精品视频 | 黑人巨大精品 | 亚洲综合免费 | 日本网站免费 | 天天看天天做 | 午夜久久一区 | 国产凹凸一区二二区 | 日韩在线电影一区二区 | 国产在线观看黄色 | 蜜桃av成人永久免费 | 午夜激情综合 | 奇米四色7777| 最新91视频 | 欧美黄色性 | 亚洲精品在线免费 | 日韩 国产 在线 | 奇米第四色影视 | 中日韩精品一区二区三区 | 国产乱子伦农村叉叉叉 | 久久精品爱| 性生活在线视频 | 干干干操操操 | 国产精品亚洲一区二区三区 | 精品蜜桃一区二区三区 | 亚洲成人高清在线观看 | 99精品视频一区二区三区 | 特黄一级大片 | 午夜激情男女 | 黄色www | 天天操网站 | 丝袜制服影音先锋 | 久久国产人妻一区二区免色戒电影 |