1. 程式人生 > >王爽《組合語言》(第三版) 實驗8、9:

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

這裡寫圖片描述

下面的程式簡單分析了一下:

assume cs:code

code segment
            mov ax, 4c00H
            int 21h 

    start:  mov ax, 0
        s:  nop
            nop

            mov di, offset s
            mov si, offset s2
            mov ax, cs:[si]
            mov cs:[di], ax
            ;取得s和s2偏移地址分別存放到di和si中
            ;之後將s2處對應的指令轉移到s的第一個指令
s0: jmp short s ;跳轉到標號s處 ;具體計算方法為s0處對應IP+2+位移(負數用補碼錶示) ;上面已經將s處的第一條指令更改為了s2的第一條指令 ;所以會執行jmp short s1指令,但是實際上jmp short s1 ;的機器碼還是s2相對於s1的位移,也就是EBF6 ;F6為補碼錶示,-10,由於計算方法為s2對應IP+2-10 ;故而最終結果就是指令被轉移到了s對應IP-8的位置 ;s對應的IP為0008,因此,最後的結果就是執行cs:0000處
;的指令:mov ax, 4c00H,之後執行int 21H ;程式正常終止 s1: mov ax, 0 int 21h mov ax, 0 s2: jmp short s1 nop code ends end start

debug全屏模式alt+enter
實驗9:
程式碼:

assume cs:code

data segment
    dw 57h, 65h, 6Ch, 63h, 6Fh, 6Dh, 65h, 20h, 74
h, 6Fh, 20h, 74h, 68h, 65h, 20h, 77h, 6Fh, 72h, 6Ch, 64h, 21h data ends code segment start: mov ax, 0b800h mov ds, ax mov ax, data mov es, ax mov bx, 0 mov cx, 15h s: mov al, es:[bx] mov ah, 02h mov ds:[bx], ax add bx, 2 loop s mov ax, 4c00h int 21h code ends end start

效果:
這裡寫圖片描述