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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编 过程 创建并测试 proc endp call ret uses

發布時間:2025/6/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编 过程 创建并测试 proc endp call ret uses 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

過程

堆棧操作

  • LIFO

運行時堆棧

  • 入棧操作

    • 高地址向低地址
  • 出棧操作

    • 低地址高低地址
  • 堆棧作用

    • 臨時保存寄存器, 被修改后可恢復
    • 執行call時,保存返回地址
    • 參數壓入堆棧進行傳遞
    • 臨時存儲局部變量

    push, pop

    • push
      • 減少esp的值,將源操作數復制到堆棧
      • push reg/mem16
      • push reg/mem32
      • push imm32
    • pop
      • 增加esp的值,將堆棧中的內容復制到16位或32位操作數中
      • pop reg/mem16
      • pop reg/mem32

    pushfd, popfd

    • pushfd: 將32位eflags寄存器壓入到堆棧中
    • popfd: 將堆棧中的內容復制到eflags中
    .data saveFlags dword ? .code pushfd pop saveFlagspush saveFlags popfd

    pushad, pusha, popad, popa

    • pushad將eax, ecx, edx, ebx, esp(執行之前的值), ebp, esi, edi的順序壓棧
    • popad以相反順序彈棧
    • pusha將ax, cx, dx, bx, sp(執行之前的值), bp, si, di的順序壓棧
    • popa以相反順序彈棧
    • 過程用一個或多個寄存器來返回結果時,不應該使用

定義并使用過程

proc

main proc ... main endpsample proc ...ret sample endp; 標號與jmp在同一個過程中 jmp destination ; 取消限制 destination ::; 三個整數求和 sumof procadd eax, ebxadd eax, ecxret sumof endp
  • 添加描述信息
  • 輸入參數及其用法的列表,并將其命名為Receives
  • 返回值的描述,并命名為Returns
  • 對過程返回的所有數值的描述(先決條件),在調用之前滿足,并命名為Requies
;---------------------- ; sumof ; ; 計算3個32位整數之和并返回和數 ; Receives: eax,ebx和ecx為3個整數,可能是有符號數,或無符號數 ; Returns:eax = 和數 ;---------------------- sumof procadd eax, ebxadd eax, ecxret sumof endp

call,ret

main proc 00000020 call MySub 00000025 mov eax, ebxMySub proc 00000040 mov eax, edx ...retMySub endp
  • 過程調用嵌套

  • 向過程傳遞寄存器參數

    .data theSum dword ? .code main procmov eax, 10000hmov ebx, 20000hmov ecx, 30000hcall sumofmov theSum, eax

總結

以上是生活随笔為你收集整理的汇编 过程 创建并测试 proc endp call ret uses的全部內容,希望文章能夠幫你解決所遇到的問題。

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