1. 程式人生 > >王爽《組合語言》實驗8 分析一個奇怪的程式

王爽《組合語言》實驗8 分析一個奇怪的程式

我將畫出記憶體中內容來解釋這個實驗,易於理解。
進入debug模式,最開始各個暫存器的狀態:

AX=0000  BX=0000  CX=0023  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B15  ES=0B15  SS=0B25  CS=0B25  IP=0005   NV UP EI PL NZ NA PO NC
0B25:0005 B80000        MOV     AX,0000

在執行到 mov di,offset s之前,記憶體是這樣的:
這裡寫圖片描述
即從0b25:5執行到0b25:9。
0b25:a-ob25:15這段程式碼實際上是將s2開始的兩個位元組複製到s開始的兩個位元組中,即覆蓋了s中的兩個nop

      mov
di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax

執行完這段之後,記憶體如下
這裡寫圖片描述
繼續執行,IP暫存器指向0b25:16(即S0),執行jmp指令後會跳回到S處。再執行S處的jmp指令,用當前指令後的第一個位元組a加上偏移F6,得到00,即會跳轉到0b25:0,執行mov ax,4c00h int 21,正常結束程式。

相關推薦

組合語言實驗8 分析一個奇怪程式

我將畫出記憶體中內容來解釋這個實驗,易於理解。 進入debug模式,最開始各個暫存器的狀態: AX=0000 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B15 ES

組合語言 實驗7 定址方式在結構化資料訪問中的應用,用棧實現

assume cs:codesg data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db

-組合語言第三版實驗7

;1. 資料組織 data 中資料當成陣列,table中資料當成結構體。 ;2. data 用si來定址, table 用 bx , di, idata來定址 assume cs:codesg , ss:stacksg data segment    db '1975','1976','1977','1978

組合語言 第二版 實驗七 定址方式在結構化資料訪問中的使用 原始碼

這是學習彙編以來遇到的最繁瑣的一個程式,其實思路理清了也就是那麼回事,但還是花了一整個晚上才把它寫出來,晒晒 assume cs:code data segment db '1975','1976','1977','1978','1979','1980','1981

最強大的組合語言學習環境使用教程

  最強大的王爽組合語言學習環境使用教程 一、前言   這是採用VMwere Workstation 12 pro虛擬機器軟體,搭建的MS-DOS學習環境,在windowsXP/8/10及linux中均可以使用,在這個環境中,我集成了CCDOS中文系統,pdos中文系統,使

組合語言綜合研究-函式如何接收不定數量的引數

1、c語言如何傳遞引數 編寫這樣一個程式試驗 void showchar(char a,int b); main() { showchar('a',2); } void showchar(char a,int b) { *(char far *)(0xb8000000 + 160*10 + 80

windows10中最強大組合語言學習環境

一、前言   這是採用VMwere Workstation12 pro虛擬機器軟體,搭建的MS-DOS學習環境,在windowsXP/8/10及linux中均可以使用,在這個環境中,我集成了CCDOS中文系統,pdos中文系統,使用這些系統,可以進行中文輸入與顯示。還集成

組合語言課程設計1

;=============================================================================== ;課程設計1 ;將實驗7中的po

實驗一 第一個Android程式和Activity生命週期

實驗一 第一個Android程式和Activity生命週期 實驗目的 實驗要求 工程程式碼 實驗目的 生成執行第一個Android程式,熟悉瞭解Android手機開發平臺的基本構成和使用方法,熟悉Android應用

TensorFlow技術解析與實戰 8一個tensorflow程式

TensorFlow的執行方式分如下4步: (1)載入資料及定義超引數 (2)構建網路 (3)訓練模型 (4)評估模型和進行預測 # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding(

組合語言》第八章實驗七 題目分析解答

王爽老師的《組合語言》是很好的一本彙編書,裡面用通俗的例子講清楚了很多讓彙編初學者一直困惑的難點。比如暫存器分段定址、各種暫存器的作用等等。 第八章是這本書的一個總結性的章節,後面也給出了一道比較綜合的題目,完成這道題是對之前學習的檢驗,所以要繼續往下學習,這道題是必須完成

組合語言》(第三版) 實驗8、9:

下面的程式簡單分析了一下: assume cs:code code segment mov ax, 4c00H int 21h s

組合語言】(著第三版)實驗

實驗二 實驗任務(一) 實驗前要求我們將書本P74的程式段按理論分析,將結果進行填空。之後用Debug,將該程式段寫入記憶體,逐條執行之後, 根據指令執行後的實際執行的結果填空如下。   mov ax,0021   mov  ax , ffff   &n

組合語言第三版》學習歷程——實驗16

編寫包含多個功能子程式的中斷例程 要求: 安裝一個新的int 7ch中斷例程,為顯示輸出提供如下功能: (1)、清屏; (2)、設定前景色; (3)、設定背景色; (4)、向上滾動一行; 入口引數說明如下。 (1)、用ah暫存器傳遞功能號:0表示

組合語言》第三版-實驗9 根據材料程式設計

assume cs:code,ds:data data segment ;在資料段定義字串 db 'Welcome to masm!' data ends code segment start: mov ax,data mov ds,ax mov ax,0b800h

組合語言第三版)實驗7 定址方式在結構化資料訪問中的應用

這個實驗我自己摸索了好幾個小時才弄出來,最後想通了發現自己把問題想複雜了。 1、個人認為最簡單的方法 assume cs:code,ds:data data segment db '1975','1976','1977','1978','1979','1980','19

組合語言第三版)實驗4

1.程式設計:向記憶體0:200H~0:23fH依次傳送資料0~63(3FH)程式分析:【1】記憶體0:200H~0:23fH空間與0020:0-0020:3f記憶體空間是一樣的,(這個不會?oh!My God!,實體地址是唯一的,但邏輯地址組合是多種的。)【2】因為偏移地址

組合語言 第三版 實驗6 更改大寫字母

題目: 將如圖所示記憶體地址處的小寫字母改為大寫。 注意:si的值每次二重迴圈之前需要重置。 程式碼:assume cs:code,ds:data,ss:stack data segment db '

組合語言》第三版 第十章 實驗

1、顯示字串 程式碼如下: assume cs:code data segment db 'Welcome to masm!', 0 data ends code segment start:

組合語言 第三版 實驗9 根據材料程式設計

題目:      注意事項: 1.windows 7下執行可能看不到效果,我這裡是這樣,安裝xp解決。 2.橫向比較,多篇教程綜合看。 程式碼: assume cs:code,ds:data,ss