1. 程式人生 > >彙編:轉移目的地址在記憶體中

彙編:轉移目的地址在記憶體中

assume cs:code, ds:data, ss:stack

; 設定資料段
data segment
	db 128 dup (0)
data ends

; 設定棧段
stack segment stack
	db 128 dup (0)
stack ends

; 設定程式碼段
code segment
	start:	mov ax, stack
		mov ss, ax
		mov sp, 128

		mov ax, data
		mov ds, ax


		mov ax, 2000H
		mov ds:[0], ax
		mov ds:[2], 6666H

		;jmp word ptr ds:[0]  ; IP = ds:[0]的字型資料, 修改ip的值
		; dword 表示雙字
		jmp dword ptr ds:[0] ; ip = ds:[0], cs=ds:[2], 修改cs, ip的值


		mov ax, 4C00H
		int 21H
		
		
code ends
end start

 

assume cs:code, ds:data, ss:stack

; 設定資料段
data segment
	db 128 dup (0)
data ends

; 設定棧段
stack segment stack
	db 128 dup (0)
stack ends

; 設定程式碼段
code segment
	start:	mov ax, stack
		mov ss, ax
		mov sp, 128

		mov ax, data
		mov ds, ax

		mov word ptr ds:[0], OFFSET s
		mov word ptr ds:[2], OFFSET s1
		mov word ptr ds:[4], OFFSET s2

		mov bx, 2

		; 地址也是一種資料
		jmp word ptr ds:[bx]  ; IP = ds:[0]的字型資料, 修改ip的值


	s:	mov ax, 1000H
		jmp over

	s1:	mov ax, 1001H
		jmp over

	s2:	mov ax, 1002H
		jmp over

	over:	mov ax, 4C00H
		int 21H
		
		
code ends
end start