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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编 无条件转移和过程调用指令

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编 无条件转移和过程调用指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)JMP無條件轉移指令

  • 指令格式:JMP 目的
  • 指令功能:
    使程序無條件地轉移到指令中指定的目的地去執行。
  • 這類指令又分為兩種類型:
    • 第一種類型:段內轉移或近(NEAR)轉移,轉移指令的目的地址和JMP指令在同一代碼段中,轉移時僅改變IP寄存器的內容,段地址CS的值不變。
    • 第二種類型:段間轉移,又被稱之為遠(FAR) 轉移,轉移指令的目的地址和JMP指令不在同一段中,發生轉移時,CS和IP的值都要改變——程序要轉移到另一個代碼段去執行。

無條件轉移指令的類型和方式

類型方式尋址目標
段內轉移直接立即短轉移(8位)
段內轉移直接立即近轉移(8位)
段內轉移間接寄存器(16位)
段內轉移間接存儲器(16位)
段間轉移直接立即轉移(32位)
段間轉移間接存儲器(32位)
  • 段內直接轉移指令
    指令格式:JMP SHORT 標號 JMP NEAR PTR 標號(或JMP 標號)
  • jmp指令能夠修改 IP 或 CS 或者同時修改的指令

    • CS:段地址
    • IP:偏移地址

    通過以下指令,修改段地址和偏移地址

    jmp 4000:0

    jmp 2600:500


    錯誤的修改CS和IP的方式:

    mov cs,2000 mov ip,500 mov ip,ax

    以上三條修改方式均是錯誤的修改方式。

    注意:用以下方式雖然編譯成功,但是也不能對CS進行正確的修改。

    mov ax,500 mov cs,ax

    但是用以下這種方式對IP進行修改:

    mov ax,500 jmp ax

    指令執行的過程:

    • 1.CPU從 cs:ip 所組成的地址中讀取指令,將這個指令存放到指令緩存器中
    • 2.IP = IP + 所讀指令的字節數
    • 3.執行指令緩存器中的內容,回到步驟 1 重復這個過程。

    假設cs = 2000, IP = 0000, 寫出指令執行的過程

    a 2000:0 mov ax,6622 ; cs = 2000, ip = 0 + 3 = 3 jmp 1000:3 ; cs =2000, ip= 3 + 5 = 8 mov cx,axa 1000:0 mov ax,0123 ; cs = 1000 ip = 0 + 3 = 3 mov ax,0 ; cs = 1000 ip = 3 + 3 = 6 mov bx,ax ; cs = 1000 ip = 6 + 2 =8 jmp bx ;cs = 1000 ip = 0


    例:

    mov ax,bx ; ax = bx sub ax,ax ; ax = ax - ax =0 jmp ax mov ax,bx ; => 指令緩存器 => 1 => 執行 sub ax,ax ; => 指令緩存器 = > 1 = > 執行 jmp ax ; => 指令緩存器 = > 1 => 執行 => 1

    上面3條指令執行后,cpu 4次修改了IP,最后一次IP的值為0


    用3條指令寫入從2000:0開始的內存單元,利用3條指令計算 2 的 8 次方

    mov ax,1 add ax,ax jmp 2000:3





    (2)過程調用和返回指令
    在編寫程序時,往往把某些能完成特定功能而又經常要用到的程序段,編寫成獨立的模塊,并把它成為過程,習慣上也稱為主程序,然后在程序中用CALL語句調用這些過程,調用過程的程序稱為主程序。若在過程運行中又去調用另一個過程,稱為過程嵌套。它使程序結構清晰,可讀性強,同時也能節省內存。

    過程調用和返回指令的格式如下:

    CALL 過程名 RET

    過程調用有近調用和遠調用兩種類型 。
    例如:

    上面程序代碼執行的順序:

    call cpy_Boot ; 執行該代碼后,會跳轉到 cpy_Boot ,執行到ret 后跳轉到 call cpy_Boot下面的代碼繼續執行。(類似 C語言的goto) ============================================================= cpy_Boot:mov bx,1000Hmov bx,1001Hmov bx,1002Hmov bx,1003Hmov bx,1004Hretmov ax,1000Hmov ax,1001Hmov ax,1002Hmov ax,1003Hmov ax,1004Hmov ax 4c00Hint 21H

    總結

    以上是生活随笔為你收集整理的汇编 无条件转移和过程调用指令的全部內容,希望文章能夠幫你解決所遇到的問題。

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