汇编语言:实验8分析一个奇怪的程序
生活随笔
收集整理的這篇文章主要介紹了
汇编语言:实验8分析一个奇怪的程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實驗介紹
實驗8 分析一個奇怪的程序
分析下面的程序,在運行前思考:這個程序可以正確返回嗎?
運行后再思考:為什么是這種結果?
實驗代碼
;實驗8 分析一個奇怪的程序 ;分析下面的程序,在運行前思考:這個程序可以正確返回嗎? ;運行后再思考:為什么是這種結果? assume cs:codesg codesg segmentmov ax,4c00hint 21h start: mov ax,0 s:nop ;nop 什么也不做占1個字節nopmov di,offset s ;di 存放s的位移 8Hmov si,offset s2 ;si 存放s2的位移20H mov ax,cs:[si] ;ax 存放 jmp short s1指令數據 EBF6(F6 = -9) 實質是往前移9個,后面顯示的jmp short s1 會轉化成 jmp (ip)mov cs:[di],ax ;將s:nop 存ax中的數據也就是 EBF6 s0:jmp short s ;跳轉到標號s處執行指令 jmp 指令,為數據 EBF6 往偏移9個位置剛好是cs:0的位置,所以能正確返回 s1:mov ax,0int 21hmov ax,0 s2:jmp short s1 ;占2個字節nopcodesg ends end start實驗分析
代碼是順序結構進行從start標號開始執行,一直到s0 都沒有進行任何的轉移,執行到 jmp short s時 ,然后cs:ip又會指向標號s處的指令,為jmp 指令 數據為EBF6 ,其中F6代表要偏移的位置 轉為有符號的8位二進制是-10 ,就是往前移10個字節(包含本身所占字節數) 剛好指向code段開始 翻譯成jmp 指令就是 jmp 0!然后指向 mov ax,4c00,int 21h。所以程序可以正確的返回。
這里最重要的是要理解jmp 指令的本質,短轉移它的二進制數的EBF6,F6代表的是偏移量,然而顯示的jmp指令內容是 jmp (ip)!,(ip)會根據偏移量自動計算!所以賦值jmp指令內容 顯示的匯編指令 是變動的,而二進制數卻不是變動的。
實驗結果
結果當然也在我們的意料之后,能正確的結束程序。
總結
以上是生活随笔為你收集整理的汇编语言:实验8分析一个奇怪的程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue-easyui中如何给ComboG
- 下一篇: MySQL拓展操作